mirror of
https://github.com/torvalds/linux.git
synced 2024-11-27 22:51:35 +00:00
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:
parent
42f86b44a4
commit
7b0df92ac1
@ -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);
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user