Skip to contentSkip to conversation

Btrfs: wake up inode cache waiters sooner to reduce waiting time

PATCH In review [email protected] 2 participants 2 messages Jul 4, 2019 – Jul 8, 2019 Btrfs file system

lore
Share & tools
lore
#0 lore raw

PATCH 5/5 Btrfs: wake up inode cache waiters sooner to reduce waiting time

From: Filipe Manana <[email protected]>

If we need to start an inode caching thread, because none currently exists on disk, we can wake up all waiters as soon as we mark the range starting at root's highest objectid + 1 and ending at BTRFS_LAST_FREE_OBJECTID as free, so that they don't need to wait for the caching thread to start and do some progress. We follow the same approach within the caching thread, since as soon as it finds a free range and marks it as free space in the cache, it wakes up all waiters. So improve this by adding such a wakeup call after marking that initial range as free space.

Fixes a47d6b70e28040 ("Btrfs: setup free ino caching in a more asynchronous way")
---
 fs/btrfs/inode-map.c | 1 +
 1 file changed, 1 insertion(+)
fs/btrfs/inode-map.c +1 -0
index 4820e05ea6bd..cb107d168019 100644
@@ -175,6 +175,7 @@ static void start_caching(struct btrfs_root *root)
 	if (!ret && objectid <= BTRFS_LAST_FREE_OBJECTID) {
 		__btrfs_add_free_space(fs_info, ctl, objectid,
 				       BTRFS_LAST_FREE_OBJECTID - objectid + 1);
+		wake_up(&root->ino_cache_wait);
 	}
 
 	tsk = kthread_run(caching_kthread, root, "btrfs-ino-cache-%llu",
Signature · 1 line
2.11.0
Reviewed-by on v1 5/5
#1 lore raw
Quoted 11 lines · On 4.07.19 г. 18:25 ч., [email protected] wrote:

From: Filipe Manana <[email protected]>

If we need to start an inode caching thread, because none currently exists on disk, we can wake up all waiters as soon as we mark the range starting at root's highest objectid + 1 and ending at BTRFS_LAST_FREE_OBJECTID as free, so that they don't need to wait for the caching thread to start and do some progress. We follow the same approach within the caching thread, since as soon as it finds a free range and marks it as free space in the cache, it wakes up all waiters. So improve this by adding such a wakeup call after marking that initial range as free space.

Quoted 2 lines
Fixes a47d6b70e28040 ("Btrfs: setup free ino caching in a more asynchronous way")
Quoted 17 lines
---
 fs/btrfs/inode-map.c | 1 +
 1 file changed, 1 insertion(+)
fs/btrfs/inode-map.c +1 -0
index 4820e05ea6bd..cb107d168019 100644
@@ -175,6 +175,7 @@ static void start_caching(struct btrfs_root *root)
 	if (!ret && objectid <= BTRFS_LAST_FREE_OBJECTID) {
 		__btrfs_add_free_space(fs_info, ctl, objectid,
 				       BTRFS_LAST_FREE_OBJECTID - objectid + 1);
+		wake_up(&root->ino_cache_wait);
 	}
 
 	tsk = kthread_run(caching_kthread, root, "btrfs-ino-cache-%llu",