diff options
author | Trond Myklebust <Trond.Myklebust@netapp.com> | 2008-02-29 02:48:05 -0500 |
---|---|---|
committer | Trond Myklebust <Trond.Myklebust@netapp.com> | 2008-02-29 02:48:05 -0500 |
commit | cdd0972945dbcb8ea24db365d9b0e100af2a27bb (patch) | |
tree | d41204db20ccc81cecf99a332e2fa764075e8637 | |
parent | 5e4424af9a1f062c6451681dff24a26e27741cc6 (diff) | |
parent | cbc20059259edee4ea24c923e6627c394830c972 (diff) |
Merge branch 'cleanups' into next
-rw-r--r-- | fs/nfs/write.c | 34 | ||||
-rw-r--r-- | include/linux/sunrpc/clnt.h | 9 | ||||
-rw-r--r-- | net/sunrpc/clnt.c | 4 |
3 files changed, 26 insertions, 21 deletions
diff --git a/fs/nfs/write.c b/fs/nfs/write.c index 30513029c00c..1667e3984418 100644 --- a/fs/nfs/write.c +++ b/fs/nfs/write.c | |||
@@ -351,15 +351,13 @@ int nfs_writepages(struct address_space *mapping, struct writeback_control *wbc) | |||
351 | /* | 351 | /* |
352 | * Insert a write request into an inode | 352 | * Insert a write request into an inode |
353 | */ | 353 | */ |
354 | static int nfs_inode_add_request(struct inode *inode, struct nfs_page *req) | 354 | static void nfs_inode_add_request(struct inode *inode, struct nfs_page *req) |
355 | { | 355 | { |
356 | struct nfs_inode *nfsi = NFS_I(inode); | 356 | struct nfs_inode *nfsi = NFS_I(inode); |
357 | int error; | 357 | int error; |
358 | 358 | ||
359 | error = radix_tree_insert(&nfsi->nfs_page_tree, req->wb_index, req); | 359 | error = radix_tree_insert(&nfsi->nfs_page_tree, req->wb_index, req); |
360 | BUG_ON(error == -EEXIST); | 360 | BUG_ON(error); |
361 | if (error) | ||
362 | return error; | ||
363 | if (!nfsi->npages) { | 361 | if (!nfsi->npages) { |
364 | igrab(inode); | 362 | igrab(inode); |
365 | if (nfs_have_delegation(inode, FMODE_WRITE)) | 363 | if (nfs_have_delegation(inode, FMODE_WRITE)) |
@@ -369,8 +367,8 @@ static int nfs_inode_add_request(struct inode *inode, struct nfs_page *req) | |||
369 | set_page_private(req->wb_page, (unsigned long)req); | 367 | set_page_private(req->wb_page, (unsigned long)req); |
370 | nfsi->npages++; | 368 | nfsi->npages++; |
371 | kref_get(&req->wb_kref); | 369 | kref_get(&req->wb_kref); |
372 | radix_tree_tag_set(&nfsi->nfs_page_tree, req->wb_index, NFS_PAGE_TAG_LOCKED); | 370 | radix_tree_tag_set(&nfsi->nfs_page_tree, req->wb_index, |
373 | return 0; | 371 | NFS_PAGE_TAG_LOCKED); |
374 | } | 372 | } |
375 | 373 | ||
376 | /* | 374 | /* |
@@ -582,6 +580,13 @@ static struct nfs_page * nfs_update_request(struct nfs_open_context* ctx, | |||
582 | /* Loop over all inode entries and see if we find | 580 | /* Loop over all inode entries and see if we find |
583 | * A request for the page we wish to update | 581 | * A request for the page we wish to update |
584 | */ | 582 | */ |
583 | if (new) { | ||
584 | if (radix_tree_preload(GFP_NOFS)) { | ||
585 | nfs_release_request(new); | ||
586 | return ERR_PTR(-ENOMEM); | ||
587 | } | ||
588 | } | ||
589 | |||
585 | spin_lock(&inode->i_lock); | 590 | spin_lock(&inode->i_lock); |
586 | req = nfs_page_find_request_locked(page); | 591 | req = nfs_page_find_request_locked(page); |
587 | if (req) { | 592 | if (req) { |
@@ -592,28 +597,27 @@ static struct nfs_page * nfs_update_request(struct nfs_open_context* ctx, | |||
592 | error = nfs_wait_on_request(req); | 597 | error = nfs_wait_on_request(req); |
593 | nfs_release_request(req); | 598 | nfs_release_request(req); |
594 | if (error < 0) { | 599 | if (error < 0) { |
595 | if (new) | 600 | if (new) { |
601 | radix_tree_preload_end(); | ||
596 | nfs_release_request(new); | 602 | nfs_release_request(new); |
603 | } | ||
597 | return ERR_PTR(error); | 604 | return ERR_PTR(error); |
598 | } | 605 | } |
599 | continue; | 606 | continue; |
600 | } | 607 | } |
601 | spin_unlock(&inode->i_lock); | 608 | spin_unlock(&inode->i_lock); |
602 | if (new) | 609 | if (new) { |
610 | radix_tree_preload_end(); | ||
603 | nfs_release_request(new); | 611 | nfs_release_request(new); |
612 | } | ||
604 | break; | 613 | break; |
605 | } | 614 | } |
606 | 615 | ||
607 | if (new) { | 616 | if (new) { |
608 | int error; | ||
609 | nfs_lock_request_dontget(new); | 617 | nfs_lock_request_dontget(new); |
610 | error = nfs_inode_add_request(inode, new); | 618 | nfs_inode_add_request(inode, new); |
611 | if (error) { | ||
612 | spin_unlock(&inode->i_lock); | ||
613 | nfs_unlock_request(new); | ||
614 | return ERR_PTR(error); | ||
615 | } | ||
616 | spin_unlock(&inode->i_lock); | 619 | spin_unlock(&inode->i_lock); |
620 | radix_tree_preload_end(); | ||
617 | req = new; | 621 | req = new; |
618 | goto zero_page; | 622 | goto zero_page; |
619 | } | 623 | } |
diff --git a/include/linux/sunrpc/clnt.h b/include/linux/sunrpc/clnt.h index 129a86e25d29..6fff7f82ef12 100644 --- a/include/linux/sunrpc/clnt.h +++ b/include/linux/sunrpc/clnt.h | |||
@@ -127,11 +127,12 @@ int rpcb_getport_sync(struct sockaddr_in *, u32, u32, int); | |||
127 | void rpcb_getport_async(struct rpc_task *); | 127 | void rpcb_getport_async(struct rpc_task *); |
128 | 128 | ||
129 | void rpc_call_start(struct rpc_task *); | 129 | void rpc_call_start(struct rpc_task *); |
130 | int rpc_call_async(struct rpc_clnt *clnt, struct rpc_message *msg, | 130 | int rpc_call_async(struct rpc_clnt *clnt, |
131 | int flags, const struct rpc_call_ops *tk_ops, | 131 | const struct rpc_message *msg, int flags, |
132 | const struct rpc_call_ops *tk_ops, | ||
132 | void *calldata); | 133 | void *calldata); |
133 | int rpc_call_sync(struct rpc_clnt *clnt, struct rpc_message *msg, | 134 | int rpc_call_sync(struct rpc_clnt *clnt, |
134 | int flags); | 135 | const struct rpc_message *msg, int flags); |
135 | struct rpc_task *rpc_call_null(struct rpc_clnt *clnt, struct rpc_cred *cred, | 136 | struct rpc_task *rpc_call_null(struct rpc_clnt *clnt, struct rpc_cred *cred, |
136 | int flags); | 137 | int flags); |
137 | void rpc_restart_call(struct rpc_task *); | 138 | void rpc_restart_call(struct rpc_task *); |
diff --git a/net/sunrpc/clnt.c b/net/sunrpc/clnt.c index 0e209af39797..ea14314331b0 100644 --- a/net/sunrpc/clnt.c +++ b/net/sunrpc/clnt.c | |||
@@ -548,7 +548,7 @@ EXPORT_SYMBOL_GPL(rpc_run_task); | |||
548 | * @msg: RPC call parameters | 548 | * @msg: RPC call parameters |
549 | * @flags: RPC call flags | 549 | * @flags: RPC call flags |
550 | */ | 550 | */ |
551 | int rpc_call_sync(struct rpc_clnt *clnt, struct rpc_message *msg, int flags) | 551 | int rpc_call_sync(struct rpc_clnt *clnt, const struct rpc_message *msg, int flags) |
552 | { | 552 | { |
553 | struct rpc_task *task; | 553 | struct rpc_task *task; |
554 | struct rpc_task_setup task_setup_data = { | 554 | struct rpc_task_setup task_setup_data = { |
@@ -579,7 +579,7 @@ EXPORT_SYMBOL_GPL(rpc_call_sync); | |||
579 | * @data: user call data | 579 | * @data: user call data |
580 | */ | 580 | */ |
581 | int | 581 | int |
582 | rpc_call_async(struct rpc_clnt *clnt, struct rpc_message *msg, int flags, | 582 | rpc_call_async(struct rpc_clnt *clnt, const struct rpc_message *msg, int flags, |
583 | const struct rpc_call_ops *tk_ops, void *data) | 583 | const struct rpc_call_ops *tk_ops, void *data) |
584 | { | 584 | { |
585 | struct rpc_task *task; | 585 | struct rpc_task *task; |