Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 6211b3e1 authored by Linus Torvalds's avatar Linus Torvalds
Browse files
* 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
Loading
Loading
Loading
Loading
+3 −3
Original line number Original line Diff line number Diff line
@@ -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,
+33 −0
Original line number Original line Diff line number Diff line
@@ -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)
+1 −1
Original line number Original line Diff line number Diff line
@@ -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 */
+12 −11
Original line number Original line Diff line number Diff line
@@ -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 @@ 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,
	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 @@ 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)
{
{
+24 −27
Original line number Original line Diff line number Diff line
@@ -28,13 +28,13 @@ 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);
}
}