Merge git://git.kernel.org/pub/scm/linux/kernel/git/sfrench/cifs-2.6
* git://git.kernel.org/pub/scm/linux/kernel/git/sfrench/cifs-2.6: [CIFS] update cifs version to 1.73 [CIFS] trivial cleanup fscache cFYI and cERROR messages cifs: correctly handle NULL tcon pointer in CIFSTCon cifs: show sec= option in /proc/mounts cifs: don't allow cifs_reconnect to exit with NULL socket pointer CIFS: Fix sparse error
This commit is contained in:
commit
6211b3e1bb
5 changed files with 73 additions and 42 deletions
|
@ -92,7 +92,7 @@ static uint16_t cifs_server_get_key(const void *cookie_netfs_data,
|
||||||
break;
|
break;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
cERROR(1, "CIFS: Unknown network family '%d'", sa->sa_family);
|
cERROR(1, "Unknown network family '%d'", sa->sa_family);
|
||||||
key_len = 0;
|
key_len = 0;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
@ -152,7 +152,7 @@ static uint16_t cifs_super_get_key(const void *cookie_netfs_data, void *buffer,
|
||||||
|
|
||||||
sharename = extract_sharename(tcon->treeName);
|
sharename = extract_sharename(tcon->treeName);
|
||||||
if (IS_ERR(sharename)) {
|
if (IS_ERR(sharename)) {
|
||||||
cFYI(1, "CIFS: couldn't extract sharename\n");
|
cFYI(1, "%s: couldn't extract sharename\n", __func__);
|
||||||
sharename = NULL;
|
sharename = NULL;
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
@ -302,7 +302,7 @@ static void cifs_fscache_inode_now_uncached(void *cookie_netfs_data)
|
||||||
pagevec_init(&pvec, 0);
|
pagevec_init(&pvec, 0);
|
||||||
first = 0;
|
first = 0;
|
||||||
|
|
||||||
cFYI(1, "cifs inode 0x%p now uncached", cifsi);
|
cFYI(1, "%s: cifs inode 0x%p now uncached", __func__, cifsi);
|
||||||
|
|
||||||
for (;;) {
|
for (;;) {
|
||||||
nr_pages = pagevec_lookup(&pvec,
|
nr_pages = pagevec_lookup(&pvec,
|
||||||
|
|
|
@ -352,6 +352,37 @@ cifs_show_address(struct seq_file *s, struct TCP_Server_Info *server)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
cifs_show_security(struct seq_file *s, struct TCP_Server_Info *server)
|
||||||
|
{
|
||||||
|
seq_printf(s, ",sec=");
|
||||||
|
|
||||||
|
switch (server->secType) {
|
||||||
|
case LANMAN:
|
||||||
|
seq_printf(s, "lanman");
|
||||||
|
break;
|
||||||
|
case NTLMv2:
|
||||||
|
seq_printf(s, "ntlmv2");
|
||||||
|
break;
|
||||||
|
case NTLM:
|
||||||
|
seq_printf(s, "ntlm");
|
||||||
|
break;
|
||||||
|
case Kerberos:
|
||||||
|
seq_printf(s, "krb5");
|
||||||
|
break;
|
||||||
|
case RawNTLMSSP:
|
||||||
|
seq_printf(s, "ntlmssp");
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
/* shouldn't ever happen */
|
||||||
|
seq_printf(s, "unknown");
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (server->sec_mode & (SECMODE_SIGN_REQUIRED | SECMODE_SIGN_ENABLED))
|
||||||
|
seq_printf(s, "i");
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* cifs_show_options() is for displaying mount options in /proc/mounts.
|
* cifs_show_options() is for displaying mount options in /proc/mounts.
|
||||||
* Not all settable options are displayed but most of the important
|
* Not all settable options are displayed but most of the important
|
||||||
|
@ -365,6 +396,8 @@ cifs_show_options(struct seq_file *s, struct vfsmount *m)
|
||||||
struct sockaddr *srcaddr;
|
struct sockaddr *srcaddr;
|
||||||
srcaddr = (struct sockaddr *)&tcon->ses->server->srcaddr;
|
srcaddr = (struct sockaddr *)&tcon->ses->server->srcaddr;
|
||||||
|
|
||||||
|
cifs_show_security(s, tcon->ses->server);
|
||||||
|
|
||||||
seq_printf(s, ",unc=%s", tcon->treeName);
|
seq_printf(s, ",unc=%s", tcon->treeName);
|
||||||
|
|
||||||
if (cifs_sb->mnt_cifs_flags & CIFS_MOUNT_MULTIUSER)
|
if (cifs_sb->mnt_cifs_flags & CIFS_MOUNT_MULTIUSER)
|
||||||
|
|
|
@ -129,5 +129,5 @@ extern long cifs_ioctl(struct file *filep, unsigned int cmd, unsigned long arg);
|
||||||
extern const struct export_operations cifs_export_ops;
|
extern const struct export_operations cifs_export_ops;
|
||||||
#endif /* CIFS_NFSD_EXPORT */
|
#endif /* CIFS_NFSD_EXPORT */
|
||||||
|
|
||||||
#define CIFS_VERSION "1.72"
|
#define CIFS_VERSION "1.73"
|
||||||
#endif /* _CIFSFS_H */
|
#endif /* _CIFSFS_H */
|
||||||
|
|
|
@ -152,7 +152,7 @@ cifs_reconnect(struct TCP_Server_Info *server)
|
||||||
mid_entry->callback(mid_entry);
|
mid_entry->callback(mid_entry);
|
||||||
}
|
}
|
||||||
|
|
||||||
while (server->tcpStatus == CifsNeedReconnect) {
|
do {
|
||||||
try_to_freeze();
|
try_to_freeze();
|
||||||
|
|
||||||
/* we should try only the port we connected to before */
|
/* we should try only the port we connected to before */
|
||||||
|
@ -167,7 +167,7 @@ cifs_reconnect(struct TCP_Server_Info *server)
|
||||||
server->tcpStatus = CifsNeedNegotiate;
|
server->tcpStatus = CifsNeedNegotiate;
|
||||||
spin_unlock(&GlobalMid_Lock);
|
spin_unlock(&GlobalMid_Lock);
|
||||||
}
|
}
|
||||||
}
|
} while (server->tcpStatus == CifsNeedReconnect);
|
||||||
|
|
||||||
return rc;
|
return rc;
|
||||||
}
|
}
|
||||||
|
@ -2149,7 +2149,10 @@ cifs_put_tlink(struct tcon_link *tlink)
|
||||||
}
|
}
|
||||||
|
|
||||||
static inline struct tcon_link *
|
static inline struct tcon_link *
|
||||||
cifs_sb_master_tlink(struct cifs_sb_info *cifs_sb);
|
cifs_sb_master_tlink(struct cifs_sb_info *cifs_sb)
|
||||||
|
{
|
||||||
|
return cifs_sb->master_tlink;
|
||||||
|
}
|
||||||
|
|
||||||
static int
|
static int
|
||||||
compare_mount_options(struct super_block *sb, struct cifs_mnt_data *mnt_data)
|
compare_mount_options(struct super_block *sb, struct cifs_mnt_data *mnt_data)
|
||||||
|
@ -3171,6 +3174,10 @@ out:
|
||||||
return rc;
|
return rc;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Issue a TREE_CONNECT request. Note that for IPC$ shares, that the tcon
|
||||||
|
* pointer may be NULL.
|
||||||
|
*/
|
||||||
int
|
int
|
||||||
CIFSTCon(unsigned int xid, struct cifs_ses *ses,
|
CIFSTCon(unsigned int xid, struct cifs_ses *ses,
|
||||||
const char *tree, struct cifs_tcon *tcon,
|
const char *tree, struct cifs_tcon *tcon,
|
||||||
|
@ -3205,7 +3212,7 @@ CIFSTCon(unsigned int xid, struct cifs_ses *ses,
|
||||||
pSMB->AndXCommand = 0xFF;
|
pSMB->AndXCommand = 0xFF;
|
||||||
pSMB->Flags = cpu_to_le16(TCON_EXTENDED_SECINFO);
|
pSMB->Flags = cpu_to_le16(TCON_EXTENDED_SECINFO);
|
||||||
bcc_ptr = &pSMB->Password[0];
|
bcc_ptr = &pSMB->Password[0];
|
||||||
if ((ses->server->sec_mode) & SECMODE_USER) {
|
if (!tcon || (ses->server->sec_mode & SECMODE_USER)) {
|
||||||
pSMB->PasswordLength = cpu_to_le16(1); /* minimum */
|
pSMB->PasswordLength = cpu_to_le16(1); /* minimum */
|
||||||
*bcc_ptr = 0; /* password is null byte */
|
*bcc_ptr = 0; /* password is null byte */
|
||||||
bcc_ptr++; /* skip password */
|
bcc_ptr++; /* skip password */
|
||||||
|
@ -3371,7 +3378,7 @@ int cifs_negotiate_protocol(unsigned int xid, struct cifs_ses *ses)
|
||||||
}
|
}
|
||||||
if (rc == 0) {
|
if (rc == 0) {
|
||||||
spin_lock(&GlobalMid_Lock);
|
spin_lock(&GlobalMid_Lock);
|
||||||
if (server->tcpStatus != CifsExiting)
|
if (server->tcpStatus == CifsNeedNegotiate)
|
||||||
server->tcpStatus = CifsGood;
|
server->tcpStatus = CifsGood;
|
||||||
else
|
else
|
||||||
rc = -EHOSTDOWN;
|
rc = -EHOSTDOWN;
|
||||||
|
@ -3484,12 +3491,6 @@ out:
|
||||||
return tcon;
|
return tcon;
|
||||||
}
|
}
|
||||||
|
|
||||||
static inline struct tcon_link *
|
|
||||||
cifs_sb_master_tlink(struct cifs_sb_info *cifs_sb)
|
|
||||||
{
|
|
||||||
return cifs_sb->master_tlink;
|
|
||||||
}
|
|
||||||
|
|
||||||
struct cifs_tcon *
|
struct cifs_tcon *
|
||||||
cifs_sb_master_tcon(struct cifs_sb_info *cifs_sb)
|
cifs_sb_master_tcon(struct cifs_sb_info *cifs_sb)
|
||||||
{
|
{
|
||||||
|
|
|
@ -28,14 +28,14 @@ void cifs_fscache_get_client_cookie(struct TCP_Server_Info *server)
|
||||||
server->fscache =
|
server->fscache =
|
||||||
fscache_acquire_cookie(cifs_fscache_netfs.primary_index,
|
fscache_acquire_cookie(cifs_fscache_netfs.primary_index,
|
||||||
&cifs_fscache_server_index_def, server);
|
&cifs_fscache_server_index_def, server);
|
||||||
cFYI(1, "CIFS: get client cookie (0x%p/0x%p)", server,
|
cFYI(1, "%s: (0x%p/0x%p)", __func__, server,
|
||||||
server->fscache);
|
server->fscache);
|
||||||
}
|
}
|
||||||
|
|
||||||
void cifs_fscache_release_client_cookie(struct TCP_Server_Info *server)
|
void cifs_fscache_release_client_cookie(struct TCP_Server_Info *server)
|
||||||
{
|
{
|
||||||
cFYI(1, "CIFS: release client cookie (0x%p/0x%p)", server,
|
cFYI(1, "%s: (0x%p/0x%p)", __func__, server,
|
||||||
server->fscache);
|
server->fscache);
|
||||||
fscache_relinquish_cookie(server->fscache, 0);
|
fscache_relinquish_cookie(server->fscache, 0);
|
||||||
server->fscache = NULL;
|
server->fscache = NULL;
|
||||||
}
|
}
|
||||||
|
@ -47,13 +47,13 @@ void cifs_fscache_get_super_cookie(struct cifs_tcon *tcon)
|
||||||
tcon->fscache =
|
tcon->fscache =
|
||||||
fscache_acquire_cookie(server->fscache,
|
fscache_acquire_cookie(server->fscache,
|
||||||
&cifs_fscache_super_index_def, tcon);
|
&cifs_fscache_super_index_def, tcon);
|
||||||
cFYI(1, "CIFS: get superblock cookie (0x%p/0x%p)",
|
cFYI(1, "%s: (0x%p/0x%p)", __func__, server->fscache,
|
||||||
server->fscache, tcon->fscache);
|
tcon->fscache);
|
||||||
}
|
}
|
||||||
|
|
||||||
void cifs_fscache_release_super_cookie(struct cifs_tcon *tcon)
|
void cifs_fscache_release_super_cookie(struct cifs_tcon *tcon)
|
||||||
{
|
{
|
||||||
cFYI(1, "CIFS: releasing superblock cookie (0x%p)", tcon->fscache);
|
cFYI(1, "%s: (0x%p)", __func__, tcon->fscache);
|
||||||
fscache_relinquish_cookie(tcon->fscache, 0);
|
fscache_relinquish_cookie(tcon->fscache, 0);
|
||||||
tcon->fscache = NULL;
|
tcon->fscache = NULL;
|
||||||
}
|
}
|
||||||
|
@ -70,8 +70,8 @@ static void cifs_fscache_enable_inode_cookie(struct inode *inode)
|
||||||
if (cifs_sb->mnt_cifs_flags & CIFS_MOUNT_FSCACHE) {
|
if (cifs_sb->mnt_cifs_flags & CIFS_MOUNT_FSCACHE) {
|
||||||
cifsi->fscache = fscache_acquire_cookie(tcon->fscache,
|
cifsi->fscache = fscache_acquire_cookie(tcon->fscache,
|
||||||
&cifs_fscache_inode_object_def, cifsi);
|
&cifs_fscache_inode_object_def, cifsi);
|
||||||
cFYI(1, "CIFS: got FH cookie (0x%p/0x%p)", tcon->fscache,
|
cFYI(1, "%s: got FH cookie (0x%p/0x%p)", __func__,
|
||||||
cifsi->fscache);
|
tcon->fscache, cifsi->fscache);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -80,8 +80,7 @@ void cifs_fscache_release_inode_cookie(struct inode *inode)
|
||||||
struct cifsInodeInfo *cifsi = CIFS_I(inode);
|
struct cifsInodeInfo *cifsi = CIFS_I(inode);
|
||||||
|
|
||||||
if (cifsi->fscache) {
|
if (cifsi->fscache) {
|
||||||
cFYI(1, "CIFS releasing inode cookie (0x%p)",
|
cFYI(1, "%s: (0x%p)", __func__, cifsi->fscache);
|
||||||
cifsi->fscache);
|
|
||||||
fscache_relinquish_cookie(cifsi->fscache, 0);
|
fscache_relinquish_cookie(cifsi->fscache, 0);
|
||||||
cifsi->fscache = NULL;
|
cifsi->fscache = NULL;
|
||||||
}
|
}
|
||||||
|
@ -92,8 +91,7 @@ static void cifs_fscache_disable_inode_cookie(struct inode *inode)
|
||||||
struct cifsInodeInfo *cifsi = CIFS_I(inode);
|
struct cifsInodeInfo *cifsi = CIFS_I(inode);
|
||||||
|
|
||||||
if (cifsi->fscache) {
|
if (cifsi->fscache) {
|
||||||
cFYI(1, "CIFS disabling inode cookie (0x%p)",
|
cFYI(1, "%s: (0x%p)", __func__, cifsi->fscache);
|
||||||
cifsi->fscache);
|
|
||||||
fscache_relinquish_cookie(cifsi->fscache, 1);
|
fscache_relinquish_cookie(cifsi->fscache, 1);
|
||||||
cifsi->fscache = NULL;
|
cifsi->fscache = NULL;
|
||||||
}
|
}
|
||||||
|
@ -121,8 +119,8 @@ void cifs_fscache_reset_inode_cookie(struct inode *inode)
|
||||||
cifs_sb_master_tcon(cifs_sb)->fscache,
|
cifs_sb_master_tcon(cifs_sb)->fscache,
|
||||||
&cifs_fscache_inode_object_def,
|
&cifs_fscache_inode_object_def,
|
||||||
cifsi);
|
cifsi);
|
||||||
cFYI(1, "CIFS: new cookie 0x%p oldcookie 0x%p",
|
cFYI(1, "%s: new cookie 0x%p oldcookie 0x%p",
|
||||||
cifsi->fscache, old);
|
__func__, cifsi->fscache, old);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -132,8 +130,8 @@ int cifs_fscache_release_page(struct page *page, gfp_t gfp)
|
||||||
struct inode *inode = page->mapping->host;
|
struct inode *inode = page->mapping->host;
|
||||||
struct cifsInodeInfo *cifsi = CIFS_I(inode);
|
struct cifsInodeInfo *cifsi = CIFS_I(inode);
|
||||||
|
|
||||||
cFYI(1, "CIFS: fscache release page (0x%p/0x%p)",
|
cFYI(1, "%s: (0x%p/0x%p)", __func__, page,
|
||||||
page, cifsi->fscache);
|
cifsi->fscache);
|
||||||
if (!fscache_maybe_release_page(cifsi->fscache, page, gfp))
|
if (!fscache_maybe_release_page(cifsi->fscache, page, gfp))
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
@ -144,8 +142,7 @@ int cifs_fscache_release_page(struct page *page, gfp_t gfp)
|
||||||
static void cifs_readpage_from_fscache_complete(struct page *page, void *ctx,
|
static void cifs_readpage_from_fscache_complete(struct page *page, void *ctx,
|
||||||
int error)
|
int error)
|
||||||
{
|
{
|
||||||
cFYI(1, "CFS: readpage_from_fscache_complete (0x%p/%d)",
|
cFYI(1, "%s: (0x%p/%d)", __func__, page, error);
|
||||||
page, error);
|
|
||||||
if (!error)
|
if (!error)
|
||||||
SetPageUptodate(page);
|
SetPageUptodate(page);
|
||||||
unlock_page(page);
|
unlock_page(page);
|
||||||
|
@ -158,7 +155,7 @@ int __cifs_readpage_from_fscache(struct inode *inode, struct page *page)
|
||||||
{
|
{
|
||||||
int ret;
|
int ret;
|
||||||
|
|
||||||
cFYI(1, "CIFS: readpage_from_fscache(fsc:%p, p:%p, i:0x%p",
|
cFYI(1, "%s: (fsc:%p, p:%p, i:0x%p", __func__,
|
||||||
CIFS_I(inode)->fscache, page, inode);
|
CIFS_I(inode)->fscache, page, inode);
|
||||||
ret = fscache_read_or_alloc_page(CIFS_I(inode)->fscache, page,
|
ret = fscache_read_or_alloc_page(CIFS_I(inode)->fscache, page,
|
||||||
cifs_readpage_from_fscache_complete,
|
cifs_readpage_from_fscache_complete,
|
||||||
|
@ -167,11 +164,11 @@ int __cifs_readpage_from_fscache(struct inode *inode, struct page *page)
|
||||||
switch (ret) {
|
switch (ret) {
|
||||||
|
|
||||||
case 0: /* page found in fscache, read submitted */
|
case 0: /* page found in fscache, read submitted */
|
||||||
cFYI(1, "CIFS: readpage_from_fscache: submitted");
|
cFYI(1, "%s: submitted", __func__);
|
||||||
return ret;
|
return ret;
|
||||||
case -ENOBUFS: /* page won't be cached */
|
case -ENOBUFS: /* page won't be cached */
|
||||||
case -ENODATA: /* page not in cache */
|
case -ENODATA: /* page not in cache */
|
||||||
cFYI(1, "CIFS: readpage_from_fscache %d", ret);
|
cFYI(1, "%s: %d", __func__, ret);
|
||||||
return 1;
|
return 1;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
|
@ -190,7 +187,7 @@ int __cifs_readpages_from_fscache(struct inode *inode,
|
||||||
{
|
{
|
||||||
int ret;
|
int ret;
|
||||||
|
|
||||||
cFYI(1, "CIFS: __cifs_readpages_from_fscache (0x%p/%u/0x%p)",
|
cFYI(1, "%s: (0x%p/%u/0x%p)", __func__,
|
||||||
CIFS_I(inode)->fscache, *nr_pages, inode);
|
CIFS_I(inode)->fscache, *nr_pages, inode);
|
||||||
ret = fscache_read_or_alloc_pages(CIFS_I(inode)->fscache, mapping,
|
ret = fscache_read_or_alloc_pages(CIFS_I(inode)->fscache, mapping,
|
||||||
pages, nr_pages,
|
pages, nr_pages,
|
||||||
|
@ -199,12 +196,12 @@ int __cifs_readpages_from_fscache(struct inode *inode,
|
||||||
mapping_gfp_mask(mapping));
|
mapping_gfp_mask(mapping));
|
||||||
switch (ret) {
|
switch (ret) {
|
||||||
case 0: /* read submitted to the cache for all pages */
|
case 0: /* read submitted to the cache for all pages */
|
||||||
cFYI(1, "CIFS: readpages_from_fscache: submitted");
|
cFYI(1, "%s: submitted", __func__);
|
||||||
return ret;
|
return ret;
|
||||||
|
|
||||||
case -ENOBUFS: /* some pages are not cached and can't be */
|
case -ENOBUFS: /* some pages are not cached and can't be */
|
||||||
case -ENODATA: /* some pages are not cached */
|
case -ENODATA: /* some pages are not cached */
|
||||||
cFYI(1, "CIFS: readpages_from_fscache: no page");
|
cFYI(1, "%s: no page", __func__);
|
||||||
return 1;
|
return 1;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
|
@ -218,7 +215,7 @@ void __cifs_readpage_to_fscache(struct inode *inode, struct page *page)
|
||||||
{
|
{
|
||||||
int ret;
|
int ret;
|
||||||
|
|
||||||
cFYI(1, "CIFS: readpage_to_fscache(fsc: %p, p: %p, i: %p",
|
cFYI(1, "%s: (fsc: %p, p: %p, i: %p)", __func__,
|
||||||
CIFS_I(inode)->fscache, page, inode);
|
CIFS_I(inode)->fscache, page, inode);
|
||||||
ret = fscache_write_page(CIFS_I(inode)->fscache, page, GFP_KERNEL);
|
ret = fscache_write_page(CIFS_I(inode)->fscache, page, GFP_KERNEL);
|
||||||
if (ret != 0)
|
if (ret != 0)
|
||||||
|
@ -230,7 +227,7 @@ void __cifs_fscache_invalidate_page(struct page *page, struct inode *inode)
|
||||||
struct cifsInodeInfo *cifsi = CIFS_I(inode);
|
struct cifsInodeInfo *cifsi = CIFS_I(inode);
|
||||||
struct fscache_cookie *cookie = cifsi->fscache;
|
struct fscache_cookie *cookie = cifsi->fscache;
|
||||||
|
|
||||||
cFYI(1, "CIFS: fscache invalidatepage (0x%p/0x%p)", page, cookie);
|
cFYI(1, "%s: (0x%p/0x%p)", __func__, page, cookie);
|
||||||
fscache_wait_on_page_write(cookie, page);
|
fscache_wait_on_page_write(cookie, page);
|
||||||
fscache_uncache_page(cookie, page);
|
fscache_uncache_page(cookie, page);
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Reference in a new issue