diff options
Diffstat (limited to 'fs/nfs/callback_proc.c')
-rw-r--r-- | fs/nfs/callback_proc.c | 23 |
1 files changed, 16 insertions, 7 deletions
diff --git a/fs/nfs/callback_proc.c b/fs/nfs/callback_proc.c index 41db5258e7a7..73466b934090 100644 --- a/fs/nfs/callback_proc.c +++ b/fs/nfs/callback_proc.c | |||
@@ -171,14 +171,26 @@ static u32 initiate_file_draining(struct nfs_client *clp, | |||
171 | goto out; | 171 | goto out; |
172 | 172 | ||
173 | ino = lo->plh_inode; | 173 | ino = lo->plh_inode; |
174 | |||
175 | spin_lock(&ino->i_lock); | ||
176 | pnfs_set_layout_stateid(lo, &args->cbl_stateid, true); | ||
177 | spin_unlock(&ino->i_lock); | ||
178 | |||
179 | pnfs_layoutcommit_inode(ino, false); | ||
180 | |||
174 | spin_lock(&ino->i_lock); | 181 | spin_lock(&ino->i_lock); |
175 | if (test_bit(NFS_LAYOUT_BULK_RECALL, &lo->plh_flags) || | 182 | if (test_bit(NFS_LAYOUT_BULK_RECALL, &lo->plh_flags) || |
176 | pnfs_mark_matching_lsegs_invalid(lo, &free_me_list, | 183 | pnfs_mark_matching_lsegs_invalid(lo, &free_me_list, |
177 | &args->cbl_range)) | 184 | &args->cbl_range)) { |
178 | rv = NFS4ERR_DELAY; | 185 | rv = NFS4ERR_DELAY; |
179 | else | 186 | goto unlock; |
180 | rv = NFS4ERR_NOMATCHING_LAYOUT; | 187 | } |
181 | pnfs_set_layout_stateid(lo, &args->cbl_stateid, true); | 188 | |
189 | if (NFS_SERVER(ino)->pnfs_curr_ld->return_range) { | ||
190 | NFS_SERVER(ino)->pnfs_curr_ld->return_range(lo, | ||
191 | &args->cbl_range); | ||
192 | } | ||
193 | unlock: | ||
182 | spin_unlock(&ino->i_lock); | 194 | spin_unlock(&ino->i_lock); |
183 | pnfs_free_lseg_list(&free_me_list); | 195 | pnfs_free_lseg_list(&free_me_list); |
184 | pnfs_put_layout_hdr(lo); | 196 | pnfs_put_layout_hdr(lo); |
@@ -277,9 +289,6 @@ __be32 nfs4_callback_devicenotify(struct cb_devicenotifyargs *args, | |||
277 | } | 289 | } |
278 | 290 | ||
279 | found: | 291 | found: |
280 | if (dev->cbd_notify_type == NOTIFY_DEVICEID4_CHANGE) | ||
281 | dprintk("%s: NOTIFY_DEVICEID4_CHANGE not supported, " | ||
282 | "deleting instead\n", __func__); | ||
283 | nfs4_delete_deviceid(server->pnfs_curr_ld, clp, &dev->cbd_dev_id); | 292 | nfs4_delete_deviceid(server->pnfs_curr_ld, clp, &dev->cbd_dev_id); |
284 | } | 293 | } |
285 | 294 | ||