diff options
Diffstat (limited to 'fs/nfs/flexfilelayout/flexfilelayout.c')
| -rw-r--r-- | fs/nfs/flexfilelayout/flexfilelayout.c | 28 | 
1 files changed, 9 insertions, 19 deletions
diff --git a/fs/nfs/flexfilelayout/flexfilelayout.c b/fs/nfs/flexfilelayout/flexfilelayout.c index b04e20d28162..5657b7f2611f 100644 --- a/fs/nfs/flexfilelayout/flexfilelayout.c +++ b/fs/nfs/flexfilelayout/flexfilelayout.c @@ -8,6 +8,7 @@   */  #include <linux/nfs_fs.h> +#include <linux/nfs_mount.h>  #include <linux/nfs_page.h>  #include <linux/module.h>  #include <linux/sched/mm.h> @@ -928,7 +929,9 @@ retry:  	pgm = &pgio->pg_mirrors[0];  	pgm->pg_bsize = mirror->mirror_ds->ds_versions[0].rsize; -	pgio->pg_maxretrans = io_maxretrans; +	if (NFS_SERVER(pgio->pg_inode)->flags & +			(NFS_MOUNT_SOFT|NFS_MOUNT_SOFTERR)) +		pgio->pg_maxretrans = io_maxretrans;  	return;  out_nolseg:  	if (pgio->pg_error < 0) @@ -940,6 +943,7 @@ out_mds:  			pgio->pg_lseg);  	pnfs_put_lseg(pgio->pg_lseg);  	pgio->pg_lseg = NULL; +	pgio->pg_maxretrans = 0;  	nfs_pageio_reset_read_mds(pgio);  } @@ -1000,7 +1004,9 @@ retry:  		pgm->pg_bsize = mirror->mirror_ds->ds_versions[0].wsize;  	} -	pgio->pg_maxretrans = io_maxretrans; +	if (NFS_SERVER(pgio->pg_inode)->flags & +			(NFS_MOUNT_SOFT|NFS_MOUNT_SOFTERR)) +		pgio->pg_maxretrans = io_maxretrans;  	return;  out_mds: @@ -1010,6 +1016,7 @@ out_mds:  			pgio->pg_lseg);  	pnfs_put_lseg(pgio->pg_lseg);  	pgio->pg_lseg = NULL; +	pgio->pg_maxretrans = 0;  	nfs_pageio_reset_write_mds(pgio);  } @@ -1148,8 +1155,6 @@ static int ff_layout_async_handle_error_v4(struct rpc_task *task,  		break;  	case -NFS4ERR_RETRY_UNCACHED_REP:  		break; -	case -EAGAIN: -		return -NFS4ERR_RESET_TO_PNFS;  	/* Invalidate Layout errors */  	case -NFS4ERR_PNFS_NO_LAYOUT:  	case -ESTALE:           /* mapped NFS4ERR_STALE */ @@ -1210,7 +1215,6 @@ static int ff_layout_async_handle_error_v3(struct rpc_task *task,  	case -EBADHANDLE:  	case -ELOOP:  	case -ENOSPC: -	case -EAGAIN:  		break;  	case -EJUKEBOX:  		nfs_inc_stats(lseg->pls_layout->plh_inode, NFSIOS_DELAY); @@ -1445,16 +1449,6 @@ static void ff_layout_read_prepare_v4(struct rpc_task *task, void *data)  	ff_layout_read_prepare_common(task, hdr);  } -static void -ff_layout_io_prepare_transmit(struct rpc_task *task, -		void *data) -{ -	struct nfs_pgio_header *hdr = data; - -	if (!pnfs_is_valid_lseg(hdr->lseg)) -		rpc_exit(task, -EAGAIN); -} -  static void ff_layout_read_call_done(struct rpc_task *task, void *data)  {  	struct nfs_pgio_header *hdr = data; @@ -1740,7 +1734,6 @@ static void ff_layout_commit_release(void *data)  static const struct rpc_call_ops ff_layout_read_call_ops_v3 = {  	.rpc_call_prepare = ff_layout_read_prepare_v3, -	.rpc_call_prepare_transmit = ff_layout_io_prepare_transmit,  	.rpc_call_done = ff_layout_read_call_done,  	.rpc_count_stats = ff_layout_read_count_stats,  	.rpc_release = ff_layout_read_release, @@ -1748,7 +1741,6 @@ static const struct rpc_call_ops ff_layout_read_call_ops_v3 = {  static const struct rpc_call_ops ff_layout_read_call_ops_v4 = {  	.rpc_call_prepare = ff_layout_read_prepare_v4, -	.rpc_call_prepare_transmit = ff_layout_io_prepare_transmit,  	.rpc_call_done = ff_layout_read_call_done,  	.rpc_count_stats = ff_layout_read_count_stats,  	.rpc_release = ff_layout_read_release, @@ -1756,7 +1748,6 @@ static const struct rpc_call_ops ff_layout_read_call_ops_v4 = {  static const struct rpc_call_ops ff_layout_write_call_ops_v3 = {  	.rpc_call_prepare = ff_layout_write_prepare_v3, -	.rpc_call_prepare_transmit = ff_layout_io_prepare_transmit,  	.rpc_call_done = ff_layout_write_call_done,  	.rpc_count_stats = ff_layout_write_count_stats,  	.rpc_release = ff_layout_write_release, @@ -1764,7 +1755,6 @@ static const struct rpc_call_ops ff_layout_write_call_ops_v3 = {  static const struct rpc_call_ops ff_layout_write_call_ops_v4 = {  	.rpc_call_prepare = ff_layout_write_prepare_v4, -	.rpc_call_prepare_transmit = ff_layout_io_prepare_transmit,  	.rpc_call_done = ff_layout_write_call_done,  	.rpc_count_stats = ff_layout_write_count_stats,  	.rpc_release = ff_layout_write_release,  |