| From a0bc01e0f1fa39702b5244b3bac699bea0d4f413 Mon Sep 17 00:00:00 2001 |
| From: Olga Kornievskaia <kolga@netapp.com> |
| Date: Fri, 23 Jun 2017 10:26:58 -0400 |
| Subject: PNFS fix EACCESS on commit to DS handling |
| |
| From: Olga Kornievskaia <kolga@netapp.com> |
| |
| commit a0bc01e0f1fa39702b5244b3bac699bea0d4f413 upstream. |
| |
| Commit fabbbee0eb0f "PNFS fix fallback to MDS if got error on |
| commit to DS" moved the pnfs_set_lo_fail() to unhandled errors |
| which was not correct and lead to a kernel oops on umount. |
| |
| Instead, fix the original EACCESS on commit to DS error by |
| getting the new layout and re-doing the IO. |
| |
| Fixes: fabbbee0eb0f ("PNFS fix fallback to MDS if got error on commit to DS") |
| Signed-off-by: Olga Kornievskaia <kolga@netapp.com> |
| Signed-off-by: Anna Schumaker <Anna.Schumaker@Netapp.com> |
| Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> |
| |
| --- |
| fs/nfs/filelayout/filelayout.c | 3 ++- |
| 1 file changed, 2 insertions(+), 1 deletion(-) |
| |
| --- a/fs/nfs/filelayout/filelayout.c |
| +++ b/fs/nfs/filelayout/filelayout.c |
| @@ -172,6 +172,7 @@ static int filelayout_async_handle_error |
| case -NFS4ERR_RETRY_UNCACHED_REP: |
| break; |
| /* Invalidate Layout errors */ |
| + case -NFS4ERR_ACCESS: |
| case -NFS4ERR_PNFS_NO_LAYOUT: |
| case -ESTALE: /* mapped NFS4ERR_STALE */ |
| case -EBADHANDLE: /* mapped NFS4ERR_BADHANDLE */ |
| @@ -202,10 +203,10 @@ static int filelayout_async_handle_error |
| task->tk_status); |
| nfs4_mark_deviceid_unavailable(devid); |
| pnfs_error_mark_layout_for_return(inode, lseg); |
| + pnfs_set_lo_fail(lseg); |
| rpc_wake_up(&tbl->slot_tbl_waitq); |
| /* fall through */ |
| default: |
| - pnfs_set_lo_fail(lseg); |
| reset: |
| dprintk("%s Retry through MDS. Error %d\n", __func__, |
| task->tk_status); |