mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
synced 2024-09-15 23:25:07 +00:00
btrfs: voluntarily relinquish cpu when doing a full fsync
Doing a full fsync may require processing many leaves of metadata, which can take some time and result in a task monopolizing a cpu for too long. So add a cond_resched() after processing a leaf when doing a full fsync, while not holding any locks on any tree (a subvolume or a log tree). Signed-off-by: Filipe Manana <fdmanana@suse.com> Signed-off-by: David Sterba <dsterba@suse.com>
This commit is contained in:
parent
5b7ce5e287
commit
96acb3753e
1 changed files with 7 additions and 0 deletions
|
@ -5712,6 +5712,13 @@ static int copy_inode_items_to_log(struct btrfs_trans_handle *trans,
|
|||
} else {
|
||||
break;
|
||||
}
|
||||
|
||||
/*
|
||||
* We may process many leaves full of items for our inode, so
|
||||
* avoid monopolizing a cpu for too long by rescheduling while
|
||||
* not holding locks on any tree.
|
||||
*/
|
||||
cond_resched();
|
||||
}
|
||||
if (ins_nr) {
|
||||
ret = copy_items(trans, inode, dst_path, path, ins_start_slot,
|
||||
|
|
Loading…
Reference in a new issue