public inbox for linux-btrfs@vger.kernel.org
 help / color / mirror / Atom feed
* [PATCH 0/2] btrfs: migrate tracking read blocks from fs_devices to
@ 2025-01-08 21:01 Anand Jain
  2025-01-08 21:01 ` [PATCH 1/2] fixup: btrfs: add tracking of read blocks for read policy Anand Jain
                   ` (2 more replies)
  0 siblings, 3 replies; 4+ messages in thread
From: Anand Jain @ 2025-01-08 21:01 UTC (permalink / raw)
  To: linux-btrfs, dsterba

David reported btrfs/161 failing during sprouted filesystem unmount.
Bisected to commit 49136a74162e ("btrfs: add tracking of read blocks
for read policy"). Now, tracking is moved from `fs_devices` to `fs_info`.

Tested to be working fine.

-----
FSTYP         -- btrfs
PLATFORM      -- Linux/aarch64 local 6.13.0-rc6+ #45 SMP PREEMPT_DYNAMIC Thu Jan  9 04:04:07 +08 2025
MKFS_OPTIONS  -- /dev/sdb
MOUNT_OPTIONS -- -o context=system_u:object_r:root_t:s0 /dev/sdb /mnt/scratch

btrfs/161 0s ...  0s
Ran: btrfs/161
Passed all 1 tests
------

Patches should be folded into their respective commits. Thx.

Anand Jain (2):
  fixup: btrfs: add tracking of read blocks for read policy
  fixup: btrfs: introduce RAID1 round-robin read balancing

 fs/btrfs/bio.c     |  2 +-
 fs/btrfs/disk-io.c |  5 +++++
 fs/btrfs/fs.h      |  3 +++
 fs/btrfs/volumes.c | 17 ++++++-----------
 fs/btrfs/volumes.h |  3 ---
 5 files changed, 15 insertions(+), 15 deletions(-)

-- 
2.47.0


^ permalink raw reply	[flat|nested] 4+ messages in thread

* [PATCH 1/2] fixup: btrfs: add tracking of read blocks for read policy
  2025-01-08 21:01 [PATCH 0/2] btrfs: migrate tracking read blocks from fs_devices to Anand Jain
@ 2025-01-08 21:01 ` Anand Jain
  2025-01-08 21:01 ` [PATCH 2/2] fixup: btrfs: introduce RAID1 round-robin read balancing Anand Jain
  2025-01-09 10:17 ` [PATCH 0/2] btrfs: migrate tracking read blocks from fs_devices to David Sterba
  2 siblings, 0 replies; 4+ messages in thread
From: Anand Jain @ 2025-01-08 21:01 UTC (permalink / raw)
  To: linux-btrfs, dsterba

Move stats_read_blocks from btrfs_fs_devices to btrfs_fs_info and its
init and destroy.

This is based on the `for-next` branch in the repo github.com/btrfs/linux.git.

Fixes: 49136a74162e btrfs: add tracking of read blocks for read policy
Signed-off-by: Anand Jain <anand.jain@oracle.com>
---
 fs/btrfs/bio.c     | 2 +-
 fs/btrfs/disk-io.c | 5 +++++
 fs/btrfs/fs.h      | 3 +++
 fs/btrfs/volumes.c | 6 ------
 fs/btrfs/volumes.h | 3 ---
 5 files changed, 9 insertions(+), 10 deletions(-)

diff --git a/fs/btrfs/bio.c b/fs/btrfs/bio.c
index afff205ef671..bc2555c44a12 100644
--- a/fs/btrfs/bio.c
+++ b/fs/btrfs/bio.c
@@ -458,7 +458,7 @@ static void btrfs_submit_dev_bio(struct btrfs_device *dev, struct bio *bio)
 	 * filesystem is fully initialized.
 	 */
 	if (dev->fs_devices->collect_fs_stats && bio_op(bio) == REQ_OP_READ && dev->fs_info)
-		percpu_counter_add(&dev->fs_devices->stats_read_blocks,
+		percpu_counter_add(&dev->fs_info->stats_read_blocks,
 				   bio->bi_iter.bi_size >> dev->fs_info->sectorsize_bits);
 
 	if (bio->bi_opf & REQ_BTRFS_CGROUP_PUNT)
diff --git a/fs/btrfs/disk-io.c b/fs/btrfs/disk-io.c
index 4928bf2cd07f..ef3121b55c50 100644
--- a/fs/btrfs/disk-io.c
+++ b/fs/btrfs/disk-io.c
@@ -1258,6 +1258,7 @@ void btrfs_free_fs_info(struct btrfs_fs_info *fs_info)
 {
 	struct percpu_counter *em_counter = &fs_info->evictable_extent_maps;
 
+	percpu_counter_destroy(&fs_info->stats_read_blocks);
 	percpu_counter_destroy(&fs_info->dirty_metadata_bytes);
 	percpu_counter_destroy(&fs_info->delalloc_bytes);
 	percpu_counter_destroy(&fs_info->ordered_bytes);
@@ -2923,6 +2924,10 @@ static int init_mount_fs_info(struct btrfs_fs_info *fs_info, struct super_block
 	if (ret)
 		return ret;
 
+	ret = percpu_counter_init(&fs_info->stats_read_blocks, 0, GFP_KERNEL);
+	if (ret)
+		return ret;
+
 	fs_info->dirty_metadata_batch = PAGE_SIZE *
 					(1 + ilog2(nr_cpu_ids));
 
diff --git a/fs/btrfs/fs.h b/fs/btrfs/fs.h
index be8c32d1a7bb..b572d6b9730b 100644
--- a/fs/btrfs/fs.h
+++ b/fs/btrfs/fs.h
@@ -627,6 +627,9 @@ struct btrfs_fs_info {
 	struct kobject *qgroups_kobj;
 	struct kobject *discard_kobj;
 
+	/* Track the number of blocks (sectors) read by the filesystem. */
+	struct percpu_counter stats_read_blocks;
+
 	/* Used to keep from writing metadata until there is a nice batch */
 	struct percpu_counter dirty_metadata_bytes;
 	struct percpu_counter delalloc_bytes;
diff --git a/fs/btrfs/volumes.c b/fs/btrfs/volumes.c
index c02d551b73a7..e0c64246f8f6 100644
--- a/fs/btrfs/volumes.c
+++ b/fs/btrfs/volumes.c
@@ -1255,7 +1255,6 @@ static void close_fs_devices(struct btrfs_fs_devices *fs_devices)
 	list_for_each_entry_safe(device, tmp, &fs_devices->devices, dev_list)
 		btrfs_close_one_device(device);
 
-	percpu_counter_destroy(&fs_devices->stats_read_blocks);
 	WARN_ON(fs_devices->open_devices);
 	WARN_ON(fs_devices->rw_devices);
 	fs_devices->opened = 0;
@@ -1303,11 +1302,6 @@ static int open_fs_devices(struct btrfs_fs_devices *fs_devices,
 	s64 __maybe_unused value = 0;
 	int ret = 0;
 
-	/* Initialize the in-memory record of filesystem read count. */
-	ret = percpu_counter_init(&fs_devices->stats_read_blocks, 0, GFP_KERNEL);
-	if (ret)
-		return ret;
-
 	list_for_each_entry_safe(device, tmp_device, &fs_devices->devices,
 				 dev_list) {
 		int ret2;
diff --git a/fs/btrfs/volumes.h b/fs/btrfs/volumes.h
index f197e152f318..120f65e21eeb 100644
--- a/fs/btrfs/volumes.h
+++ b/fs/btrfs/volumes.h
@@ -438,9 +438,6 @@ struct btrfs_fs_devices {
 
 	enum btrfs_chunk_allocation_policy chunk_alloc_policy;
 
-	/* Track the number of blocks (sectors) read by the filesystem. */
-	struct percpu_counter stats_read_blocks;
-
 	/* Policy used to read the mirrored stripes. */
 	enum btrfs_read_policy read_policy;
 
-- 
2.47.0


^ permalink raw reply related	[flat|nested] 4+ messages in thread

* [PATCH 2/2] fixup: btrfs: introduce RAID1 round-robin read balancing
  2025-01-08 21:01 [PATCH 0/2] btrfs: migrate tracking read blocks from fs_devices to Anand Jain
  2025-01-08 21:01 ` [PATCH 1/2] fixup: btrfs: add tracking of read blocks for read policy Anand Jain
@ 2025-01-08 21:01 ` Anand Jain
  2025-01-09 10:17 ` [PATCH 0/2] btrfs: migrate tracking read blocks from fs_devices to David Sterba
  2 siblings, 0 replies; 4+ messages in thread
From: Anand Jain @ 2025-01-08 21:01 UTC (permalink / raw)
  To: linux-btrfs, dsterba

The member stats_read_blocks has been moved to fs_info, so update its
usage accordingly in btrfs_read_rr().

This is based on the `for-next` branch in the repo github.com/btrfs/linux.git.

Fixes: ee37a901a9d2 btrfs: introduce RAID1 round-robin read balancing
Signed-off-by: Anand Jain <anand.jain@oracle.com>
---
 fs/btrfs/volumes.c | 11 ++++++-----
 1 file changed, 6 insertions(+), 5 deletions(-)

diff --git a/fs/btrfs/volumes.c b/fs/btrfs/volumes.c
index e0c64246f8f6..a594f66daedf 100644
--- a/fs/btrfs/volumes.c
+++ b/fs/btrfs/volumes.c
@@ -6018,21 +6018,22 @@ static int btrfs_read_rr(const struct btrfs_chunk_map *map, int first, int num_s
 {
 	struct stripe_mirror stripes[BTRFS_RAID1_MAX_MIRRORS] = { 0 };
 	struct btrfs_device *device  = map->stripes[first].dev;
-	struct btrfs_fs_devices *fs_devices = device->fs_devices;
+	struct btrfs_fs_info *fs_info = device->fs_devices->fs_info;
 	unsigned int read_cycle;
 	unsigned int total_reads;
 	unsigned int min_reads_per_dev;
 
-	total_reads = percpu_counter_sum(&fs_devices->stats_read_blocks);
-	min_reads_per_dev = READ_ONCE(fs_devices->rr_min_contig_read) >>
-			    fs_devices->fs_info->sectorsize_bits;
+	total_reads = percpu_counter_sum(&fs_info->stats_read_blocks);
+	min_reads_per_dev = READ_ONCE(fs_info->fs_devices->rr_min_contig_read) >>
+						       fs_info->sectorsize_bits;
 
 	for (int index = 0, i = first; i < first + num_stripes; i++) {
 		stripes[index].devid = map->stripes[i].dev->devid;
 		stripes[index].num = i;
 		index++;
 	}
-	sort(stripes, num_stripes, sizeof(struct stripe_mirror), btrfs_cmp_devid, NULL);
+	sort(stripes, num_stripes, sizeof(struct stripe_mirror),
+	     btrfs_cmp_devid, NULL);
 
 	read_cycle = total_reads / min_reads_per_dev;
 	return stripes[read_cycle % num_stripes].num;
-- 
2.47.0


^ permalink raw reply related	[flat|nested] 4+ messages in thread

* Re: [PATCH 0/2] btrfs: migrate tracking read blocks from fs_devices to
  2025-01-08 21:01 [PATCH 0/2] btrfs: migrate tracking read blocks from fs_devices to Anand Jain
  2025-01-08 21:01 ` [PATCH 1/2] fixup: btrfs: add tracking of read blocks for read policy Anand Jain
  2025-01-08 21:01 ` [PATCH 2/2] fixup: btrfs: introduce RAID1 round-robin read balancing Anand Jain
@ 2025-01-09 10:17 ` David Sterba
  2 siblings, 0 replies; 4+ messages in thread
From: David Sterba @ 2025-01-09 10:17 UTC (permalink / raw)
  To: Anand Jain; +Cc: linux-btrfs, dsterba

On Thu, Jan 09, 2025 at 05:01:34AM +0800, Anand Jain wrote:
> David reported btrfs/161 failing during sprouted filesystem unmount.
> Bisected to commit 49136a74162e ("btrfs: add tracking of read blocks
> for read policy"). Now, tracking is moved from `fs_devices` to `fs_info`.
> 
> Tested to be working fine.

Thanks, updated in for-next.

^ permalink raw reply	[flat|nested] 4+ messages in thread

end of thread, other threads:[~2025-01-09 10:18 UTC | newest]

Thread overview: 4+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2025-01-08 21:01 [PATCH 0/2] btrfs: migrate tracking read blocks from fs_devices to Anand Jain
2025-01-08 21:01 ` [PATCH 1/2] fixup: btrfs: add tracking of read blocks for read policy Anand Jain
2025-01-08 21:01 ` [PATCH 2/2] fixup: btrfs: introduce RAID1 round-robin read balancing Anand Jain
2025-01-09 10:17 ` [PATCH 0/2] btrfs: migrate tracking read blocks from fs_devices to David Sterba

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox