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

Commit 40efeb4d authored by Linus Torvalds's avatar Linus Torvalds
Browse files
* git://git.kernel.org/pub/scm/linux/kernel/git/sfrench/cifs-2.6:
  [CIFS] Fix endian error comparing authusers when cifsacl enabled
  [CIFS] Rename three structures to avoid camel case
  Fix extended security auth failure
  CIFS: Add rwpidforward mount option
  CIFS: Migrate to shared superblock model
  [CIFS] Migrate from prefixpath logic
  CIFS: Fix memory leak in cifs_do_mount
  [CIFS] When mandatory encryption on share, fail mount
  CIFS: Use pid saved from cifsFileInfo in writepages and set_file_size
  cifs: add cifs_async_writev
  cifs: clean up wsize negotiation and allow for larger wsize
  cifs: convert cifs_writepages to use async writes
  CIFS: Fix undefined behavior when mount fails
  cifs: don't call mid_q_entry->callback under the Global_MidLock (try #5)
  CIFS: Simplify mount code for further shared sb capability
  CIFS: Simplify connection structure search calls
  cifs: remove unused SMB2 config and mount options
  cifs: add ignore_pend flag to cifs_call_async
  cifs: make cifs_send_async take a kvec array
  cifs: consolidate SendReceive response checks
parents 81faae7f 383c5535
Loading
Loading
Loading
Loading
+0 −20
Original line number Original line Diff line number Diff line
@@ -153,26 +153,6 @@ config CIFS_ACL
	    Allows to fetch CIFS/NTFS ACL from the server.  The DACL blob
	    Allows to fetch CIFS/NTFS ACL from the server.  The DACL blob
	    is handed over to the application/caller.
	    is handed over to the application/caller.


config CIFS_SMB2
	bool "SMB2 network file system support (EXPERIMENTAL)"
	depends on EXPERIMENTAL && INET && BROKEN
	select NLS
	select KEYS
	select FSCACHE
	select DNS_RESOLVER

	help
	  This enables experimental support for the SMB2 (Server Message Block
	  version 2) protocol. The SMB2 protocol is the successor to the
	  popular CIFS and SMB network file sharing protocols. SMB2 is the
	  native file sharing mechanism for recent versions of Windows
	  operating systems (since Vista).  SMB2 enablement will eventually
	  allow users better performance, security and features, than would be
	  possible with cifs. Note that smb2 mount options also are simpler
	  (compared to cifs) due to protocol improvements.

	  Unless you are a developer or tester, say N.

config CIFS_NFSD_EXPORT
config CIFS_NFSD_EXPORT
	  bool "Allow nfsd to export CIFS file system (EXPERIMENTAL)"
	  bool "Allow nfsd to export CIFS file system (EXPERIMENTAL)"
	  depends on CIFS && EXPERIMENTAL
	  depends on CIFS && EXPERIMENTAL
+3 −0
Original line number Original line Diff line number Diff line
@@ -457,6 +457,9 @@ A partial list of the supported mount options follows:
		otherwise - read from the server. All written data are stored
		otherwise - read from the server. All written data are stored
		in the cache, but if the client doesn't have Exclusive Oplock,
		in the cache, but if the client doesn't have Exclusive Oplock,
		it writes the data to the server.
		it writes the data to the server.
  rwpidforward  Forward pid of a process who opened a file to any read or write
		operation on that file. This prevent applications like WINE
		from failing on read and write if we use mandatory brlock style.
  acl   	Allow setfacl and getfacl to manage posix ACLs if server
  acl   	Allow setfacl and getfacl to manage posix ACLs if server
		supports them.  (default)
		supports them.  (default)
  noacl 	Do not allow setfacl and getfacl calls on this mount
  noacl 	Do not allow setfacl and getfacl calls on this mount
