Commit 3321b791 authored by Jeff Layton's avatar Jeff Layton Committed by Steve French

cifs: fix locking and list handling code in cifs_open and its helper

The patch to remove cifs_init_private introduced a locking imbalance. It
didn't remove the leftover list addition code and the unlocking in that
function. cifs_new_fileinfo does the list addition now, so there should
be no need to do it outside of that function.

pCifsInode will never be NULL, so we don't need to check for that. This
patch also gets rid of the ugly locking and unlocking across function
calls.
Signed-off-by: default avatarJeff Layton <jlayton@redhat.com>
Acked-by: default avatarSteve French <sfrench@us.ibm.com>
Signed-off-by: default avatarSteve French <sfrench@us.ibm.com>
parent 15dd4781
...@@ -201,17 +201,6 @@ static inline int cifs_open_inode_helper(struct inode *inode, struct file *file, ...@@ -201,17 +201,6 @@ static inline int cifs_open_inode_helper(struct inode *inode, struct file *file,
struct timespec temp; struct timespec temp;
int rc; int rc;
/* want handles we can use to read with first
in the list so we do not have to walk the
list to search for one in write_begin */
if ((file->f_flags & O_ACCMODE) == O_WRONLY) {
list_add_tail(&pCifsFile->flist,
&pCifsInode->openFileList);
} else {
list_add(&pCifsFile->flist,
&pCifsInode->openFileList);
}
write_unlock(&GlobalSMBSeslock);
if (pCifsInode->clientCanCacheRead) { if (pCifsInode->clientCanCacheRead) {
/* we have the inode open somewhere else /* we have the inode open somewhere else
no need to discard cache data */ no need to discard cache data */
...@@ -397,6 +386,7 @@ int cifs_open(struct inode *inode, struct file *file) ...@@ -397,6 +386,7 @@ int cifs_open(struct inode *inode, struct file *file)
cFYI(1, ("cifs_open returned 0x%x", rc)); cFYI(1, ("cifs_open returned 0x%x", rc));
goto out; goto out;
} }
pCifsFile = cifs_new_fileinfo(inode, netfid, file, file->f_path.mnt, pCifsFile = cifs_new_fileinfo(inode, netfid, file, file->f_path.mnt,
file->f_flags); file->f_flags);
file->private_data = pCifsFile; file->private_data = pCifsFile;
...@@ -405,14 +395,8 @@ int cifs_open(struct inode *inode, struct file *file) ...@@ -405,14 +395,8 @@ int cifs_open(struct inode *inode, struct file *file)
goto out; goto out;
} }
pCifsInode = CIFS_I(file->f_path.dentry->d_inode); rc = cifs_open_inode_helper(inode, file, pCifsInode, pCifsFile, tcon,
if (pCifsInode) { &oplock, buf, full_path, xid);
rc = cifs_open_inode_helper(inode, file, pCifsInode,
pCifsFile, tcon,
&oplock, buf, full_path, xid);
} else {
write_unlock(&GlobalSMBSeslock);
}
if (oplock & CIFS_CREATE_ACTION) { if (oplock & CIFS_CREATE_ACTION) {
/* time to set mode which we can not set earlier due to /* time to set mode which we can not set earlier due to
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment