|
@@ -284,6 +284,15 @@ cifs_new_fileinfo(__u16 fileHandle, struct file *file,
|
|
|
|
|
|
static void cifs_del_lock_waiters(struct cifsLockInfo *lock);
|
|
|
|
|
|
+struct cifsFileInfo *
|
|
|
+cifsFileInfo_get(struct cifsFileInfo *cifs_file)
|
|
|
+{
|
|
|
+ spin_lock(&cifs_file_list_lock);
|
|
|
+ cifsFileInfo_get_locked(cifs_file);
|
|
|
+ spin_unlock(&cifs_file_list_lock);
|
|
|
+ return cifs_file;
|
|
|
+}
|
|
|
+
|
|
|
/*
|
|
|
* Release a reference on the file private data. This may involve closing
|
|
|
* the filehandle out on the server. Must be called without holding
|
|
@@ -1562,7 +1571,7 @@ struct cifsFileInfo *find_readable_file(struct cifsInodeInfo *cifs_inode,
|
|
|
if (!open_file->invalidHandle) {
|
|
|
/* found a good file */
|
|
|
/* lock it so it will not be closed on us */
|
|
|
- cifsFileInfo_get(open_file);
|
|
|
+ cifsFileInfo_get_locked(open_file);
|
|
|
spin_unlock(&cifs_file_list_lock);
|
|
|
return open_file;
|
|
|
} /* else might as well continue, and look for
|
|
@@ -1614,7 +1623,7 @@ refind_writable:
|
|
|
if (OPEN_FMODE(open_file->f_flags) & FMODE_WRITE) {
|
|
|
if (!open_file->invalidHandle) {
|
|
|
/* found a good writable file */
|
|
|
- cifsFileInfo_get(open_file);
|
|
|
+ cifsFileInfo_get_locked(open_file);
|
|
|
spin_unlock(&cifs_file_list_lock);
|
|
|
return open_file;
|
|
|
} else {
|
|
@@ -1631,7 +1640,7 @@ refind_writable:
|
|
|
|
|
|
if (inv_file) {
|
|
|
any_available = false;
|
|
|
- cifsFileInfo_get(inv_file);
|
|
|
+ cifsFileInfo_get_locked(inv_file);
|
|
|
}
|
|
|
|
|
|
spin_unlock(&cifs_file_list_lock);
|
|
@@ -3082,8 +3091,6 @@ static int cifs_readpages(struct file *file, struct address_space *mapping,
|
|
|
break;
|
|
|
}
|
|
|
|
|
|
- spin_lock(&cifs_file_list_lock);
|
|
|
- spin_unlock(&cifs_file_list_lock);
|
|
|
rdata->cfile = cifsFileInfo_get(open_file);
|
|
|
rdata->mapping = mapping;
|
|
|
rdata->offset = offset;
|