summaryrefslogtreecommitdiffstats
path: root/fs
diff options
context:
space:
mode:
authorSteve French <sfrench@us.ibm.com>2005-11-18 21:27:27 +0100
committerSteve French <sfrench@us.ibm.com>2005-11-18 21:27:27 +0100
commitc119b87d596cdd99ac20095ae2ae90b525418605 (patch)
tree3a5967800f0c0fd0a3cee88217d90144c3a3b12f /fs
parent[CIFS] Fix scheduling while atomic when pending writes at file close time (diff)
downloadlinux-c119b87d596cdd99ac20095ae2ae90b525418605.tar.xz
linux-c119b87d596cdd99ac20095ae2ae90b525418605.zip
[CIFS] Missing part of previous patch
Signed-off-by: Steve French <sfrench@us.ibm.com>
Diffstat (limited to 'fs')
-rw-r--r--fs/cifs/file.c2
-rw-r--r--fs/cifs/inode.c1
2 files changed, 3 insertions, 0 deletions
diff --git a/fs/cifs/file.c b/fs/cifs/file.c
index da4f5e10b3cc..14a1c72ced92 100644
--- a/fs/cifs/file.c
+++ b/fs/cifs/file.c
@@ -489,8 +489,10 @@ int cifs_close(struct inode *inode, struct file *file)
the struct would be in each open file,
but this should give enough time to
clear the socket */
+ write_unlock(&file->f_owner.lock);
cERROR(1,("close with pending writes"));
msleep(timeout);
+ write_lock(&file->f_owner.lock);
timeout *= 4;
}
write_unlock(&file->f_owner.lock);
diff --git a/fs/cifs/inode.c b/fs/cifs/inode.c
index ffc7305841b3..f0586c0d7bdb 100644
--- a/fs/cifs/inode.c
+++ b/fs/cifs/inode.c
@@ -279,6 +279,7 @@ static int get_sfu_uid_mode(struct inode * inode,
return (int)rc;
else if (rc > 3) {
mode = le32_to_cpu(*((__le32 *)ea_value));
+ inode->i_mode &= ~SFBITS_MASK;
cFYI(1,("special bits 0%o org mode 0%o", mode, inode->i_mode));
inode->i_mode = (mode & SFBITS_MASK) | inode->i_mode;
cFYI(1,("special mode bits 0%o", mode));