Skip to content

Commit 6a6be47

Browse files
committed
Merge branch 'nfs-for-2.6.35' of git://git.linux-nfs.org/projects/trondmy/nfs-2.6
* 'nfs-for-2.6.35' of git://git.linux-nfs.org/projects/trondmy/nfs-2.6: (78 commits) SUNRPC: Don't spam gssd with upcall requests when the kerberos key expired SUNRPC: Reorder the struct rpc_task fields SUNRPC: Remove the 'tk_magic' debugging field SUNRPC: Move the task->tk_bytes_sent and tk_rtt to struct rpc_rqst NFS: Don't call iput() in nfs_access_cache_shrinker NFS: Clean up nfs_access_zap_cache() NFS: Don't run nfs_access_cache_shrinker() when the mask is GFP_NOFS SUNRPC: Ensure rpcauth_prune_expired() respects the nr_to_scan parameter SUNRPC: Ensure memory shrinker doesn't waste time in rpcauth_prune_expired() SUNRPC: Dont run rpcauth_cache_shrinker() when gfp_mask is GFP_NOFS NFS: Read requests can use GFP_KERNEL. NFS: Clean up nfs_create_request() NFS: Don't use GFP_KERNEL in rpcsec_gss downcalls NFSv4: Don't use GFP_KERNEL allocations in state recovery SUNRPC: Fix xs_setup_bc_tcp() SUNRPC: Replace jiffies-based metrics with ktime-based metrics ktime: introduce ktime_to_ms() SUNRPC: RPC metrics and RTT estimator should use same RTT value NFS: Calldata for nfs4_renew_done() NFS: Squelch compiler warning in nfs_add_server_stats() ...
2 parents 98c89cd + 126e216 commit 6a6be47

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

56 files changed

+3378
-853
lines changed

fs/nfs/client.c

Lines changed: 41 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -934,7 +934,6 @@ static int nfs_probe_fsinfo(struct nfs_server *server, struct nfs_fh *mntfh, str
934934
}
935935

