pnfs: force a layout commit when encountering busy segments during recall
Expedite layout recall processing by forcing a layout commit when we see busy segments. Without it the layout recall might have to wait until the VM decided to start writeback for the file, which can introduce long delays. Signed-off-by: Christoph Hellwig <hch@lst.de> Signed-off-by: Trond Myklebust <trond.myklebust@primarydata.com>
This commit is contained in:
parent
3a3908c8b0
commit
7c5d187581
2 changed files with 10 additions and 1 deletions
|
@ -171,6 +171,13 @@ static u32 initiate_file_draining(struct nfs_client *clp,
|
|||
goto out;
|
||||
|
||||
ino = lo->plh_inode;
|
||||
|
||||
spin_lock(&ino->i_lock);
|
||||
pnfs_set_layout_stateid(lo, &args->cbl_stateid, true);
|
||||
spin_unlock(&ino->i_lock);
|
||||
|
||||
pnfs_layoutcommit_inode(ino, false);
|
||||
|
||||
spin_lock(&ino->i_lock);
|
||||
if (test_bit(NFS_LAYOUT_BULK_RECALL, &lo->plh_flags) ||
|
||||
pnfs_mark_matching_lsegs_invalid(lo, &free_me_list,
|
||||
|
@ -178,7 +185,6 @@ static u32 initiate_file_draining(struct nfs_client *clp,
|
|||
rv = NFS4ERR_DELAY;
|
||||
else
|
||||
rv = NFS4ERR_NOMATCHING_LAYOUT;
|
||||
pnfs_set_layout_stateid(lo, &args->cbl_stateid, true);
|
||||
spin_unlock(&ino->i_lock);
|
||||
pnfs_free_lseg_list(&free_me_list);
|
||||
pnfs_put_layout_hdr(lo);
|
||||
|
|
|
@ -594,6 +594,9 @@ pnfs_layout_free_bulk_destroy_list(struct list_head *layout_list,
|
|||
dprintk("%s freeing layout for inode %lu\n", __func__,
|
||||
lo->plh_inode->i_ino);
|
||||
inode = lo->plh_inode;
|
||||
|
||||
pnfs_layoutcommit_inode(inode, false);
|
||||
|
||||
spin_lock(&inode->i_lock);
|
||||
list_del_init(&lo->plh_bulk_destroy);
|
||||
lo->plh_block_lgets++; /* permanently block new LAYOUTGETs */
|
||||
|
|
Loading…
Reference in a new issue