diff options
author | Trond Myklebust <Trond.Myklebust@netapp.com> | 2010-04-16 16:22:50 -0400 |
---|---|---|
committer | Trond Myklebust <Trond.Myklebust@netapp.com> | 2010-05-14 15:09:26 -0400 |
commit | d346890bea062d697e24fb4e34591428021ad011 (patch) | |
tree | 9d644b18500a146c51c6e0d2f68bdb636f67fa11 /fs/nfs/nfs4proc.c | |
parent | 3b14d6542d7efbec614277d1cd7d6f5b5a2be9ca (diff) |
NFS: Reduce stack footprint of nfs_proc_remove()
Signed-off-by: Trond Myklebust <Trond.Myklebust@netapp.com>
Diffstat (limited to 'fs/nfs/nfs4proc.c')
-rw-r--r-- | fs/nfs/nfs4proc.c | 13 |
1 files changed, 9 insertions, 4 deletions
diff --git a/fs/nfs/nfs4proc.c b/fs/nfs/nfs4proc.c index 0ffd4cfd3b1f..d0cb6e163320 100644 --- a/fs/nfs/nfs4proc.c +++ b/fs/nfs/nfs4proc.c | |||
@@ -2599,14 +2599,19 @@ static int _nfs4_proc_remove(struct inode *dir, struct qstr *name) | |||
2599 | .rpc_argp = &args, | 2599 | .rpc_argp = &args, |
2600 | .rpc_resp = &res, | 2600 | .rpc_resp = &res, |
2601 | }; | 2601 | }; |
2602 | int status; | 2602 | int status = -ENOMEM; |
2603 | |||
2604 | res.dir_attr = nfs_alloc_fattr(); | ||
2605 | if (res.dir_attr == NULL) | ||
2606 | goto out; | ||
2603 | 2607 | ||
2604 | nfs_fattr_init(&res.dir_attr); | ||
2605 | status = nfs4_call_sync(server, &msg, &args, &res, 1); | 2608 | status = nfs4_call_sync(server, &msg, &args, &res, 1); |
2606 | if (status == 0) { | 2609 | if (status == 0) { |
2607 | update_changeattr(dir, &res.cinfo); | 2610 | update_changeattr(dir, &res.cinfo); |
2608 | nfs_post_op_update_inode(dir, &res.dir_attr); | 2611 | nfs_post_op_update_inode(dir, res.dir_attr); |
2609 | } | 2612 | } |
2613 | nfs_free_fattr(res.dir_attr); | ||
2614 | out: | ||
2610 | return status; | 2615 | return status; |
2611 | } | 2616 | } |
2612 | 2617 | ||
@@ -2641,7 +2646,7 @@ static int nfs4_proc_unlink_done(struct rpc_task *task, struct inode *dir) | |||
2641 | if (nfs4_async_handle_error(task, res->server, NULL) == -EAGAIN) | 2646 | if (nfs4_async_handle_error(task, res->server, NULL) == -EAGAIN) |
2642 | return 0; | 2647 | return 0; |
2643 | update_changeattr(dir, &res->cinfo); | 2648 | update_changeattr(dir, &res->cinfo); |
2644 | nfs_post_op_update_inode(dir, &res->dir_attr); | 2649 | nfs_post_op_update_inode(dir, res->dir_attr); |
2645 | return 1; | 2650 | return 1; |
2646 | } | 2651 | } |
2647 | 2652 | ||