diff options
author | Jens Axboe <jens.axboe@oracle.com> | 2007-06-05 11:05:11 +0200 |
---|---|---|
committer | Jens Axboe <jens.axboe@oracle.com> | 2007-06-08 08:33:59 +0200 |
commit | 20d698db67059a63d217030dfd02872cb5f88dfb (patch) | |
tree | 7bac40911367b11ac57c51345d09df8a78b46656 /fs | |
parent | 17374ff1aa9ce2a0597416a16729474b538af443 (diff) | |
download | linux-20d698db67059a63d217030dfd02872cb5f88dfb.tar.gz linux-20d698db67059a63d217030dfd02872cb5f88dfb.tar.bz2 linux-20d698db67059a63d217030dfd02872cb5f88dfb.zip |
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>
Diffstat (limited to 'fs')
-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: * accessed, we are now done! */ mark_page_accessed(page); - balance_dirty_pages_ratelimited(mapping); out: page_cache_release(page); unlock_page(page); @@ -823,6 +822,7 @@ generic_file_splice_write_nolock(struct pipe_inode_info *pipe, struct file *out, if (err) ret = err; } + balance_dirty_pages_ratelimited(mapping); } return ret; @@ -876,6 +876,7 @@ generic_file_splice_write(struct pipe_inode_info *pipe, struct file *out, if (err) ret = err; } + balance_dirty_pages_ratelimited(mapping); } return ret; |