diff options
Diffstat (limited to 'fs/nfs/flexfilelayout/flexfilelayout.c')
| -rw-r--r-- | fs/nfs/flexfilelayout/flexfilelayout.c | 11 | 
1 files changed, 7 insertions, 4 deletions
| diff --git a/fs/nfs/flexfilelayout/flexfilelayout.c b/fs/nfs/flexfilelayout/flexfilelayout.c index 7d399f72ebbb..de03e440b7ee 100644 --- a/fs/nfs/flexfilelayout/flexfilelayout.c +++ b/fs/nfs/flexfilelayout/flexfilelayout.c @@ -907,9 +907,8 @@ retry:  		goto out_mds;  	/* Use a direct mapping of ds_idx to pgio mirror_idx */ -	if (WARN_ON_ONCE(pgio->pg_mirror_count != -	    FF_LAYOUT_MIRROR_COUNT(pgio->pg_lseg))) -		goto out_mds; +	if (pgio->pg_mirror_count != FF_LAYOUT_MIRROR_COUNT(pgio->pg_lseg)) +		goto out_eagain;  	for (i = 0; i < pgio->pg_mirror_count; i++) {  		mirror = FF_LAYOUT_COMP(pgio->pg_lseg, i); @@ -931,7 +930,10 @@ retry:  			(NFS_MOUNT_SOFT|NFS_MOUNT_SOFTERR))  		pgio->pg_maxretrans = io_maxretrans;  	return; - +out_eagain: +	pnfs_generic_pg_cleanup(pgio); +	pgio->pg_error = -EAGAIN; +	return;  out_mds:  	trace_pnfs_mds_fallback_pg_init_write(pgio->pg_inode,  			0, NFS4_MAX_UINT64, IOMODE_RW, @@ -941,6 +943,7 @@ out_mds:  	pgio->pg_lseg = NULL;  	pgio->pg_maxretrans = 0;  	nfs_pageio_reset_write_mds(pgio); +	pgio->pg_error = -EAGAIN;  }  static unsigned int |