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
|
@ -5712,6 +5712,13 @@ next_key:
|
||||||
} else {
|
} else {
|
||||||
break;
|
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) {
|
if (ins_nr) {
|
||||||
ret = copy_items(trans, inode, dst_path, path, ins_start_slot,
|
ret = copy_items(trans, inode, dst_path, path, ins_start_slot,
|
||||||
|
|
Loading…
Reference in New Issue