pNFS/flexfiles: Process writeback resends from nfsiod context as well
Although the writeback resends are more robust than the reads, since they are not immediately rescheduled by the same thread, we are better off processing them in the same place as the reads. Signed-off-by: Trond Myklebust <trond.myklebust@hammerspace.com>
This commit is contained in:
@@ -1428,12 +1428,14 @@ static int ff_layout_write_done_cb(struct rpc_task *task,
|
||||
hdr->ds_clp, hdr->lseg,
|
||||
hdr->pgio_mirror_idx);
|
||||
|
||||
clear_bit(NFS_IOHDR_RESEND_PNFS, &hdr->flags);
|
||||
clear_bit(NFS_IOHDR_RESEND_MDS, &hdr->flags);
|
||||
switch (err) {
|
||||
case -NFS4ERR_RESET_TO_PNFS:
|
||||
ff_layout_reset_write(hdr, true);
|
||||
set_bit(NFS_IOHDR_RESEND_PNFS, &hdr->flags);
|
||||
return task->tk_status;
|
||||
case -NFS4ERR_RESET_TO_MDS:
|
||||
ff_layout_reset_write(hdr, false);
|
||||
set_bit(NFS_IOHDR_RESEND_MDS, &hdr->flags);
|
||||
return task->tk_status;
|
||||
case -EAGAIN:
|
||||
return -EAGAIN;
|
||||
@@ -1580,6 +1582,10 @@ static void ff_layout_write_release(void *data)
|
||||
struct nfs_pgio_header *hdr = data;
|
||||
|
||||
ff_layout_write_record_layoutstats_done(&hdr->task, hdr);
|
||||
if (test_bit(NFS_IOHDR_RESEND_PNFS, &hdr->flags))
|
||||
ff_layout_reset_write(hdr, true);
|
||||
else if (test_bit(NFS_IOHDR_RESEND_MDS, &hdr->flags))
|
||||
ff_layout_reset_write(hdr, false);
|
||||
pnfs_generic_rw_release(data);
|
||||
}
|
||||
|
||||
|
Reference in New Issue
Block a user