936936
fsinfo.fattr = fattr;
937-
nfs_fattr_init(fattr);
938937
error = clp->rpc_ops->fsinfo(server, mntfh, &fsinfo);
939938
if (error < 0)
940939
goto out_error;
@@ -1047,13 +1046,18 @@ struct nfs_server *nfs_create_server(const struct nfs_parsed_mount_data *data,
10471046
struct nfs_fh *mntfh)
10481047
{
10491048
struct nfs_server *server;
1050-
struct nfs_fattr fattr;
1049+
struct nfs_fattr *fattr;
10511050
int error;
10521051

10531052
server = nfs_alloc_server();
10541053
if (!server)
10551054
return ERR_PTR(-ENOMEM);
10561055

1056+
error = -ENOMEM;
1057+
fattr = nfs_alloc_fattr();
1058+
if (fattr == NULL)
1059+
goto error;
1060+
10571061
/* Get a client representation */
10581062
error = nfs_init_server(server, data);
10591063
if (error < 0)
@@ -1064,7 +1068,7 @@ struct nfs_server *nfs_create_server(const struct nfs_parsed_mount_data *data,
10641068
BUG_ON(!server->nfs_client->rpc_ops->file_inode_ops);
10651069

10661070
/* Probe the root fh to retrieve its FSID */
1067-
error = nfs_probe_fsinfo(server, mntfh, &fattr);
1071+
error = nfs_probe_fsinfo(server, mntfh, fattr);
10681072
if (error < 0)
10691073
goto error;
10701074
if (server->nfs_client->rpc_ops->version == 3) {
@@ -1077,14 +1081,14 @@ struct nfs_server *nfs_create_server(const struct nfs_parsed_mount_data *data,
10771081
server->namelen = NFS2_MAXNAMLEN;
10781082
}
10791083

1080-
if (!(fattr.valid & NFS_ATTR_FATTR)) {
1081-
error = server->nfs_client->rpc_ops->getattr(server, mntfh, &fattr);
1084+
if (!(fattr->valid & NFS_ATTR_FATTR)) {
1085+
error = server->nfs_client->rpc_ops->getattr(server, mntfh, fattr);
10821086
if (error < 0) {
10831087
dprintk("nfs_create_server: getattr error = %d\n", -error);
10841088
goto error;
10851089
}
10861090
}
1087-
memcpy(&server->fsid, &fattr.fsid, sizeof(server->fsid));
1091+
memcpy(&server->fsid, &fattr->fsid, sizeof(server->fsid));
10881092

10891093
dprintk("Server FSID: %llx:%llx\n",
10901094
(unsigned long long) server->fsid.major,
@@ -1096,9 +1100,11 @@ struct nfs_server *nfs_create_server(const struct nfs_parsed_mount_data *data,
10961100
spin_unlock(&nfs_client_lock);
10971101

10981102
server->mount_time = jiffies;
1103+
nfs_free_fattr(fattr);
10991104
return server;
11001105

11011106
error:
1107+
nfs_free_fattr(fattr);
11021108
nfs_free_server(server);
11031109
return ERR_PTR(error);
11041110
}
@@ -1340,7 +1346,7 @@ static int nfs4_init_server(struct nfs_server *server,
13401346
struct nfs_server *nfs4_create_server(const struct nfs_parsed_mount_data *data,
13411347
struct nfs_fh *mntfh)
13421348
{
1343-
struct nfs_fattr fattr;
1349+
struct nfs_fattr *fattr;
13441350
struct nfs_server *server;
13451351
int error;
13461352

@@ -1350,6 +1356,11 @@ struct nfs_server *nfs4_create_server(const struct nfs_parsed_mount_data *data,
13501356
if (!server)
13511357
return ERR_PTR(-ENOMEM);
13521358

1359+
error = -ENOMEM;
1360+
fattr = nfs_alloc_fattr();
1361+
if (fattr == NULL)
1362+
goto error;
1363+
13531364
/* set up the general RPC client */
13541365
error = nfs4_init_server(server, data);
13551366
if (error < 0)
@@ -1364,7 +1375,7 @@ struct nfs_server *nfs4_create_server(const struct nfs_parsed_mount_data *data,
13641375
goto error;
13651376

13661377
/* Probe the root fh to retrieve its FSID */
1367-
error = nfs4_path_walk(server, mntfh, data->nfs_server.export_path);
1378+
error = nfs4_get_rootfh(server, mntfh);
13681379
if (error < 0)
13691380
goto error;
13701381

@@ -1375,7 +1386,7 @@ struct nfs_server *nfs4_create_server(const struct nfs_parsed_mount_data *data,
13751386

13761387
nfs4_session_set_rwsize(server);
13771388

1378-
error = nfs_probe_fsinfo(server, mntfh, &fattr);
1389+
error = nfs_probe_fsinfo(server, mntfh, fattr);
13791390
if (error < 0)
13801391
goto error;
13811392

@@ -1389,9 +1400,11 @@ struct nfs_server *nfs4_create_server(const struct nfs_parsed_mount_data *data,
13891400

13901401
server->mount_time = jiffies;
13911402
dprintk("<-- nfs4_create_server() = %p\n", server);
1403+
nfs_free_fattr(fattr);
13921404
return server;
13931405

13941406
error:
1407+
nfs_free_fattr(fattr);
13951408
nfs_free_server(server);
13961409
dprintk("<-- nfs4_create_server() = error %d\n", error);
13971410
return ERR_PTR(error);
@@ -1405,7 +1418,7 @@ struct nfs_server *nfs4_create_referral_server(struct nfs_clone_mount *data,
14051418
{
14061419
struct nfs_client *parent_client;
14071420
struct nfs_server *server, *parent_server;
1408-
struct nfs_fattr fattr;
1421+
struct nfs_fattr *fattr;
14091422
int error;
14101423

14111424
dprintk("--> nfs4_create_referral_server()\n");
@@ -1414,6 +1427,11 @@ struct nfs_server *nfs4_create_referral_server(struct nfs_clone_mount *data,
14141427
if (!server)
14151428
return ERR_PTR(-ENOMEM);
14161429

1430+
error = -ENOMEM;
1431+
fattr = nfs_alloc_fattr();
1432+
if (fattr == NULL)
1433+
goto error;
1434+
14171435
parent_server = NFS_SB(data->sb);
14181436
parent_client = parent_server->nfs_client;
14191437

@@ -1443,12 +1461,12 @@ struct nfs_server *nfs4_create_referral_server(struct nfs_clone_mount *data,
14431461
BUG_ON(!server->nfs_client->rpc_ops->file_inode_ops);
14441462

14451463
/* Probe the root fh to retrieve its FSID and filehandle */
1446-
error = nfs4_path_walk(server, mntfh, data->mnt_path);
1464+
error = nfs4_get_rootfh(server, mntfh);
14471465
if (error < 0)
14481466
goto error;
14491467

14501468
/* probe the filesystem info for this server filesystem */
1451-
error = nfs_probe_fsinfo(server, mntfh, &fattr);
1469+
error = nfs_probe_fsinfo(server, mntfh, fattr);
14521470
if (error < 0)
14531471
goto error;
14541472

@@ -1466,10 +1484,12 @@ struct nfs_server *nfs4_create_referral_server(struct nfs_clone_mount *data,
14661484

14671485
server->mount_time = jiffies;
14681486

1487+
nfs_free_fattr(fattr);
14691488
dprintk("<-- nfs_create_referral_server() = %p\n", server);
14701489
return server;
14711490

14721491
error:
1492+
nfs_free_fattr(fattr);
14731493
nfs_free_server(server);
14741494
dprintk("<-- nfs4_create_referral_server() = error %d\n", error);
14751495
return ERR_PTR(error);
@@ -1485,7 +1505,7 @@ struct nfs_server *nfs_clone_server(struct nfs_server *source,
14851505
struct nfs_fattr *fattr)
14861506
{
14871507
struct nfs_server *server;
1488-
struct nfs_fattr fattr_fsinfo;
1508+
struct nfs_fattr *fattr_fsinfo;
14891509
int error;
14901510

14911511
dprintk("--> nfs_clone_server(,%llx:%llx,)\n",
@@ -1496,6 +1516,11 @@ struct nfs_server *nfs_clone_server(struct nfs_server *source,
14961516
if (!server)
14971517
return ERR_PTR(-ENOMEM);
14981518

1519+
error = -ENOMEM;
1520+
fattr_fsinfo = nfs_alloc_fattr();
1521+
if (fattr_fsinfo == NULL)
1522+
goto out_free_server;
1523+
14991524
/* Copy data from the source */
15001525
server->nfs_client = source->nfs_client;
15011526
atomic_inc(&server->nfs_client->cl_count);
@@ -1512,7 +1537,7 @@ struct nfs_server *nfs_clone_server(struct nfs_server *source,
15121537
nfs_init_server_aclclient(server);
15131538

15141539
/* probe the filesystem info for this server filesystem */
1515-
error = nfs_probe_fsinfo(server, fh, &fattr_fsinfo);
1540+
error = nfs_probe_fsinfo(server, fh, fattr_fsinfo);
15161541
if (error < 0)
15171542
goto out_free_server;
15181543

@@ -1534,10 +1559,12 @@ struct nfs_server *nfs_clone_server(struct nfs_server *source,
15341559

15351560
server->mount_time = jiffies;
15361561

1562+
nfs_free_fattr(fattr_fsinfo);
15371563
dprintk("<-- nfs_clone_server() = %p\n", server);
15381564
return server;
15391565

15401566
out_free_server:
1567+
nfs_free_fattr(fattr_fsinfo);
15411568
nfs_free_server(server);
15421569
dprintk("<-- nfs_clone_server() = error %d\n", error);
15431570
return ERR_PTR(error);

fs/nfs/delegation.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -213,7 +213,7 @@ int nfs_inode_set_delegation(struct inode *inode, struct rpc_cred *cred, struct
213213
struct nfs_delegation *freeme = NULL;
214214
int status = 0;
215215

216-
delegation = kmalloc(sizeof(*delegation), GFP_KERNEL);
216+
delegation = kmalloc(sizeof(*delegation), GFP_NOFS);
217217
if (delegation == NULL)
218218
return -ENOMEM;
219219
memcpy(delegation->stateid.data, res->delegation.data,

0 commit comments

Comments
 (0)