+3 −3
Original line number Original line Diff line number Diff line
@@ -146,7 +146,7 @@ static char *extract_sharename(const char *treename)
static uint16_t cifs_super_get_key(const void *cookie_netfs_data, void *buffer,
static uint16_t cifs_super_get_key(const void *cookie_netfs_data, void *buffer,
				   uint16_t maxbuf)
				   uint16_t maxbuf)
{
{
	const struct cifsTconInfo *tcon = cookie_netfs_data;
	const struct cifs_tcon *tcon = cookie_netfs_data;
	char *sharename;
	char *sharename;
	uint16_t len;
	uint16_t len;


@@ -173,7 +173,7 @@ cifs_fscache_super_get_aux(const void *cookie_netfs_data, void *buffer,
			   uint16_t maxbuf)
			   uint16_t maxbuf)
{
{
	struct cifs_fscache_super_auxdata auxdata;
	struct cifs_fscache_super_auxdata auxdata;
	const struct cifsTconInfo *tcon = cookie_netfs_data;
	const struct cifs_tcon *tcon = cookie_netfs_data;


	memset(&auxdata, 0, sizeof(auxdata));
	memset(&auxdata, 0, sizeof(auxdata));
	auxdata.resource_id = tcon->resource_id;
	auxdata.resource_id = tcon->resource_id;
@@ -192,7 +192,7 @@ fscache_checkaux cifs_fscache_super_check_aux(void *cookie_netfs_data,
					      uint16_t datalen)
					      uint16_t datalen)
{
{
	struct cifs_fscache_super_auxdata auxdata;
	struct cifs_fscache_super_auxdata auxdata;
	const struct cifsTconInfo *tcon = cookie_netfs_data;
	const struct cifs_tcon *tcon = cookie_netfs_data;


	if (datalen != sizeof(auxdata))
	if (datalen != sizeof(auxdata))
		return FSCACHE_CHECKAUX_OBSOLETE;
		return FSCACHE_CHECKAUX_OBSOLETE;
+13 −13
Original line number Original line Diff line number Diff line
@@ -110,8 +110,8 @@ static int cifs_debug_data_proc_show(struct seq_file *m, void *v)
	struct list_head *tmp1, *tmp2, *tmp3;
	struct list_head *tmp1, *tmp2, *tmp3;
	struct mid_q_entry *mid_entry;
	struct mid_q_entry *mid_entry;
	struct TCP_Server_Info *server;
	struct TCP_Server_Info *server;
	struct cifsSesInfo *ses;
	struct cifs_ses *ses;
	struct cifsTconInfo *tcon;
	struct cifs_tcon *tcon;
	int i, j;
	int i, j;
	__u32 dev_type;
	__u32 dev_type;


@@ -152,7 +152,7 @@ static int cifs_debug_data_proc_show(struct seq_file *m, void *v)
				    tcp_ses_list);
				    tcp_ses_list);
		i++;
		i++;
		list_for_each(tmp2, &server->smb_ses_list) {
		list_for_each(tmp2, &server->smb_ses_list) {
			ses = list_entry(tmp2, struct cifsSesInfo,
			ses = list_entry(tmp2, struct cifs_ses,
					 smb_ses_list);
					 smb_ses_list);
			if ((ses->serverDomain == NULL) ||
			if ((ses->serverDomain == NULL) ||
				(ses->serverOS == NULL) ||
				(ses->serverOS == NULL) ||
@@ -171,7 +171,7 @@ static int cifs_debug_data_proc_show(struct seq_file *m, void *v)
			seq_printf(m, "TCP status: %d\n\tLocal Users To "
			seq_printf(m, "TCP status: %d\n\tLocal Users To "
				   "Server: %d SecMode: 0x%x Req On Wire: %d",
				   "Server: %d SecMode: 0x%x Req On Wire: %d",
				   server->tcpStatus, server->srv_count,
				   server->tcpStatus, server->srv_count,
				   server->secMode,
				   server->sec_mode,
				   atomic_read(&server->inFlight));
				   atomic_read(&server->inFlight));


#ifdef CONFIG_CIFS_STATS2
#ifdef CONFIG_CIFS_STATS2
@@ -183,7 +183,7 @@ static int cifs_debug_data_proc_show(struct seq_file *m, void *v)
			seq_puts(m, "\n\tShares:");
			seq_puts(m, "\n\tShares:");
			j = 0;
			j = 0;
			list_for_each(tmp3, &ses->tcon_list) {
			list_for_each(tmp3, &ses->tcon_list) {
				tcon = list_entry(tmp3, struct cifsTconInfo,
				tcon = list_entry(tmp3, struct cifs_tcon,
						  tcon_list);
						  tcon_list);
				++j;
				++j;
				dev_type = le32_to_cpu(tcon->fsDevInfo.DeviceType);
				dev_type = le32_to_cpu(tcon->fsDevInfo.DeviceType);
@@ -256,8 +256,8 @@ static ssize_t cifs_stats_proc_write(struct file *file,
	int rc;
	int rc;
	struct list_head *tmp1, *tmp2, *tmp3;
	struct list_head *tmp1, *tmp2, *tmp3;
	struct TCP_Server_Info *server;
	struct TCP_Server_Info *server;
	struct cifsSesInfo *ses;
	struct cifs_ses *ses;
	struct cifsTconInfo *tcon;
	struct cifs_tcon *tcon;


	rc = get_user(c, buffer);
	rc = get_user(c, buffer);
	if (rc)
	if (rc)
@@ -273,11 +273,11 @@ static ssize_t cifs_stats_proc_write(struct file *file,
			server = list_entry(tmp1, struct TCP_Server_Info,
			server = list_entry(tmp1, struct TCP_Server_Info,
					    tcp_ses_list);
					    tcp_ses_list);
			list_for_each(tmp2, &server->smb_ses_list) {
			list_for_each(tmp2, &server->smb_ses_list) {
				ses = list_entry(tmp2, struct cifsSesInfo,
				ses = list_entry(tmp2, struct cifs_ses,
						 smb_ses_list);
						 smb_ses_list);
				list_for_each(tmp3, &ses->tcon_list) {
				list_for_each(tmp3, &ses->tcon_list) {
					tcon = list_entry(tmp3,
					tcon = list_entry(tmp3,
							  struct cifsTconInfo,
							  struct cifs_tcon,
							  tcon_list);
							  tcon_list);
					atomic_set(&tcon->num_smbs_sent, 0);
					atomic_set(&tcon->num_smbs_sent, 0);
					atomic_set(&tcon->num_writes, 0);
					atomic_set(&tcon->num_writes, 0);
@@ -312,8 +312,8 @@ static int cifs_stats_proc_show(struct seq_file *m, void *v)
	int i;
	int i;
	struct list_head *tmp1, *tmp2, *tmp3;
	struct list_head *tmp1, *tmp2, *tmp3;
	struct TCP_Server_Info *server;
	struct TCP_Server_Info *server;
	struct cifsSesInfo *ses;
	struct cifs_ses *ses;
	struct cifsTconInfo *tcon;
	struct cifs_tcon *tcon;


	seq_printf(m,
	seq_printf(m,
			"Resources in use\nCIFS Session: %d\n",
			"Resources in use\nCIFS Session: %d\n",
@@ -346,11 +346,11 @@ static int cifs_stats_proc_show(struct seq_file *m, void *v)
		server = list_entry(tmp1, struct TCP_Server_Info,
		server = list_entry(tmp1, struct TCP_Server_Info,
				    tcp_ses_list);
				    tcp_ses_list);
		list_for_each(tmp2, &server->smb_ses_list) {
		list_for_each(tmp2, &server->smb_ses_list) {
			ses = list_entry(tmp2, struct cifsSesInfo,
			ses = list_entry(tmp2, struct cifs_ses,
					 smb_ses_list);
					 smb_ses_list);
			list_for_each(tmp3, &ses->tcon_list) {
			list_for_each(tmp3, &ses->tcon_list) {
				tcon = list_entry(tmp3,
				tcon = list_entry(tmp3,
						  struct cifsTconInfo,
						  struct cifs_tcon,
						  tcon_list);
						  tcon_list);
				i++;
				i++;
				seq_printf(m, "\n%d) %s", i, tcon->treeName);
				seq_printf(m, "\n%d) %s", i, tcon->treeName);
+1 −1
Original line number Original line Diff line number Diff line
@@ -272,7 +272,7 @@ static struct vfsmount *cifs_dfs_do_automount(struct dentry *mntpt)
	struct dfs_info3_param *referrals = NULL;
	struct dfs_info3_param *referrals = NULL;
	unsigned int num_referrals = 0;
	unsigned int num_referrals = 0;
	struct cifs_sb_info *cifs_sb;
	struct cifs_sb_info *cifs_sb;
	struct cifsSesInfo *ses;
	struct cifs_ses *ses;
	char *full_path;
	char *full_path;
	int xid, i;
	int xid, i;
	int rc;
	int rc;
Loading