From: Steve French Date: Tue, 11 Sep 2007 05:50:53 +0000 (+0000) Subject: [CIFS] lock inode open file list in close in case racing with open X-Git-Url: http://drtracing.org/?a=commitdiff_plain;h=4efa53f0907bb4378015c129a2c11b8d3a90bce2;p=deliverable%2Flinux.git [CIFS] lock inode open file list in close in case racing with open Harmless since it only protected turning off caching for the inode, but cleaner to lock around this in case we have a close racing with open. Signed-off-by: Shaggy CC: Cyrill Gorcunov Signed-off-by: Steve French --- diff --git a/fs/cifs/file.c b/fs/cifs/file.c index b1807fd1ac40..792549193865 100644 --- a/fs/cifs/file.c +++ b/fs/cifs/file.c @@ -545,6 +545,7 @@ int cifs_close(struct inode *inode, struct file *file) } else rc = -EBADF; + read_lock(&GlobalSMBSeslock); if (list_empty(&(CIFS_I(inode)->openFileList))) { cFYI(1, ("closing last open instance for inode %p", inode)); /* if the file is not open we do not know if we can cache info @@ -552,6 +553,7 @@ int cifs_close(struct inode *inode, struct file *file) CIFS_I(inode)->clientCanCacheRead = FALSE; CIFS_I(inode)->clientCanCacheAll = FALSE; } + read_unlock(&GlobalSMBSeslock); if ((rc == 0) && CIFS_I(inode)->write_behind_rc) rc = CIFS_I(inode)->write_behind_rc; FreeXid(xid);