Messages in this thread Patch in this message | | | Date | Tue, 12 Jun 2007 14:10:48 +0200 | From | Jens Axboe <> | Subject | Re: splice: move balance_dirty_pages_ratelimited() outside of splice actor |
| |
On Tue, Jun 12 2007, Peter Zijlstra wrote: > On Tue, 2007-06-12 at 13:31 +0200, Jens Axboe wrote: > > > Would you prefer this change, then? I'd prefer keeping the current code, > > unless it's absolutely critical that we call > > balance_dirty_pages_ratelimited() for each and every page instead of eg > > every 16 pages here. > > For that we should call: > balance_dirty_pages_ratelimited_nr(mapping, nr); > > Which is ok, for small nr.
OK, then this should be better:
diff --git a/fs/splice.c b/fs/splice.c index 25ec9c8..ed40967 100644 --- a/fs/splice.c +++ b/fs/splice.c @@ -844,6 +883,9 @@ generic_file_splice_write_nolock(struct pipe_inode_info *pipe, struct file *out, sd.file = out; ret = __splice_from_pipe(pipe, &sd, pipe_to_file); if (ret > 0) { + unsigned long nr_pages; + + nr_pages = (ret + PAGE_CACHE_SIZE - 1) >> PAGE_CACHE_SHIFT; *ppos += ret; /* @@ -857,7 +899,7 @@ generic_file_splice_write_nolock(struct pipe_inode_info *pipe, struct file *out, if (err) ret = err; } - balance_dirty_pages_ratelimited(mapping); + balance_dirty_pages_ratelimited_nr(mapping, nr_pages); } return ret; @@ -898,6 +940,9 @@ generic_file_splice_write(struct pipe_inode_info *pipe, struct file *out, ret = splice_from_pipe(pipe, out, ppos, len, flags, pipe_to_file); if (ret > 0) { + unsigned long nr_pages; + + nr_pages = (ret + PAGE_CACHE_SIZE - 1) >> PAGE_CACHE_SHIFT; *ppos += ret; /* @@ -913,7 +958,7 @@ generic_file_splice_write(struct pipe_inode_info *pipe, struct file *out, if (err) ret = err; } - balance_dirty_pages_ratelimited(mapping); + balance_dirty_pages_ratelimited_nr(mapping, nr_pages); } return ret; -- Jens Axboe
- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
| |