Message ID | 20180906211816.12121-1-jeffm@suse.com (mailing list archive) |
---|---|
Headers | show |
Series | btrfs: trim latency improvements | expand |
On Thu, Sep 06, 2018 at 05:18:13PM -0400, jeffm@suse.com wrote: > From: Jeff Mahoney <jeffm@suse.com> > > This patch set fixes a few issues with trim. > > 1) Fix device list iteration. We're iterating the ->alloc_list while > holding the device_list_mutex. The ->alloc_list is protected by > the chunk mutex and we don't want to hold it across the entire > trim execution. Instead, use the ->devices list, which is protected > by the device_list_mutex. > > 2) Skip trim on devices that don't support it. Rather than letting > the block layer reject it, bounce out early. > > 3) Don't keep the commit_root_sem locked and the transaction pinned > across the block layer component of trim. We only need these to > ensure the pending chunks list doesn't go away underneath us, so > it's safe to drop across the trim itself. Historically, this > caused issues when fstrim and balance would run at the same time > since balance would produce lots of transactions and would > have to wait constantly, causing problems for everything else that > wanted to start a transaction. > > -Jeff > --- > > Jeff Mahoney (3): > btrfs: use ->devices list instead of ->alloc_list in btrfs_trim_fs > btrfs: don't attempt to trim devices that don't support it > btrfs: keep trim from interfering with transaction commits The patches have been in for-next for some time, I'm moving them to misc-next now and will probably forward them to the next rc (5) with other trim fixes from Qu. Please note that the commit subject in the Fixes: tag should be in "...", I've fixed that.
From: Jeff Mahoney <jeffm@suse.com> This patch set fixes a few issues with trim. 1) Fix device list iteration. We're iterating the ->alloc_list while holding the device_list_mutex. The ->alloc_list is protected by the chunk mutex and we don't want to hold it across the entire trim execution. Instead, use the ->devices list, which is protected by the device_list_mutex. 2) Skip trim on devices that don't support it. Rather than letting the block layer reject it, bounce out early. 3) Don't keep the commit_root_sem locked and the transaction pinned across the block layer component of trim. We only need these to ensure the pending chunks list doesn't go away underneath us, so it's safe to drop across the trim itself. Historically, this caused issues when fstrim and balance would run at the same time since balance would produce lots of transactions and would have to wait constantly, causing problems for everything else that wanted to start a transaction. -Jeff --- Jeff Mahoney (3): btrfs: use ->devices list instead of ->alloc_list in btrfs_trim_fs btrfs: don't attempt to trim devices that don't support it btrfs: keep trim from interfering with transaction commits fs/btrfs/extent-tree.c | 33 +++++++++++++++++++++++---------- 1 file changed, 23 insertions(+), 10 deletions(-)