diff options
Diffstat (limited to 'fs/cifs/file.c')
| -rw-r--r-- | fs/cifs/file.c | 15 |
1 files changed, 8 insertions, 7 deletions
diff --git a/fs/cifs/file.c b/fs/cifs/file.c index 4d8ba8d491e5..91d8629e69a2 100644 --- a/fs/cifs/file.c +++ b/fs/cifs/file.c | |||
| @@ -999,7 +999,7 @@ try_again: | |||
| 999 | rc = wait_event_interruptible(flock->fl_wait, !flock->fl_next); | 999 | rc = wait_event_interruptible(flock->fl_wait, !flock->fl_next); |
| 1000 | if (!rc) | 1000 | if (!rc) |
| 1001 | goto try_again; | 1001 | goto try_again; |
| 1002 | locks_delete_block(flock); | 1002 | posix_unblock_lock(flock); |
| 1003 | } | 1003 | } |
| 1004 | return rc; | 1004 | return rc; |
| 1005 | } | 1005 | } |
| @@ -1092,6 +1092,7 @@ struct lock_to_push { | |||
| 1092 | static int | 1092 | static int |
| 1093 | cifs_push_posix_locks(struct cifsFileInfo *cfile) | 1093 | cifs_push_posix_locks(struct cifsFileInfo *cfile) |
| 1094 | { | 1094 | { |
| 1095 | struct inode *inode = cfile->dentry->d_inode; | ||
| 1095 | struct cifs_tcon *tcon = tlink_tcon(cfile->tlink); | 1096 | struct cifs_tcon *tcon = tlink_tcon(cfile->tlink); |
| 1096 | struct file_lock *flock, **before; | 1097 | struct file_lock *flock, **before; |
| 1097 | unsigned int count = 0, i = 0; | 1098 | unsigned int count = 0, i = 0; |
| @@ -1102,12 +1103,12 @@ cifs_push_posix_locks(struct cifsFileInfo *cfile) | |||
| 1102 | 1103 | ||
| 1103 | xid = get_xid(); | 1104 | xid = get_xid(); |
| 1104 | 1105 | ||
| 1105 | lock_flocks(); | 1106 | spin_lock(&inode->i_lock); |
| 1106 | cifs_for_each_lock(cfile->dentry->d_inode, before) { | 1107 | cifs_for_each_lock(inode, before) { |
| 1107 | if ((*before)->fl_flags & FL_POSIX) | 1108 | if ((*before)->fl_flags & FL_POSIX) |
| 1108 | count++; | 1109 | count++; |
| 1109 | } | 1110 | } |
| 1110 | unlock_flocks(); | 1111 | spin_unlock(&inode->i_lock); |
| 1111 | 1112 | ||
| 1112 | INIT_LIST_HEAD(&locks_to_send); | 1113 | INIT_LIST_HEAD(&locks_to_send); |
| 1113 | 1114 | ||
| @@ -1126,8 +1127,8 @@ cifs_push_posix_locks(struct cifsFileInfo *cfile) | |||
| 1126 | } | 1127 | } |
| 1127 | 1128 | ||
| 1128 | el = locks_to_send.next; | 1129 | el = locks_to_send.next; |
| 1129 | lock_flocks(); | 1130 | spin_lock(&inode->i_lock); |
| 1130 | cifs_for_each_lock(cfile->dentry->d_inode, before) { | 1131 | cifs_for_each_lock(inode, before) { |
| 1131 | flock = *before; | 1132 | flock = *before; |
| 1132 | if ((flock->fl_flags & FL_POSIX) == 0) | 1133 | if ((flock->fl_flags & FL_POSIX) == 0) |
| 1133 | continue; | 1134 | continue; |
| @@ -1152,7 +1153,7 @@ cifs_push_posix_locks(struct cifsFileInfo *cfile) | |||
| 1152 | lck->offset = flock->fl_start; | 1153 | lck->offset = flock->fl_start; |
| 1153 | el = el->next; | 1154 | el = el->next; |
| 1154 | } | 1155 | } |
| 1155 | unlock_flocks(); | 1156 | spin_unlock(&inode->i_lock); |
| 1156 | 1157 | ||
| 1157 | list_for_each_entry_safe(lck, tmp, &locks_to_send, llist) { | 1158 | list_for_each_entry_safe(lck, tmp, &locks_to_send, llist) { |
| 1158 | int stored_rc; | 1159 | int stored_rc; |
