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

Commit 3e2ce4da authored by Linus Torvalds's avatar Linus Torvalds
Browse files
* git://git.kernel.org/pub/scm/linux/kernel/git/sfrench/cifs-2.6:
  [CIFS] CIFS should honour umask
  [CIFS] Missing flag on negprot needed for some servers to force packet signing
  [CIFS] whitespace cleanup part 2
  [CIFS] whitespace cleanup
  [CIFS] fix mempool destroy done in wrong order in cifs error path
  [CIFS] typo in previous patch
  [CIFS] Fix oops on failed cifs mount (in kthread_stop)
parents 3334500b 3ce53fc4
Loading
Loading
Loading
Loading
+129 −123
Original line number Diff line number Diff line
@@ -101,7 +101,6 @@ void cifs_dump_mids(struct TCP_Server_Info * server)
					mid_entry->resp_buf,
					62 /* fixme */);
			}
			
		}
	}
	spin_unlock(&GlobalMid_Lock);
@@ -131,7 +130,8 @@ cifs_debug_data_read(char *buf, char **beginBuffer, off_t offset,
	buf += length;
	length = sprintf(buf, "CIFS Version %s\n", CIFS_VERSION);
	buf += length;
	length = sprintf(buf,"Active VFS Requests: %d\n", GlobalTotalActiveXid);
	length = sprintf(buf,
		"Active VFS Requests: %d\n", GlobalTotalActiveXid);
	buf += length;
	length = sprintf(buf, "Servers:");
	buf += length;
@@ -149,7 +149,9 @@ cifs_debug_data_read(char *buf, char **beginBuffer, off_t offset,
		} else {
			length =
			    sprintf(buf,
				    "\n%d) Name: %s  Domain: %s Mounts: %d OS: %s  \n\tNOS: %s\tCapability: 0x%x\n\tSMB session status: %d\t",
				    "\n%d) Name: %s  Domain: %s Mounts: %d OS:"
				    " %s  \n\tNOS: %s\tCapability: 0x%x\n\tSMB"
				    " session status: %d\t",
				i, ses->serverName, ses->serverDomain,
				atomic_read(&ses->inUse),
				ses->serverOS, ses->serverNOS,
@@ -157,7 +159,8 @@ cifs_debug_data_read(char *buf, char **beginBuffer, off_t offset,
			buf += length;
		}
		if (ses->server) {
			buf += sprintf(buf, "TCP status: %d\n\tLocal Users To Server: %d SecMode: 0x%x Req On Wire: %d",
			buf += sprintf(buf, "TCP status: %d\n\tLocal Users To "
				    "Server: %d SecMode: 0x%x Req On Wire: %d",
				ses->server->tcpStatus,
				atomic_read(&ses->server->socketUseCount),
				ses->server->secMode,
@@ -178,7 +181,9 @@ cifs_debug_data_read(char *buf, char **beginBuffer, off_t offset,
					mid_q_entry,
					qhead);
				if (mid_entry) {
					length = sprintf(buf,"State: %d com: %d pid: %d tsk: %p mid %d\n",
					length = sprintf(buf,
							"State: %d com: %d pid:"
							" %d tsk: %p mid %d\n",
							mid_entry->midState,
							(int)mid_entry->command,
							mid_entry->pid,
@@ -207,7 +212,8 @@ cifs_debug_data_read(char *buf, char **beginBuffer, off_t offset,
		dev_type = le32_to_cpu(tcon->fsDevInfo.DeviceType);
		length =
		    sprintf(buf,
			    "\n%d) %s Uses: %d Type: %s DevInfo: 0x%x Attributes: 0x%x\nPathComponentMax: %d Status: %d",
			    "\n%d) %s Uses: %d Type: %s DevInfo: 0x%x "
			    "Attributes: 0x%x\nPathComponentMax: %d Status: %d",
			    i, tcon->treeName,
			    atomic_read(&tcon->useCount),
			    tcon->nativeFileSystem,
+1 −1
Original line number Diff line number Diff line
@@ -825,8 +825,8 @@ cifs_init_mids(void)
				sizeof (struct oplock_q_entry), 0,
				SLAB_HWCACHE_ALIGN, NULL, NULL);
	if (cifs_oplock_cachep == NULL) {
		kmem_cache_destroy(cifs_mid_cachep);
		mempool_destroy(cifs_mid_poolp);
		kmem_cache_destroy(cifs_mid_cachep);
		return -ENOMEM;
	}

+2 −2
Original line number Diff line number Diff line
@@ -433,7 +433,7 @@ CIFSSMBNegotiate(unsigned int xid, struct cifsSesInfo *ses)
	cFYI(1,("secFlags 0x%x",secFlags));

	pSMB->hdr.Mid = GetNextMid(server);
	pSMB->hdr.Flags2 |= SMBFLG2_UNICODE;
	pSMB->hdr.Flags2 |= (SMBFLG2_UNICODE | SMBFLG2_ERR_STATUS);
	if ((secFlags & CIFSSEC_MUST_KRB5) == CIFSSEC_MUST_KRB5)
		pSMB->hdr.Flags2 |= SMBFLG2_EXT_SEC;
	
+13 −3
Original line number Diff line number Diff line
@@ -2069,8 +2069,15 @@ cifs_mount(struct super_block *sb, struct cifs_sb_info *cifs_sb,
			srvTcp->tcpStatus = CifsExiting;
			spin_unlock(&GlobalMid_Lock);
			if (srvTcp->tsk) {
				struct task_struct *tsk;
				/* If we could verify that kthread_stop would
				   always wake up processes blocked in
				   tcp in recv_mesg then we could remove the
				   send_sig call */
				send_sig(SIGKILL,srvTcp->tsk,1);
				kthread_stop(srvTcp->tsk);
				tsk = srvTcp->tsk;
				if(tsk)
					kthread_stop(tsk);
			}
		}
		 /* If find_unc succeeded then rc == 0 so we can not end */
@@ -2085,8 +2092,11 @@ cifs_mount(struct super_block *sb, struct cifs_sb_info *cifs_sb,
					/* if the socketUseCount is now zero */
					if ((temp_rc == -ESHUTDOWN) &&
					   (pSesInfo->server) && (pSesInfo->server->tsk)) {
						struct task_struct *tsk;
						send_sig(SIGKILL,pSesInfo->server->tsk,1);
						kthread_stop(pSesInfo->server->tsk);
						tsk = pSesInfo->server->tsk;
						if (tsk)
							kthread_stop(tsk);
					}
				} else
					cFYI(1, ("No session or bad tcon"));
+94 −90
Original line number Diff line number Diff line
@@ -34,7 +34,8 @@
static void
renew_parental_timestamps(struct dentry *direntry)
{
	/* BB check if there is a way to get the kernel to do this or if we really need this */
	/* BB check if there is a way to get the kernel to do this or if we
	   really need this */
	do {
		direntry->d_time = jiffies;
		direntry = direntry->d_parent;
@@ -175,7 +176,8 @@ cifs_create(struct inode *inode, struct dentry *direntry, int mode,
		}
	}

	/* BB add processing to set equivalent of mode - e.g. via CreateX with ACLs */
	/* BB add processing to set equivalent of mode - e.g. via CreateX with
	   ACLs */
	if (oplockEnabled)
		oplock = REQ_OPLOCK;

@@ -206,7 +208,8 @@ cifs_create(struct inode *inode, struct dentry *direntry, int mode,
		/* If Open reported that we actually created a file
		then we now have to set the mode if possible */
		if ((cifs_sb->tcon->ses->capabilities & CAP_UNIX) &&
			(oplock & CIFS_CREATE_ACTION))
			(oplock & CIFS_CREATE_ACTION)) {
			mode &= ~current->fs->umask;
			if (cifs_sb->mnt_cifs_flags & CIFS_MOUNT_SET_UID) {
				CIFSSMBUnixSetPerms(xid, pTcon, full_path, mode,
					(__u64)current->fsuid,
@@ -224,10 +227,12 @@ cifs_create(struct inode *inode, struct dentry *direntry, int mode,
					cifs_sb->mnt_cifs_flags &
						CIFS_MOUNT_MAP_SPECIAL_CHR);
			}
		else {
			/* BB implement mode setting via Windows security descriptors */
			/* eg CIFSSMBWinSetPerms(xid,pTcon,full_path,mode,-1,-1,local_nls);*/
			/* could set r/o dos attribute if mode & 0222 == 0 */
		} else {
			/* BB implement mode setting via Windows security
			   descriptors e.g. */
			/* CIFSSMBWinSetPerms(xid,pTcon,path,mode,-1,-1,nls);*/

			/* Could set r/o dos attribute if mode & 0222 == 0 */
		}

	/* BB server might mask mode so we have to query for Unix case*/
@@ -295,7 +300,7 @@ cifs_create(struct inode *inode, struct dentry *direntry, int mode,
				if ((oplock & 0xF) == OPLOCK_EXCLUSIVE) {
					pCifsInode->clientCanCacheAll = TRUE;
					pCifsInode->clientCanCacheRead = TRUE;
					cFYI(1,("Exclusive Oplock for inode %p",
					cFYI(1, ("Exclusive Oplock inode %p",
						newinode));
				} else if ((oplock & 0xF) == OPLOCK_READ)
					pCifsInode->clientCanCacheRead = TRUE;
@@ -332,9 +337,11 @@ int cifs_mknod(struct inode *inode, struct dentry *direntry, int mode,
	if (full_path == NULL)
		rc = -ENOMEM;
	else if (pTcon->ses->capabilities & CAP_UNIX) {
		mode &= ~current->fs->umask;
		if (cifs_sb->mnt_cifs_flags & CIFS_MOUNT_SET_UID) {
			rc = CIFSSMBUnixSetPerms(xid, pTcon, full_path,
				mode,(__u64)current->fsuid,(__u64)current->fsgid,
				mode, (__u64)current->fsuid,
				(__u64)current->fsgid,
				device_number, cifs_sb->local_nls,
				cifs_sb->mnt_cifs_flags &
					CIFS_MOUNT_MAP_SPECIAL_CHR);
@@ -385,8 +392,7 @@ int cifs_mknod(struct inode *inode, struct dentry *direntry, int mode,

			/* BB FIXME - add handling for backlevel servers
			   which need legacy open and check for all
			   calls to SMBOpen for fallback to 
			   SMBLeagcyOpen */
			   calls to SMBOpen for fallback to SMBLeagcyOpen */
			if (!rc) {
				/* BB Do not bother to decode buf since no
				   local inode yet to put timestamps in,
@@ -432,7 +438,8 @@ int cifs_mknod(struct inode *inode, struct dentry *direntry, int mode,


struct dentry *
cifs_lookup(struct inode *parent_dir_inode, struct dentry *direntry, struct nameidata *nd)
cifs_lookup(struct inode *parent_dir_inode, struct dentry *direntry,
	    struct nameidata *nd)
{
	int xid;
	int rc = 0; /* to get around spurious gcc warning, set to zero here */
@@ -447,8 +454,6 @@ cifs_lookup(struct inode *parent_dir_inode, struct dentry *direntry, struct name
	     (" parent inode = 0x%p name is: %s and dentry = 0x%p",
	      parent_dir_inode, direntry->d_name.name, direntry));

	/* BB Add check of incoming data - e.g. frame not longer than maximum SMB - let server check the namelen BB */

	/* check whether path exists */

	cifs_sb = CIFS_SB(parent_dir_inode->i_sb);
@@ -560,7 +565,6 @@ cifs_d_revalidate(struct dentry *direntry, struct nameidata *nd)
struct dentry_operations cifs_dentry_ops = {
	.d_revalidate = cifs_d_revalidate,
/* d_delete:       cifs_d_delete,      */ /* not needed except for debugging */
	/* no need for d_hash, d_compare, d_release, d_iput ... yet. BB confirm this BB */
};

static int cifs_ci_hash(struct dentry *dentry, struct qstr *q)
Loading