diff options
Diffstat (limited to 'fs/nfs/nfs4proc.c')
-rw-r--r-- | fs/nfs/nfs4proc.c | 9 |
1 files changed, 6 insertions, 3 deletions
diff --git a/fs/nfs/nfs4proc.c b/fs/nfs/nfs4proc.c index eda74c42d552..638067007c65 100644 --- a/fs/nfs/nfs4proc.c +++ b/fs/nfs/nfs4proc.c | |||
@@ -39,6 +39,7 @@ | |||
39 | #include <linux/delay.h> | 39 | #include <linux/delay.h> |
40 | #include <linux/errno.h> | 40 | #include <linux/errno.h> |
41 | #include <linux/string.h> | 41 | #include <linux/string.h> |
42 | #include <linux/slab.h> | ||
42 | #include <linux/sunrpc/clnt.h> | 43 | #include <linux/sunrpc/clnt.h> |
43 | #include <linux/nfs.h> | 44 | #include <linux/nfs.h> |
44 | #include <linux/nfs4.h> | 45 | #include <linux/nfs4.h> |
@@ -1522,6 +1523,8 @@ static int _nfs4_proc_open(struct nfs4_opendata *data) | |||
1522 | nfs_post_op_update_inode(dir, o_res->dir_attr); | 1523 | nfs_post_op_update_inode(dir, o_res->dir_attr); |
1523 | } else | 1524 | } else |
1524 | nfs_refresh_inode(dir, o_res->dir_attr); | 1525 | nfs_refresh_inode(dir, o_res->dir_attr); |
1526 | if ((o_res->rflags & NFS4_OPEN_RESULT_LOCKTYPE_POSIX) == 0) | ||
1527 | server->caps &= ~NFS_CAP_POSIX_LOCK; | ||
1525 | if(o_res->rflags & NFS4_OPEN_RESULT_CONFIRM) { | 1528 | if(o_res->rflags & NFS4_OPEN_RESULT_CONFIRM) { |
1526 | status = _nfs4_proc_open_confirm(data); | 1529 | status = _nfs4_proc_open_confirm(data); |
1527 | if (status != 0) | 1530 | if (status != 0) |
@@ -1663,7 +1666,7 @@ static int _nfs4_do_open(struct inode *dir, struct path *path, fmode_t fmode, in | |||
1663 | status = PTR_ERR(state); | 1666 | status = PTR_ERR(state); |
1664 | if (IS_ERR(state)) | 1667 | if (IS_ERR(state)) |
1665 | goto err_opendata_put; | 1668 | goto err_opendata_put; |
1666 | if ((opendata->o_res.rflags & NFS4_OPEN_RESULT_LOCKTYPE_POSIX) != 0) | 1669 | if (server->caps & NFS_CAP_POSIX_LOCK) |
1667 | set_bit(NFS_STATE_POSIX_LOCKS, &state->flags); | 1670 | set_bit(NFS_STATE_POSIX_LOCKS, &state->flags); |
1668 | nfs4_opendata_put(opendata); | 1671 | nfs4_opendata_put(opendata); |
1669 | nfs4_put_state_owner(sp); | 1672 | nfs4_put_state_owner(sp); |
@@ -2067,8 +2070,7 @@ nfs4_open_revalidate(struct inode *dir, struct dentry *dentry, int openflags, st | |||
2067 | case -EDQUOT: | 2070 | case -EDQUOT: |
2068 | case -ENOSPC: | 2071 | case -ENOSPC: |
2069 | case -EROFS: | 2072 | case -EROFS: |
2070 | lookup_instantiate_filp(nd, (struct dentry *)state, NULL); | 2073 | return PTR_ERR(state); |
2071 | return 1; | ||
2072 | default: | 2074 | default: |
2073 | goto out_drop; | 2075 | goto out_drop; |
2074 | } | 2076 | } |
@@ -5107,6 +5109,7 @@ static int nfs41_proc_async_sequence(struct nfs_client *clp, | |||
5107 | res = kzalloc(sizeof(*res), GFP_KERNEL); | 5109 | res = kzalloc(sizeof(*res), GFP_KERNEL); |
5108 | if (!args || !res) { | 5110 | if (!args || !res) { |
5109 | kfree(args); | 5111 | kfree(args); |
5112 | kfree(res); | ||
5110 | nfs_put_client(clp); | 5113 | nfs_put_client(clp); |
5111 | return -ENOMEM; | 5114 | return -ENOMEM; |
5112 | } | 5115 | } |