Commit 6211b3e1 authored by Linus Torvalds's avatar Linus Torvalds

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
parents 81eb3dd8 1252b301
...@@ -92,7 +92,7 @@ static uint16_t cifs_server_get_key(const void *cookie_netfs_data, ...@@ -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, ...@@ -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) ...@@ -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) ...@@ -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) ...@@ -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); ...@@ -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) ...@@ -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) ...@@ -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) ...@@ -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 @@ cifs_mount(struct super_block *sb, struct cifs_sb_info *cifs_sb, ...@@ -3171,6 +3174,10 @@ cifs_mount(struct super_block *sb, struct cifs_sb_info *cifs_sb,
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, ...@@ -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) ...@@ -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 @@ cifs_construct_tcon(struct cifs_sb_info *cifs_sb, uid_t fsuid) ...@@ -3484,12 +3491,6 @@ cifs_construct_tcon(struct cifs_sb_info *cifs_sb, uid_t fsuid)
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) ...@@ -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) ...@@ -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) ...@@ -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) ...@@ -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) ...@@ -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) ...@@ -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) ...@@ -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) ...@@ -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) ...@@ -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) ...@@ -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, ...@@ -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, ...@@ -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) ...@@ -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) ...@@ -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);
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment