diff options
Diffstat (limited to 'fs/nfs/nfs4proc.c')
-rw-r--r-- | fs/nfs/nfs4proc.c | 263 |
1 files changed, 126 insertions, 137 deletions
diff --git a/fs/nfs/nfs4proc.c b/fs/nfs/nfs4proc.c index 1293e0acd82b..4451287a81d1 100644 --- a/fs/nfs/nfs4proc.c +++ b/fs/nfs/nfs4proc.c | |||
@@ -1139,8 +1139,9 @@ static struct nfs4_state *nfs4_do_open(struct inode *dir, struct path *path, int | |||
1139 | return res; | 1139 | return res; |
1140 | } | 1140 | } |
1141 | 1141 | ||
1142 | static int _nfs4_do_setattr(struct inode *inode, struct nfs_fattr *fattr, | 1142 | static int _nfs4_do_setattr(struct inode *inode, struct rpc_cred *cred, |
1143 | struct iattr *sattr, struct nfs4_state *state) | 1143 | struct nfs_fattr *fattr, struct iattr *sattr, |
1144 | struct nfs4_state *state) | ||
1144 | { | 1145 | { |
1145 | struct nfs_server *server = NFS_SERVER(inode); | 1146 | struct nfs_server *server = NFS_SERVER(inode); |
1146 | struct nfs_setattrargs arg = { | 1147 | struct nfs_setattrargs arg = { |
@@ -1154,9 +1155,10 @@ static int _nfs4_do_setattr(struct inode *inode, struct nfs_fattr *fattr, | |||
1154 | .server = server, | 1155 | .server = server, |
1155 | }; | 1156 | }; |
1156 | struct rpc_message msg = { | 1157 | struct rpc_message msg = { |
1157 | .rpc_proc = &nfs4_procedures[NFSPROC4_CLNT_SETATTR], | 1158 | .rpc_proc = &nfs4_procedures[NFSPROC4_CLNT_SETATTR], |
1158 | .rpc_argp = &arg, | 1159 | .rpc_argp = &arg, |
1159 | .rpc_resp = &res, | 1160 | .rpc_resp = &res, |
1161 | .rpc_cred = cred, | ||
1160 | }; | 1162 | }; |
1161 | unsigned long timestamp = jiffies; | 1163 | unsigned long timestamp = jiffies; |
1162 | int status; | 1164 | int status; |
@@ -1166,7 +1168,6 @@ static int _nfs4_do_setattr(struct inode *inode, struct nfs_fattr *fattr, | |||
1166 | if (nfs4_copy_delegation_stateid(&arg.stateid, inode)) { | 1168 | if (nfs4_copy_delegation_stateid(&arg.stateid, inode)) { |
1167 | /* Use that stateid */ | 1169 | /* Use that stateid */ |
1168 | } else if (state != NULL) { | 1170 | } else if (state != NULL) { |
1169 | msg.rpc_cred = state->owner->so_cred; | ||
1170 | nfs4_copy_stateid(&arg.stateid, state, current->files); | 1171 | nfs4_copy_stateid(&arg.stateid, state, current->files); |
1171 | } else | 1172 | } else |
1172 | memcpy(&arg.stateid, &zero_stateid, sizeof(arg.stateid)); | 1173 | memcpy(&arg.stateid, &zero_stateid, sizeof(arg.stateid)); |
@@ -1177,15 +1178,16 @@ static int _nfs4_do_setattr(struct inode *inode, struct nfs_fattr *fattr, | |||
1177 | return status; | 1178 | return status; |
1178 | } | 1179 | } |
1179 | 1180 | ||
1180 | static int nfs4_do_setattr(struct inode *inode, struct nfs_fattr *fattr, | 1181 | static int nfs4_do_setattr(struct inode *inode, struct rpc_cred *cred, |
1181 | struct iattr *sattr, struct nfs4_state *state) | 1182 | struct nfs_fattr *fattr, struct iattr *sattr, |
1183 | struct nfs4_state *state) | ||
1182 | { | 1184 | { |
1183 | struct nfs_server *server = NFS_SERVER(inode); | 1185 | struct nfs_server *server = NFS_SERVER(inode); |
1184 | struct nfs4_exception exception = { }; | 1186 | struct nfs4_exception exception = { }; |
1185 | int err; | 1187 | int err; |
1186 | do { | 1188 | do { |
1187 | err = nfs4_handle_exception(server, | 1189 | err = nfs4_handle_exception(server, |
1188 | _nfs4_do_setattr(inode, fattr, sattr, state), | 1190 | _nfs4_do_setattr(inode, cred, fattr, sattr, state), |
1189 | &exception); | 1191 | &exception); |
1190 | } while (exception.retry); | 1192 | } while (exception.retry); |
1191 | return err; | 1193 | return err; |
@@ -1647,29 +1649,25 @@ static int | |||
1647 | nfs4_proc_setattr(struct dentry *dentry, struct nfs_fattr *fattr, | 1649 | nfs4_proc_setattr(struct dentry *dentry, struct nfs_fattr *fattr, |
1648 | struct iattr *sattr) | 1650 | struct iattr *sattr) |
1649 | { | 1651 | { |
1650 | struct rpc_cred *cred; | ||
1651 | struct inode *inode = dentry->d_inode; | 1652 | struct inode *inode = dentry->d_inode; |
1652 | struct nfs_open_context *ctx; | 1653 | struct rpc_cred *cred = NULL; |
1653 | struct nfs4_state *state = NULL; | 1654 | struct nfs4_state *state = NULL; |
1654 | int status; | 1655 | int status; |
1655 | 1656 | ||
1656 | nfs_fattr_init(fattr); | 1657 | nfs_fattr_init(fattr); |
1657 | 1658 | ||
1658 | cred = rpc_lookup_cred(); | ||
1659 | if (IS_ERR(cred)) | ||
1660 | return PTR_ERR(cred); | ||
1661 | |||
1662 | /* Search for an existing open(O_WRITE) file */ | 1659 | /* Search for an existing open(O_WRITE) file */ |
1663 | ctx = nfs_find_open_context(inode, cred, FMODE_WRITE); | 1660 | if (sattr->ia_valid & ATTR_FILE) { |
1664 | if (ctx != NULL) | 1661 | struct nfs_open_context *ctx; |
1662 | |||
1663 | ctx = nfs_file_open_context(sattr->ia_file); | ||
1664 | cred = ctx->cred; | ||
1665 | state = ctx->state; | 1665 | state = ctx->state; |
1666 | } | ||
1666 | 1667 | ||
1667 | status = nfs4_do_setattr(inode, fattr, sattr, state); | 1668 | status = nfs4_do_setattr(inode, cred, fattr, sattr, state); |
1668 | if (status == 0) | 1669 | if (status == 0) |
1669 | nfs_setattr_update_inode(inode, sattr); | 1670 | nfs_setattr_update_inode(inode, sattr); |
1670 | if (ctx != NULL) | ||
1671 | put_nfs_open_context(ctx); | ||
1672 | put_rpccred(cred); | ||
1673 | return status; | 1671 | return status; |
1674 | } | 1672 | } |
1675 | 1673 | ||
@@ -1897,17 +1895,16 @@ nfs4_proc_create(struct inode *dir, struct dentry *dentry, struct iattr *sattr, | |||
1897 | goto out; | 1895 | goto out; |
1898 | } | 1896 | } |
1899 | state = nfs4_do_open(dir, &path, flags, sattr, cred); | 1897 | state = nfs4_do_open(dir, &path, flags, sattr, cred); |
1900 | put_rpccred(cred); | ||
1901 | d_drop(dentry); | 1898 | d_drop(dentry); |
1902 | if (IS_ERR(state)) { | 1899 | if (IS_ERR(state)) { |
1903 | status = PTR_ERR(state); | 1900 | status = PTR_ERR(state); |
1904 | goto out; | 1901 | goto out_putcred; |
1905 | } | 1902 | } |
1906 | d_add(dentry, igrab(state->inode)); | 1903 | d_add(dentry, igrab(state->inode)); |
1907 | nfs_set_verifier(dentry, nfs_save_change_attribute(dir)); | 1904 | nfs_set_verifier(dentry, nfs_save_change_attribute(dir)); |
1908 | if (flags & O_EXCL) { | 1905 | if (flags & O_EXCL) { |
1909 | struct nfs_fattr fattr; | 1906 | struct nfs_fattr fattr; |
1910 | status = nfs4_do_setattr(state->inode, &fattr, sattr, state); | 1907 | status = nfs4_do_setattr(state->inode, cred, &fattr, sattr, state); |
1911 | if (status == 0) | 1908 | if (status == 0) |
1912 | nfs_setattr_update_inode(state->inode, sattr); | 1909 | nfs_setattr_update_inode(state->inode, sattr); |
1913 | nfs_post_op_update_inode(state->inode, &fattr); | 1910 | nfs_post_op_update_inode(state->inode, &fattr); |
@@ -1916,6 +1913,8 @@ nfs4_proc_create(struct inode *dir, struct dentry *dentry, struct iattr *sattr, | |||
1916 | status = nfs4_intent_set_file(nd, &path, state); | 1913 | status = nfs4_intent_set_file(nd, &path, state); |
1917 | else | 1914 | else |
1918 | nfs4_close_sync(&path, state, flags); | 1915 | nfs4_close_sync(&path, state, flags); |
1916 | out_putcred: | ||
1917 | put_rpccred(cred); | ||
1919 | out: | 1918 | out: |
1920 | return status; | 1919 | return status; |
1921 | } | 1920 | } |
@@ -2079,47 +2078,81 @@ static int nfs4_proc_link(struct inode *inode, struct inode *dir, struct qstr *n | |||
2079 | return err; | 2078 | return err; |
2080 | } | 2079 | } |
2081 | 2080 | ||
2081 | struct nfs4_createdata { | ||
2082 | struct rpc_message msg; | ||
2083 | struct nfs4_create_arg arg; | ||
2084 | struct nfs4_create_res res; | ||
2085 | struct nfs_fh fh; | ||
2086 | struct nfs_fattr fattr; | ||
2087 | struct nfs_fattr dir_fattr; | ||
2088 | }; | ||
2089 | |||
2090 | static struct nfs4_createdata *nfs4_alloc_createdata(struct inode *dir, | ||
2091 | struct qstr *name, struct iattr *sattr, u32 ftype) | ||
2092 | { | ||
2093 | struct nfs4_createdata *data; | ||
2094 | |||
2095 | data = kzalloc(sizeof(*data), GFP_KERNEL); | ||
2096 | if (data != NULL) { | ||
2097 | struct nfs_server *server = NFS_SERVER(dir); | ||
2098 | |||
2099 | data->msg.rpc_proc = &nfs4_procedures[NFSPROC4_CLNT_CREATE]; | ||
2100 | data->msg.rpc_argp = &data->arg; | ||
2101 | data->msg.rpc_resp = &data->res; | ||
2102 | data->arg.dir_fh = NFS_FH(dir); | ||
2103 | data->arg.server = server; | ||
2104 | data->arg.name = name; | ||
2105 | data->arg.attrs = sattr; | ||
2106 | data->arg.ftype = ftype; | ||
2107 | data->arg.bitmask = server->attr_bitmask; | ||
2108 | data->res.server = server; | ||
2109 | data->res.fh = &data->fh; | ||
2110 | data->res.fattr = &data->fattr; | ||
2111 | data->res.dir_fattr = &data->dir_fattr; | ||
2112 | nfs_fattr_init(data->res.fattr); | ||
2113 | nfs_fattr_init(data->res.dir_fattr); | ||
2114 | } | ||
2115 | return data; | ||
2116 | } | ||
2117 | |||
2118 | static int nfs4_do_create(struct inode *dir, struct dentry *dentry, struct nfs4_createdata *data) | ||
2119 | { | ||
2120 | int status = rpc_call_sync(NFS_CLIENT(dir), &data->msg, 0); | ||
2121 | if (status == 0) { | ||
2122 | update_changeattr(dir, &data->res.dir_cinfo); | ||
2123 | nfs_post_op_update_inode(dir, data->res.dir_fattr); | ||
2124 | status = nfs_instantiate(dentry, data->res.fh, data->res.fattr); | ||
2125 | } | ||
2126 | return status; | ||
2127 | } | ||
2128 | |||
2129 | static void nfs4_free_createdata(struct nfs4_createdata *data) | ||
2130 | { | ||
2131 | kfree(data); | ||
2132 | } | ||
2133 | |||
2082 | static int _nfs4_proc_symlink(struct inode *dir, struct dentry *dentry, | 2134 | static int _nfs4_proc_symlink(struct inode *dir, struct dentry *dentry, |
2083 | struct page *page, unsigned int len, struct iattr *sattr) | 2135 | struct page *page, unsigned int len, struct iattr *sattr) |
2084 | { | 2136 | { |
2085 | struct nfs_server *server = NFS_SERVER(dir); | 2137 | struct nfs4_createdata *data; |
2086 | struct nfs_fh fhandle; | 2138 | int status = -ENAMETOOLONG; |
2087 | struct nfs_fattr fattr, dir_fattr; | ||
2088 | struct nfs4_create_arg arg = { | ||
2089 | .dir_fh = NFS_FH(dir), | ||
2090 | .server = server, | ||
2091 | .name = &dentry->d_name, | ||
2092 | .attrs = sattr, | ||
2093 | .ftype = NF4LNK, | ||
2094 | .bitmask = server->attr_bitmask, | ||
2095 | }; | ||
2096 | struct nfs4_create_res res = { | ||
2097 | .server = server, | ||
2098 | .fh = &fhandle, | ||
2099 | .fattr = &fattr, | ||
2100 | .dir_fattr = &dir_fattr, | ||
2101 | }; | ||
2102 | struct rpc_message msg = { | ||
2103 | .rpc_proc = &nfs4_procedures[NFSPROC4_CLNT_SYMLINK], | ||
2104 | .rpc_argp = &arg, | ||
2105 | .rpc_resp = &res, | ||
2106 | }; | ||
2107 | int status; | ||
2108 | 2139 | ||
2109 | if (len > NFS4_MAXPATHLEN) | 2140 | if (len > NFS4_MAXPATHLEN) |
2110 | return -ENAMETOOLONG; | 2141 | goto out; |
2111 | 2142 | ||
2112 | arg.u.symlink.pages = &page; | 2143 | status = -ENOMEM; |
2113 | arg.u.symlink.len = len; | 2144 | data = nfs4_alloc_createdata(dir, &dentry->d_name, sattr, NF4LNK); |
2114 | nfs_fattr_init(&fattr); | 2145 | if (data == NULL) |
2115 | nfs_fattr_init(&dir_fattr); | 2146 | goto out; |
2147 | |||
2148 | data->msg.rpc_proc = &nfs4_procedures[NFSPROC4_CLNT_SYMLINK]; | ||
2149 | data->arg.u.symlink.pages = &page; | ||
2150 | data->arg.u.symlink.len = len; | ||
2116 | 2151 | ||
2117 | status = rpc_call_sync(NFS_CLIENT(dir), &msg, 0); | 2152 | status = nfs4_do_create(dir, dentry, data); |
2118 | if (!status) { | 2153 | |
2119 | update_changeattr(dir, &res.dir_cinfo); | 2154 | nfs4_free_createdata(data); |
2120 | nfs_post_op_update_inode(dir, res.dir_fattr); | 2155 | out: |
2121 | status = nfs_instantiate(dentry, &fhandle, &fattr); | ||
2122 | } | ||
2123 | return status; | 2156 | return status; |
2124 | } | 2157 | } |
2125 | 2158 | ||
@@ -2140,39 +2173,17 @@ static int nfs4_proc_symlink(struct inode *dir, struct dentry *dentry, | |||
2140 | static int _nfs4_proc_mkdir(struct inode *dir, struct dentry *dentry, | 2173 | static int _nfs4_proc_mkdir(struct inode *dir, struct dentry *dentry, |
2141 | struct iattr *sattr) | 2174 | struct iattr *sattr) |
2142 | { | 2175 | { |
2143 | struct nfs_server *server = NFS_SERVER(dir); | 2176 | struct nfs4_createdata *data; |
2144 | struct nfs_fh fhandle; | 2177 | int status = -ENOMEM; |
2145 | struct nfs_fattr fattr, dir_fattr; | ||
2146 | struct nfs4_create_arg arg = { | ||
2147 | .dir_fh = NFS_FH(dir), | ||
2148 | .server = server, | ||
2149 | .name = &dentry->d_name, | ||
2150 | .attrs = sattr, | ||
2151 | .ftype = NF4DIR, | ||
2152 | .bitmask = server->attr_bitmask, | ||
2153 | }; | ||
2154 | struct nfs4_create_res res = { | ||
2155 | .server = server, | ||
2156 | .fh = &fhandle, | ||
2157 | .fattr = &fattr, | ||
2158 | .dir_fattr = &dir_fattr, | ||
2159 | }; | ||
2160 | struct rpc_message msg = { | ||
2161 | .rpc_proc = &nfs4_procedures[NFSPROC4_CLNT_CREATE], | ||
2162 | .rpc_argp = &arg, | ||
2163 | .rpc_resp = &res, | ||
2164 | }; | ||
2165 | int status; | ||
2166 | 2178 | ||
2167 | nfs_fattr_init(&fattr); | 2179 | data = nfs4_alloc_createdata(dir, &dentry->d_name, sattr, NF4DIR); |
2168 | nfs_fattr_init(&dir_fattr); | 2180 | if (data == NULL) |
2169 | 2181 | goto out; | |
2170 | status = rpc_call_sync(NFS_CLIENT(dir), &msg, 0); | 2182 | |
2171 | if (!status) { | 2183 | status = nfs4_do_create(dir, dentry, data); |
2172 | update_changeattr(dir, &res.dir_cinfo); | 2184 | |
2173 | nfs_post_op_update_inode(dir, res.dir_fattr); | 2185 | nfs4_free_createdata(data); |
2174 | status = nfs_instantiate(dentry, &fhandle, &fattr); | 2186 | out: |
2175 | } | ||
2176 | return status; | 2187 | return status; |
2177 | } | 2188 | } |
2178 | 2189 | ||
@@ -2242,56 +2253,34 @@ static int nfs4_proc_readdir(struct dentry *dentry, struct rpc_cred *cred, | |||
2242 | static int _nfs4_proc_mknod(struct inode *dir, struct dentry *dentry, | 2253 | static int _nfs4_proc_mknod(struct inode *dir, struct dentry *dentry, |
2243 | struct iattr *sattr, dev_t rdev) | 2254 | struct iattr *sattr, dev_t rdev) |
2244 | { | 2255 | { |
2245 | struct nfs_server *server = NFS_SERVER(dir); | 2256 | struct nfs4_createdata *data; |
2246 | struct nfs_fh fh; | 2257 | int mode = sattr->ia_mode; |
2247 | struct nfs_fattr fattr, dir_fattr; | 2258 | int status = -ENOMEM; |
2248 | struct nfs4_create_arg arg = { | ||
2249 | .dir_fh = NFS_FH(dir), | ||
2250 | .server = server, | ||
2251 | .name = &dentry->d_name, | ||
2252 | .attrs = sattr, | ||
2253 | .bitmask = server->attr_bitmask, | ||
2254 | }; | ||
2255 | struct nfs4_create_res res = { | ||
2256 | .server = server, | ||
2257 | .fh = &fh, | ||
2258 | .fattr = &fattr, | ||
2259 | .dir_fattr = &dir_fattr, | ||
2260 | }; | ||
2261 | struct rpc_message msg = { | ||
2262 | .rpc_proc = &nfs4_procedures[NFSPROC4_CLNT_CREATE], | ||
2263 | .rpc_argp = &arg, | ||
2264 | .rpc_resp = &res, | ||
2265 | }; | ||
2266 | int status; | ||
2267 | int mode = sattr->ia_mode; | ||
2268 | |||
2269 | nfs_fattr_init(&fattr); | ||
2270 | nfs_fattr_init(&dir_fattr); | ||
2271 | 2259 | ||
2272 | BUG_ON(!(sattr->ia_valid & ATTR_MODE)); | 2260 | BUG_ON(!(sattr->ia_valid & ATTR_MODE)); |
2273 | BUG_ON(!S_ISFIFO(mode) && !S_ISBLK(mode) && !S_ISCHR(mode) && !S_ISSOCK(mode)); | 2261 | BUG_ON(!S_ISFIFO(mode) && !S_ISBLK(mode) && !S_ISCHR(mode) && !S_ISSOCK(mode)); |
2262 | |||
2263 | data = nfs4_alloc_createdata(dir, &dentry->d_name, sattr, NF4SOCK); | ||
2264 | if (data == NULL) | ||
2265 | goto out; | ||
2266 | |||
2274 | if (S_ISFIFO(mode)) | 2267 | if (S_ISFIFO(mode)) |
2275 | arg.ftype = NF4FIFO; | 2268 | data->arg.ftype = NF4FIFO; |
2276 | else if (S_ISBLK(mode)) { | 2269 | else if (S_ISBLK(mode)) { |
2277 | arg.ftype = NF4BLK; | 2270 | data->arg.ftype = NF4BLK; |
2278 | arg.u.device.specdata1 = MAJOR(rdev); | 2271 | data->arg.u.device.specdata1 = MAJOR(rdev); |
2279 | arg.u.device.specdata2 = MINOR(rdev); | 2272 | data->arg.u.device.specdata2 = MINOR(rdev); |
2280 | } | 2273 | } |
2281 | else if (S_ISCHR(mode)) { | 2274 | else if (S_ISCHR(mode)) { |
2282 | arg.ftype = NF4CHR; | 2275 | data->arg.ftype = NF4CHR; |
2283 | arg.u.device.specdata1 = MAJOR(rdev); | 2276 | data->arg.u.device.specdata1 = MAJOR(rdev); |
2284 | arg.u.device.specdata2 = MINOR(rdev); | 2277 | data->arg.u.device.specdata2 = MINOR(rdev); |
2285 | } | 2278 | } |
2286 | else | ||
2287 | arg.ftype = NF4SOCK; | ||
2288 | 2279 | ||
2289 | status = rpc_call_sync(NFS_CLIENT(dir), &msg, 0); | 2280 | status = nfs4_do_create(dir, dentry, data); |
2290 | if (status == 0) { | 2281 | |
2291 | update_changeattr(dir, &res.dir_cinfo); | 2282 | nfs4_free_createdata(data); |
2292 | nfs_post_op_update_inode(dir, res.dir_fattr); | 2283 | out: |
2293 | status = nfs_instantiate(dentry, &fh, &fattr); | ||
2294 | } | ||
2295 | return status; | 2284 | return status; |
2296 | } | 2285 | } |
2297 | 2286 | ||
@@ -2706,6 +2695,8 @@ static ssize_t nfs4_proc_get_acl(struct inode *inode, void *buf, size_t buflen) | |||
2706 | ret = nfs_revalidate_inode(server, inode); | 2695 | ret = nfs_revalidate_inode(server, inode); |
2707 | if (ret < 0) | 2696 | if (ret < 0) |
2708 | return ret; | 2697 | return ret; |
2698 | if (NFS_I(inode)->cache_validity & NFS_INO_INVALID_ACL) | ||
2699 | nfs_zap_acl_cache(inode); | ||
2709 | ret = nfs4_read_cached_acl(inode, buf, buflen); | 2700 | ret = nfs4_read_cached_acl(inode, buf, buflen); |
2710 | if (ret != -ENOENT) | 2701 | if (ret != -ENOENT) |
2711 | return ret; | 2702 | return ret; |
@@ -2733,7 +2724,8 @@ static int __nfs4_proc_set_acl(struct inode *inode, const void *buf, size_t bufl | |||
2733 | nfs_inode_return_delegation(inode); | 2724 | nfs_inode_return_delegation(inode); |
2734 | buf_to_pages(buf, buflen, arg.acl_pages, &arg.acl_pgbase); | 2725 | buf_to_pages(buf, buflen, arg.acl_pages, &arg.acl_pgbase); |
2735 | ret = rpc_call_sync(NFS_CLIENT(inode), &msg, 0); | 2726 | ret = rpc_call_sync(NFS_CLIENT(inode), &msg, 0); |
2736 | nfs_zap_caches(inode); | 2727 | nfs_access_zap_cache(inode); |
2728 | nfs_zap_acl_cache(inode); | ||
2737 | return ret; | 2729 | return ret; |
2738 | } | 2730 | } |
2739 | 2731 | ||
@@ -2767,8 +2759,7 @@ nfs4_async_handle_error(struct rpc_task *task, const struct nfs_server *server) | |||
2767 | task->tk_status = 0; | 2759 | task->tk_status = 0; |
2768 | return -EAGAIN; | 2760 | return -EAGAIN; |
2769 | case -NFS4ERR_DELAY: | 2761 | case -NFS4ERR_DELAY: |
2770 | nfs_inc_server_stats((struct nfs_server *) server, | 2762 | nfs_inc_server_stats(server, NFSIOS_DELAY); |
2771 | NFSIOS_DELAY); | ||
2772 | case -NFS4ERR_GRACE: | 2763 | case -NFS4ERR_GRACE: |
2773 | rpc_delay(task, NFS4_POLL_RETRY_MAX); | 2764 | rpc_delay(task, NFS4_POLL_RETRY_MAX); |
2774 | task->tk_status = 0; | 2765 | task->tk_status = 0; |
@@ -2933,7 +2924,7 @@ static int _nfs4_proc_setclientid_confirm(struct nfs_client *clp, struct rpc_cre | |||
2933 | 2924 | ||
2934 | int nfs4_proc_setclientid_confirm(struct nfs_client *clp, struct rpc_cred *cred) | 2925 | int nfs4_proc_setclientid_confirm(struct nfs_client *clp, struct rpc_cred *cred) |
2935 | { | 2926 | { |
2936 | long timeout; | 2927 | long timeout = 0; |
2937 | int err; | 2928 | int err; |
2938 | do { | 2929 | do { |
2939 | err = _nfs4_proc_setclientid_confirm(clp, cred); | 2930 | err = _nfs4_proc_setclientid_confirm(clp, cred); |
@@ -3725,8 +3716,6 @@ const struct nfs_rpc_ops nfs_v4_clientops = { | |||
3725 | .write_done = nfs4_write_done, | 3716 | .write_done = nfs4_write_done, |
3726 | .commit_setup = nfs4_proc_commit_setup, | 3717 | .commit_setup = nfs4_proc_commit_setup, |
3727 | .commit_done = nfs4_commit_done, | 3718 | .commit_done = nfs4_commit_done, |
3728 | .file_open = nfs_open, | ||
3729 | .file_release = nfs_release, | ||
3730 | .lock = nfs4_proc_lock, | 3719 | .lock = nfs4_proc_lock, |
3731 | .clear_acl_cache = nfs4_zap_acl_attr, | 3720 | .clear_acl_cache = nfs4_zap_acl_attr, |
3732 | }; | 3721 | }; |