mirror of
https://github.com/torvalds/linux.git
synced 2024-11-22 20:22:09 +00:00
xfs: use roundup_pow_of_two instead of ffs during xlog_find_tail
In our production environment, we find that mounting a 500M /boot which is umount cleanly needs ~6s. One cause is that ffs() is used by xlog_write_log_records() to decide the buffer size. It can cause a lot of small IO easily when xlog_clear_stale_blocks() needs to wrap around the end of log area and log head block is not power of two. Things are similar in xlog_find_verify_cycle(). The code is able to handed bigger buffer very well, we can use roundup_pow_of_two() to replace ffs() directly to avoid small and sychronous IOs. Reviewed-by: Dave Chinner <dchinner@redhat.com> Signed-off-by: Wang Jianchao <wangjc136@midea.com> Signed-off-by: Chandan Babu R <chandanbabu@kernel.org>
This commit is contained in:
parent
1155b12edb
commit
8b010acb31
@ -329,7 +329,7 @@ xlog_find_verify_cycle(
|
||||
* try a smaller size. We need to be able to read at least
|
||||
* a log sector, or we're out of luck.
|
||||
*/
|
||||
bufblks = 1 << ffs(nbblks);
|
||||
bufblks = roundup_pow_of_two(nbblks);
|
||||
while (bufblks > log->l_logBBsize)
|
||||
bufblks >>= 1;
|
||||
while (!(buffer = xlog_alloc_buffer(log, bufblks))) {
|
||||
@ -1528,7 +1528,7 @@ xlog_write_log_records(
|
||||
* a smaller size. We need to be able to write at least a
|
||||
* log sector, or we're out of luck.
|
||||
*/
|
||||
bufblks = 1 << ffs(blocks);
|
||||
bufblks = roundup_pow_of_two(blocks);
|
||||
while (bufblks > log->l_logBBsize)
|
||||
bufblks >>= 1;
|
||||
while (!(buffer = xlog_alloc_buffer(log, bufblks))) {
|
||||
|
Loading…
Reference in New Issue
Block a user