mirror of
https://github.com/torvalds/linux.git
synced 2024-11-27 22:51:35 +00:00
pNFS/flexfiles: Don't tie up all the rpciod threads in resends
We do not want to have rpciod threads perform recursive calls into the RPC layer since that can deadlock. In particular, having to wait for a layoutget can be nasty... We want rather to defer scheduling those retries until we're in the rpc_release() callback, since that is called from the nfsiod workqueue. Signed-off-by: Trond Myklebust <trond.myklebust@hammerspace.com>
This commit is contained in:
parent
0dae72d581
commit
42f86b44a4
@ -1243,17 +1243,18 @@ static int ff_layout_read_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:
|
||||
if (ff_layout_choose_best_ds_for_read(hdr->lseg,
|
||||
hdr->pgio_mirror_idx + 1,
|
||||
&hdr->pgio_mirror_idx))
|
||||
goto out_eagain;
|
||||
ff_layout_read_record_layoutstats_done(task, hdr);
|
||||
pnfs_read_resend_pnfs(hdr);
|
||||
set_bit(NFS_IOHDR_RESEND_PNFS, &hdr->flags);
|
||||
return task->tk_status;
|
||||
case -NFS4ERR_RESET_TO_MDS:
|
||||
ff_layout_reset_read(hdr);
|
||||
set_bit(NFS_IOHDR_RESEND_MDS, &hdr->flags);
|
||||
return task->tk_status;
|
||||
case -EAGAIN:
|
||||
goto out_eagain;
|
||||
@ -1403,6 +1404,10 @@ static void ff_layout_read_release(void *data)
|
||||
struct nfs_pgio_header *hdr = data;
|
||||
|
||||
ff_layout_read_record_layoutstats_done(&hdr->task, hdr);
|
||||
if (test_bit(NFS_IOHDR_RESEND_PNFS, &hdr->flags))
|
||||
pnfs_read_resend_pnfs(hdr);
|
||||
else if (test_bit(NFS_IOHDR_RESEND_MDS, &hdr->flags))
|
||||
ff_layout_reset_read(hdr);
|
||||
pnfs_generic_rw_release(data);
|
||||
}
|
||||
|
||||
|
@ -1438,6 +1438,8 @@ enum {
|
||||
NFS_IOHDR_EOF,
|
||||
NFS_IOHDR_REDO,
|
||||
NFS_IOHDR_STAT,
|
||||
NFS_IOHDR_RESEND_PNFS,
|
||||
NFS_IOHDR_RESEND_MDS,
|
||||
};
|
||||
|
||||
struct nfs_io_completion;
|
||||
|
Loading…
Reference in New Issue
Block a user