aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJens Axboe <jens.axboe@oracle.com>2007-06-05 05:05:11 -0400
committerJens Axboe <jens.axboe@oracle.com>2007-06-08 02:33:59 -0400
commit20d698db67059a63d217030dfd02872cb5f88dfb (patch)
tree7bac40911367b11ac57c51345d09df8a78b46656
parent17374ff1aa9ce2a0597416a16729474b538af443 (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.c3
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);
656out: 655out:
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;