aboutsummaryrefslogtreecommitdiffstats
path: root/fs/nfs/filelayout/filelayout.c
diff options
context:
space:
mode:
authorPeng Tao <tao.peng@primarydata.com>2015-12-03 13:57:48 -0500
committerTrond Myklebust <trond.myklebust@primarydata.com>2015-12-28 14:32:36 -0500
commitd600ad1f2bdbf97c4818dcc85b174f72c90c21bd (patch)
treedaec357d0f24c241834d7c37e3adc723925e369f /fs/nfs/filelayout/filelayout.c
parentd0379a5d066a998b0210a81dc52e266ce4daaa36 (diff)
NFS41: pop some layoutget errors to application
For ERESTARTSYS/EIO/EROFS/ENOSPC/E2BIG in layoutget, we should just bail out instead of hiding the error and retrying inband IO. Change all the call sites to pop the error all the way up. Signed-off-by: Peng Tao <tao.peng@primarydata.com> Signed-off-by: Trond Myklebust <trond.myklebust@primarydata.com>
Diffstat (limited to 'fs/nfs/filelayout/filelayout.c')
-rw-r--r--fs/nfs/filelayout/filelayout.c17
1 files changed, 15 insertions, 2 deletions
diff --git a/fs/nfs/filelayout/filelayout.c b/fs/nfs/filelayout/filelayout.c
index 02ec07973bc4..ae07b0f56659 100644
--- a/fs/nfs/filelayout/filelayout.c
+++ b/fs/nfs/filelayout/filelayout.c
@@ -883,13 +883,19 @@ static void
883filelayout_pg_init_read(struct nfs_pageio_descriptor *pgio, 883filelayout_pg_init_read(struct nfs_pageio_descriptor *pgio,
884 struct nfs_page *req) 884 struct nfs_page *req)
885{ 885{
886 if (!pgio->pg_lseg) 886 if (!pgio->pg_lseg) {
887 pgio->pg_lseg = pnfs_update_layout(pgio->pg_inode, 887 pgio->pg_lseg = pnfs_update_layout(pgio->pg_inode,
888 req->wb_context, 888 req->wb_context,
889 0, 889 0,
890 NFS4_MAX_UINT64, 890 NFS4_MAX_UINT64,
891 IOMODE_READ, 891 IOMODE_READ,
892 GFP_KERNEL); 892 GFP_KERNEL);
893 if (IS_ERR(pgio->pg_lseg)) {
894 pgio->pg_error = PTR_ERR(pgio->pg_lseg);
895 pgio->pg_lseg = NULL;
896 return;
897 }
898 }
893 /* If no lseg, fall back to read through mds */ 899 /* If no lseg, fall back to read through mds */
894 if (pgio->pg_lseg == NULL) 900 if (pgio->pg_lseg == NULL)
895 nfs_pageio_reset_read_mds(pgio); 901 nfs_pageio_reset_read_mds(pgio);
@@ -902,13 +908,20 @@ filelayout_pg_init_write(struct nfs_pageio_descriptor *pgio,
902 struct nfs_commit_info cinfo; 908 struct nfs_commit_info cinfo;
903 int status; 909 int status;
904 910
905 if (!pgio->pg_lseg) 911 if (!pgio->pg_lseg) {
906 pgio->pg_lseg = pnfs_update_layout(pgio->pg_inode, 912 pgio->pg_lseg = pnfs_update_layout(pgio->pg_inode,
907 req->wb_context, 913 req->wb_context,
908 0, 914 0,
909 NFS4_MAX_UINT64, 915 NFS4_MAX_UINT64,
910 IOMODE_RW, 916 IOMODE_RW,
911 GFP_NOFS); 917 GFP_NOFS);
918 if (IS_ERR(pgio->pg_lseg)) {
919 pgio->pg_error = PTR_ERR(pgio->pg_lseg);
920 pgio->pg_lseg = NULL;
921 return;
922 }
923 }
924
912 /* If no lseg, fall back to write through mds */ 925 /* If no lseg, fall back to write through mds */
913 if (pgio->pg_lseg == NULL) 926 if (pgio->pg_lseg == NULL)
914 goto out_mds; 927 goto out_mds;