Commit 7b0df92a authored by Trond Myklebust's avatar Trond Myklebust

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: default avatarTrond Myklebust <trond.myklebust@hammerspace.com>
parent 42f86b44
...@@ -1428,12 +1428,14 @@ static int ff_layout_write_done_cb(struct rpc_task *task, ...@@ -1428,12 +1428,14 @@ static int ff_layout_write_done_cb(struct rpc_task *task,
hdr->ds_clp, hdr->lseg, hdr->ds_clp, hdr->lseg,
hdr->pgio_mirror_idx); hdr->pgio_mirror_idx);
clear_bit(NFS_IOHDR_RESEND_PNFS, &hdr->flags);
clear_bit(NFS_IOHDR_RESEND_MDS, &hdr->flags);
switch (err) { switch (err) {
case -NFS4ERR_RESET_TO_PNFS: case -NFS4ERR_RESET_TO_PNFS:
ff_layout_reset_write(hdr, true); set_bit(NFS_IOHDR_RESEND_PNFS, &hdr->flags);
return task->tk_status; return task->tk_status;
case -NFS4ERR_RESET_TO_MDS: case -NFS4ERR_RESET_TO_MDS:
ff_layout_reset_write(hdr, false); set_bit(NFS_IOHDR_RESEND_MDS, &hdr->flags);
return task->tk_status; return task->tk_status;
case -EAGAIN: case -EAGAIN:
return -EAGAIN; return -EAGAIN;
...@@ -1580,6 +1582,10 @@ static void ff_layout_write_release(void *data) ...@@ -1580,6 +1582,10 @@ static void ff_layout_write_release(void *data)
struct nfs_pgio_header *hdr = data; struct nfs_pgio_header *hdr = data;
ff_layout_write_record_layoutstats_done(&hdr->task, hdr); 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); pnfs_generic_rw_release(data);
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment