aboutsummaryrefslogtreecommitdiffstats
path: root/fs/nfs/nfs4proc.c
diff options
context:
space:
mode:
Diffstat (limited to 'fs/nfs/nfs4proc.c')
-rw-r--r--fs/nfs/nfs4proc.c18
1 files changed, 10 insertions, 8 deletions
diff --git a/fs/nfs/nfs4proc.c b/fs/nfs/nfs4proc.c
index de97567795a5..ff416d0e24bc 100644
--- a/fs/nfs/nfs4proc.c
+++ b/fs/nfs/nfs4proc.c
@@ -2882,12 +2882,11 @@ static void nfs4_close_prepare(struct rpc_task *task, void *data)
2882 call_close |= is_wronly; 2882 call_close |= is_wronly;
2883 else if (is_wronly) 2883 else if (is_wronly)
2884 calldata->arg.fmode |= FMODE_WRITE; 2884 calldata->arg.fmode |= FMODE_WRITE;
2885 if (calldata->arg.fmode != (FMODE_READ|FMODE_WRITE))
2886 call_close |= is_rdwr;
2885 } else if (is_rdwr) 2887 } else if (is_rdwr)
2886 calldata->arg.fmode |= FMODE_READ|FMODE_WRITE; 2888 calldata->arg.fmode |= FMODE_READ|FMODE_WRITE;
2887 2889
2888 if (calldata->arg.fmode == 0)
2889 call_close |= is_rdwr;
2890
2891 if (!nfs4_valid_open_stateid(state)) 2890 if (!nfs4_valid_open_stateid(state))
2892 call_close = 0; 2891 call_close = 0;
2893 spin_unlock(&state->owner->so_lock); 2892 spin_unlock(&state->owner->so_lock);
@@ -7924,8 +7923,8 @@ nfs4_layoutget_handle_exception(struct rpc_task *task,
7924 break; 7923 break;
7925 } 7924 }
7926 lo = NFS_I(inode)->layout; 7925 lo = NFS_I(inode)->layout;
7927 if (lo && nfs4_stateid_match(&lgp->args.stateid, 7926 if (lo && !test_bit(NFS_LAYOUT_INVALID_STID, &lo->plh_flags) &&
7928 &lo->plh_stateid)) { 7927 nfs4_stateid_match_other(&lgp->args.stateid, &lo->plh_stateid)) {
7929 LIST_HEAD(head); 7928 LIST_HEAD(head);
7930 7929
7931 /* 7930 /*
@@ -7936,10 +7935,10 @@ nfs4_layoutget_handle_exception(struct rpc_task *task,
7936 pnfs_mark_matching_lsegs_invalid(lo, &head, NULL, 0); 7935 pnfs_mark_matching_lsegs_invalid(lo, &head, NULL, 0);
7937 spin_unlock(&inode->i_lock); 7936 spin_unlock(&inode->i_lock);
7938 pnfs_free_lseg_list(&head); 7937 pnfs_free_lseg_list(&head);
7938 status = -EAGAIN;
7939 goto out;
7939 } else 7940 } else
7940 spin_unlock(&inode->i_lock); 7941 spin_unlock(&inode->i_lock);
7941 status = -EAGAIN;
7942 goto out;
7943 } 7942 }
7944 7943
7945 status = nfs4_handle_exception(server, status, exception); 7944 status = nfs4_handle_exception(server, status, exception);
@@ -8036,7 +8035,10 @@ nfs4_proc_layoutget(struct nfs4_layoutget *lgp, long *timeout, gfp_t gfp_flags)
8036 .flags = RPC_TASK_ASYNC, 8035 .flags = RPC_TASK_ASYNC,
8037 }; 8036 };
8038 struct pnfs_layout_segment *lseg = NULL; 8037 struct pnfs_layout_segment *lseg = NULL;
8039 struct nfs4_exception exception = { .timeout = *timeout }; 8038 struct nfs4_exception exception = {
8039 .inode = inode,
8040 .timeout = *timeout,
8041 };
8040 int status = 0; 8042 int status = 0;
8041 8043
8042 dprintk("--> %s\n", __func__); 8044 dprintk("--> %s\n", __func__);