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] 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)
This commit is contained in:
@@ -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,
|
||||
|
@@ -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;
|
||||
}
|
||||
|
||||
|
@@ -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;
|
||||
|
||||
|
@@ -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"));
|
||||
|
@@ -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)
|
||||
|
@@ -63,7 +63,6 @@ static __u32 convert_to_cifs_notify_flags(unsigned long fcntl_notify_flags)
|
||||
cifs_ntfy_flags |= ;
|
||||
} */ /* BB fixme - not sure how to handle this with CIFS yet */
|
||||
|
||||
|
||||
return cifs_ntfy_flags;
|
||||
}
|
||||
|
||||
@@ -78,7 +77,6 @@ int cifs_dir_notify(struct file * file, unsigned long arg)
|
||||
__u32 filter = FILE_NOTIFY_CHANGE_NAME | FILE_NOTIFY_CHANGE_ATTRIBUTES;
|
||||
__u16 netfid;
|
||||
|
||||
|
||||
if (experimEnabled == 0)
|
||||
return 0;
|
||||
|
||||
|
@@ -986,7 +986,8 @@ mkdir_get_info:
|
||||
* failed to get it from the server or was set bogus */
|
||||
if ((direntry->d_inode) && (direntry->d_inode->i_nlink < 2))
|
||||
direntry->d_inode->i_nlink = 2;
|
||||
if (cifs_sb->tcon->ses->capabilities & CAP_UNIX)
|
||||
if (cifs_sb->tcon->ses->capabilities & CAP_UNIX) {
|
||||
mode &= ~current->fs->umask;
|
||||
if (cifs_sb->mnt_cifs_flags & CIFS_MOUNT_SET_UID) {
|
||||
CIFSSMBUnixSetPerms(xid, pTcon, full_path,
|
||||
mode,
|
||||
@@ -1004,7 +1005,7 @@ mkdir_get_info:
|
||||
cifs_sb->mnt_cifs_flags &
|
||||
CIFS_MOUNT_MAP_SPECIAL_CHR);
|
||||
}
|
||||
else {
|
||||
} else {
|
||||
/* BB to be implemented via Windows secrty descriptors
|
||||
eg CIFSSMBWinSetPerms(xid, pTcon, full_path, mode,
|
||||
-1, -1, local_nls); */
|
||||
|
@@ -96,7 +96,6 @@ int cifs_ioctl (struct inode * inode, struct file * filep,
|
||||
break;
|
||||
/* rc= CIFSGetExtAttr(xid,tcon,pSMBFile->netfid,
|
||||
extAttrBits, &ExtAttrMask);*/
|
||||
|
||||
}
|
||||
cFYI(1, ("set flags not implemented yet"));
|
||||
break;
|
||||
|
Reference in New Issue
Block a user