diff options
author | Alex Shi <alex.shi@linaro.org> | 2014-03-28 11:07:37 +0800 |
---|---|---|
committer | Alex Shi <alex.shi@linaro.org> | 2014-03-28 11:07:37 +0800 |
commit | 696e897344f58397b3d463fbb9f9a2f317d720c0 (patch) | |
tree | 8e1ebb350e82244b8243d4b5e0cc5cc4184fea13 /fs/nfs | |
parent | 943550a24c51bdd971f579200f286241548deaf7 (diff) | |
parent | 02e11cd17332186b4cf9ed88db6e63b30043be54 (diff) |
Merge branch 'linux-linaro-lsk' into linux-linaro-lsk-android
Diffstat (limited to 'fs/nfs')
-rw-r--r-- | fs/nfs/delegation.c | 11 | ||||
-rw-r--r-- | fs/nfs/nfs4proc.c | 5 |
2 files changed, 10 insertions, 6 deletions
diff --git a/fs/nfs/delegation.c b/fs/nfs/delegation.c index 57db3244f4d9..4b49a8c6ccad 100644 --- a/fs/nfs/delegation.c +++ b/fs/nfs/delegation.c @@ -656,16 +656,19 @@ int nfs_async_inode_return_delegation(struct inode *inode, rcu_read_lock(); delegation = rcu_dereference(NFS_I(inode)->delegation); + if (delegation == NULL) + goto out_enoent; - if (!clp->cl_mvops->match_stateid(&delegation->stateid, stateid)) { - rcu_read_unlock(); - return -ENOENT; - } + if (!clp->cl_mvops->match_stateid(&delegation->stateid, stateid)) + goto out_enoent; nfs_mark_return_delegation(server, delegation); rcu_read_unlock(); nfs_delegation_run_state_manager(clp); return 0; +out_enoent: + rcu_read_unlock(); + return -ENOENT; } static struct inode * diff --git a/fs/nfs/nfs4proc.c b/fs/nfs/nfs4proc.c index 7ccc30ecd744..bfeb1d13b08f 100644 --- a/fs/nfs/nfs4proc.c +++ b/fs/nfs/nfs4proc.c @@ -3607,8 +3607,9 @@ static bool nfs4_stateid_is_current(nfs4_stateid *stateid, { nfs4_stateid current_stateid; - if (nfs4_set_rw_stateid(¤t_stateid, ctx, l_ctx, fmode)) - return false; + /* If the current stateid represents a lost lock, then exit */ + if (nfs4_set_rw_stateid(¤t_stateid, ctx, l_ctx, fmode) == -EIO) + return true; return nfs4_stateid_match(stateid, ¤t_stateid); } |