diff options
Diffstat (limited to 'fs/nfs/flexfilelayout/flexfilelayoutdev.c')
| -rw-r--r-- | fs/nfs/flexfilelayout/flexfilelayoutdev.c | 19 | 
1 files changed, 19 insertions, 0 deletions
| diff --git a/fs/nfs/flexfilelayout/flexfilelayoutdev.c b/fs/nfs/flexfilelayout/flexfilelayoutdev.c index 74d8d5352438..d23347389626 100644 --- a/fs/nfs/flexfilelayout/flexfilelayoutdev.c +++ b/fs/nfs/flexfilelayout/flexfilelayoutdev.c @@ -370,6 +370,25 @@ out:  	return fh;  } +int +nfs4_ff_layout_select_ds_stateid(struct pnfs_layout_segment *lseg, +				u32 mirror_idx, +				nfs4_stateid *stateid) +{ +	struct nfs4_ff_layout_mirror *mirror = FF_LAYOUT_COMP(lseg, mirror_idx); + +	if (!ff_layout_mirror_valid(lseg, mirror, false)) { +		pr_err_ratelimited("NFS: %s: No data server for mirror offset index %d\n", +			__func__, mirror_idx); +		goto out; +	} + +	nfs4_stateid_copy(stateid, &mirror->stateid); +	return 1; +out: +	return 0; +} +  /**   * nfs4_ff_layout_prepare_ds - prepare a DS connection for an RPC call   * @lseg: the layout segment we're operating on | 
