diff options
author | Jens Axboe <jens.axboe@oracle.com> | 2007-06-05 05:05:11 -0400 |
---|---|---|
committer | Jens Axboe <jens.axboe@oracle.com> | 2007-06-08 02:33:59 -0400 |
commit | 20d698db67059a63d217030dfd02872cb5f88dfb (patch) | |
tree | 7bac40911367b11ac57c51345d09df8a78b46656 | |
parent | 17374ff1aa9ce2a0597416a16729474b538af443 (diff) |
splice: move balance_dirty_pages_ratelimited() outside of splice actor
I've seen inode related deadlocks, so move this call outside of the
actor itself, which may hold the inode lock.
Signed-off-by: Jens Axboe <jens.axboe@oracle.com>
-rw-r--r-- | fs/splice.c | 3 |
1 files changed, 2 insertions, 1 deletions
diff --git a/fs/splice.c b/fs/splice.c index b78a7f057be1..6349d3189e3f 100644 --- a/fs/splice.c +++ b/fs/splice.c | |||
@@ -652,7 +652,6 @@ find_page: | |||
652 | * accessed, we are now done! | 652 | * accessed, we are now done! |
653 | */ | 653 | */ |
654 | mark_page_accessed(page); | 654 | mark_page_accessed(page); |
655 | balance_dirty_pages_ratelimited(mapping); | ||
656 | out: | 655 | out: |
657 | page_cache_release(page); | 656 | page_cache_release(page); |
658 | unlock_page(page); | 657 | unlock_page(page); |
@@ -823,6 +822,7 @@ generic_file_splice_write_nolock(struct pipe_inode_info *pipe, struct file *out, | |||
823 | if (err) | 822 | if (err) |
824 | ret = err; | 823 | ret = err; |
825 | } | 824 | } |
825 | balance_dirty_pages_ratelimited(mapping); | ||
826 | } | 826 | } |
827 | 827 | ||
828 | return ret; | 828 | return ret; |
@@ -876,6 +876,7 @@ generic_file_splice_write(struct pipe_inode_info *pipe, struct file *out, | |||
876 | if (err) | 876 | if (err) |
877 | ret = err; | 877 | ret = err; |
878 | } | 878 | } |
879 | balance_dirty_pages_ratelimited(mapping); | ||
879 | } | 880 | } |
880 | 881 | ||
881 | return ret; | 882 | return ret; |