linux-btrfs.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH 0/3][RFC] btrfs-progs: get/set allocation_hint for an unmounted filesystem
@ 2022-01-27 19:57 Goffredo Baroncelli
  2022-01-27 19:57 ` [PATCH 1/3] Rename btrfs_device->type to flags Goffredo Baroncelli
                   ` (2 more replies)
  0 siblings, 3 replies; 4+ messages in thread
From: Goffredo Baroncelli @ 2022-01-27 19:57 UTC (permalink / raw)
  To: linux-btrfs
  Cc: Zygo Blaxell, Josef Bacik, David Sterba, Sinnamohideen Shafeeq,
	Paul Jones, Boris Burkov, Goffredo Baroncelli

From: Goffredo Baroncelli <kreijack@inwind.it>

This patches set allows to change the allocation_hint even for an unmounted
filesystem.  It does that using the user space btrfs code.

Because the userspace btrfs code is unaware of the allocation_hint 
if a new (metadata) chunk allocation is required during the changing of
this property, the new chunk is allocated without considering the
allocation_hint ... hint.


Goffredo Baroncelli (3):
  Rename btrfs_device->type to flags
  Rename dev_item.type in flags in the command output.
  Read/change the allocation_hint prop when unmounted

 cmds/property.c             | 115 ++++++++++++++++++++++++++++++++++++
 cmds/rescue-chunk-recover.c |   2 +-
 common/device-scan.c        |   4 +-
 convert/common.c            |   2 +-
 image/main.c                |   6 +-
 kernel-shared/ctree.h       |   8 +--
 kernel-shared/disk-io.c     |   2 +-
 kernel-shared/print-tree.c  |   8 +--
 kernel-shared/volumes.c     |   6 +-
 kernel-shared/volumes.h     |   4 +-
 mkfs/common.c               |   2 +-
 11 files changed, 137 insertions(+), 22 deletions(-)

-- 
2.34.1


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

* [PATCH 1/3] Rename btrfs_device->type to flags
  2022-01-27 19:57 [PATCH 0/3][RFC] btrfs-progs: get/set allocation_hint for an unmounted filesystem Goffredo Baroncelli
@ 2022-01-27 19:57 ` Goffredo Baroncelli
  2022-01-27 19:57 ` [PATCH 2/3] Rename dev_item.type in flags in the command output Goffredo Baroncelli
  2022-01-27 19:57 ` [PATCH 3/3] Read/change the allocation_hint prop when unmounted Goffredo Baroncelli
  2 siblings, 0 replies; 4+ messages in thread
From: Goffredo Baroncelli @ 2022-01-27 19:57 UTC (permalink / raw)
  To: linux-btrfs
  Cc: Zygo Blaxell, Josef Bacik, David Sterba, Sinnamohideen Shafeeq,
	Paul Jones, Boris Burkov, Goffredo Baroncelli

From: Goffredo Baroncelli <kreijack@inwind.it>

As did in the kernel, rename the device->type to device->flag.

Signed-off-by: Goffredo Baroncelli <kreijack@inwind.it>
---
 cmds/rescue-chunk-recover.c | 2 +-
 common/device-scan.c        | 4 ++--
 convert/common.c            | 2 +-
 image/main.c                | 6 +++---
 kernel-shared/ctree.h       | 8 ++++----
 kernel-shared/disk-io.c     | 2 +-
 kernel-shared/print-tree.c  | 4 ++--
 kernel-shared/volumes.c     | 6 +++---
 kernel-shared/volumes.h     | 4 ++--
 mkfs/common.c               | 2 +-
 10 files changed, 20 insertions(+), 20 deletions(-)

diff --git a/cmds/rescue-chunk-recover.c b/cmds/rescue-chunk-recover.c
index da24df4c..5d6c907b 100644
--- a/cmds/rescue-chunk-recover.c
+++ b/cmds/rescue-chunk-recover.c
@@ -1187,7 +1187,7 @@ static int __rebuild_device_items(struct btrfs_trans_handle *trans,
 		key.offset = dev->devid;
 
 		btrfs_set_stack_device_generation(dev_item, 0);
-		btrfs_set_stack_device_type(dev_item, dev->type);
+		btrfs_set_stack_device_flags(dev_item, dev->flags);
 		btrfs_set_stack_device_id(dev_item, dev->devid);
 		btrfs_set_stack_device_total_bytes(dev_item, dev->total_bytes);
 		btrfs_set_stack_device_bytes_used(dev_item, dev->bytes_used);
diff --git a/common/device-scan.c b/common/device-scan.c
index 39b12c0e..d87172c9 100644
--- a/common/device-scan.c
+++ b/common/device-scan.c
@@ -155,7 +155,7 @@ int btrfs_add_to_fsid(struct btrfs_trans_handle *trans,
 	uuid_generate(device->uuid);
 	device->fs_info = fs_info;
 	device->devid = 0;
-	device->type = 0;
+	device->flags = 0;
 	device->io_width = io_width;
 	device->io_align = io_align;
 	device->sector_size = sectorsize;
@@ -193,7 +193,7 @@ int btrfs_add_to_fsid(struct btrfs_trans_handle *trans,
 
 	btrfs_set_super_bytenr(disk_super, BTRFS_SUPER_INFO_OFFSET);
 	btrfs_set_stack_device_id(dev_item, device->devid);
-	btrfs_set_stack_device_type(dev_item, device->type);
+	btrfs_set_stack_device_flags(dev_item, device->flags);
 	btrfs_set_stack_device_io_align(dev_item, device->io_align);
 	btrfs_set_stack_device_io_width(dev_item, device->io_width);
 	btrfs_set_stack_device_sector_size(dev_item, device->sector_size);
diff --git a/convert/common.c b/convert/common.c
index 00a7e553..c73c3b62 100644
--- a/convert/common.c
+++ b/convert/common.c
@@ -336,7 +336,7 @@ static int insert_temp_dev_item(int fd, struct extent_buffer *buf,
 	btrfs_set_device_io_align(buf, dev_item, cfg->sectorsize);
 	btrfs_set_device_io_width(buf, dev_item, cfg->sectorsize);
 	btrfs_set_device_sector_size(buf, dev_item, cfg->sectorsize);
-	btrfs_set_device_type(buf, dev_item, 0);
+	btrfs_set_device_flags(buf, dev_item, 0);
 
 	/* Super dev_item is not complete, copy the complete one to sb */
 	read_extent_buffer(buf, &super.dev_item, (unsigned long)dev_item,
diff --git a/image/main.c b/image/main.c
index 3125163d..209bdd75 100644
--- a/image/main.c
+++ b/image/main.c
@@ -2942,7 +2942,7 @@ static int update_disk_super_on_device(struct btrfs_fs_info *info,
 	struct btrfs_super_block disk_super;
 	char dev_uuid[BTRFS_UUID_SIZE];
 	char fs_uuid[BTRFS_UUID_SIZE];
-	u64 devid, type, io_align, io_width;
+	u64 devid, flags, io_align, io_width;
 	u64 sector_size, total_bytes, bytes_used;
 	int fp = -1;
 	int ret;
@@ -2972,7 +2972,7 @@ static int update_disk_super_on_device(struct btrfs_fs_info *info,
 		goto out;
 	}
 
-	type = btrfs_device_type(leaf, dev_item);
+	flags = btrfs_device_flags(leaf, dev_item);
 	io_align = btrfs_device_io_align(leaf, dev_item);
 	io_width = btrfs_device_io_width(leaf, dev_item);
 	sector_size = btrfs_device_sector_size(leaf, dev_item);
@@ -2997,7 +2997,7 @@ static int update_disk_super_on_device(struct btrfs_fs_info *info,
 
 	dev_item = &disk_super.dev_item;
 
-	btrfs_set_stack_device_type(dev_item, type);
+	btrfs_set_stack_device_flags(dev_item, flags);
 	btrfs_set_stack_device_id(dev_item, devid);
 	btrfs_set_stack_device_total_bytes(dev_item, total_bytes);
 	btrfs_set_stack_device_bytes_used(dev_item, bytes_used);
diff --git a/kernel-shared/ctree.h b/kernel-shared/ctree.h
index 628539c0..720ecbab 100644
--- a/kernel-shared/ctree.h
+++ b/kernel-shared/ctree.h
@@ -249,8 +249,8 @@ struct btrfs_dev_item {
 	/* minimal io size for this device */
 	__le32 sector_size;
 
-	/* type and info about this device */
-	__le64 type;
+	/* device flags (e.g. allocation hint) */
+	__le64 flags;
 
 	/* expected generation for this device */
 	__le64 generation;
@@ -1605,7 +1605,7 @@ static inline void btrfs_set_##name(type *s, u##bits val)		\
 	s->member = cpu_to_le##bits(val);				\
 }
 
-BTRFS_SETGET_FUNCS(device_type, struct btrfs_dev_item, type, 64);
+BTRFS_SETGET_FUNCS(device_flags, struct btrfs_dev_item, flags, 64);
 BTRFS_SETGET_FUNCS(device_total_bytes, struct btrfs_dev_item, total_bytes, 64);
 BTRFS_SETGET_FUNCS(device_bytes_used, struct btrfs_dev_item, bytes_used, 64);
 BTRFS_SETGET_FUNCS(device_io_align, struct btrfs_dev_item, io_align, 32);
@@ -1619,7 +1619,7 @@ BTRFS_SETGET_FUNCS(device_seek_speed, struct btrfs_dev_item, seek_speed, 8);
 BTRFS_SETGET_FUNCS(device_bandwidth, struct btrfs_dev_item, bandwidth, 8);
 BTRFS_SETGET_FUNCS(device_generation, struct btrfs_dev_item, generation, 64);
 
-BTRFS_SETGET_STACK_FUNCS(stack_device_type, struct btrfs_dev_item, type, 64);
+BTRFS_SETGET_STACK_FUNCS(stack_device_flags, struct btrfs_dev_item, flags, 64);
 BTRFS_SETGET_STACK_FUNCS(stack_device_total_bytes, struct btrfs_dev_item,
 			 total_bytes, 64);
 BTRFS_SETGET_STACK_FUNCS(stack_device_bytes_used, struct btrfs_dev_item,
diff --git a/kernel-shared/disk-io.c b/kernel-shared/disk-io.c
index e9d945ec..1a9e797a 100644
--- a/kernel-shared/disk-io.c
+++ b/kernel-shared/disk-io.c
@@ -2099,7 +2099,7 @@ int write_all_supers(struct btrfs_fs_info *fs_info)
 			continue;
 
 		btrfs_set_stack_device_generation(dev_item, 0);
-		btrfs_set_stack_device_type(dev_item, dev->type);
+		btrfs_set_stack_device_flags(dev_item, dev->flags);
 		btrfs_set_stack_device_id(dev_item, dev->devid);
 		btrfs_set_stack_device_total_bytes(dev_item, dev->total_bytes);
 		btrfs_set_stack_device_bytes_used(dev_item, dev->bytes_used);
diff --git a/kernel-shared/print-tree.c b/kernel-shared/print-tree.c
index bd75ae51..9bb0bd42 100644
--- a/kernel-shared/print-tree.c
+++ b/kernel-shared/print-tree.c
@@ -304,7 +304,7 @@ static void print_dev_item(struct extent_buffer *eb,
 	       btrfs_device_io_align(eb, dev_item),
 	       btrfs_device_io_width(eb, dev_item),
 	       btrfs_device_sector_size(eb, dev_item),
-	       (unsigned long long)btrfs_device_type(eb, dev_item),
+	       (unsigned long long)btrfs_device_flags(eb, dev_item),
 	       (unsigned long long)btrfs_device_generation(eb, dev_item),
 	       (unsigned long long)btrfs_device_start_offset(eb, dev_item),
 	       btrfs_device_group(eb, dev_item),
@@ -2052,7 +2052,7 @@ void btrfs_print_superblock(struct btrfs_super_block *sb, int full)
 	       cmp_res ? "[match]" : "[DON'T MATCH]");
 
 	printf("dev_item.type\t\t%llu\n", (unsigned long long)
-	       btrfs_stack_device_type(&sb->dev_item));
+	       btrfs_stack_device_flags(&sb->dev_item));
 	printf("dev_item.total_bytes\t%llu\n", (unsigned long long)
 	       btrfs_stack_device_total_bytes(&sb->dev_item));
 	printf("dev_item.bytes_used\t%llu\n", (unsigned long long)
diff --git a/kernel-shared/volumes.c b/kernel-shared/volumes.c
index 4274c378..82102723 100644
--- a/kernel-shared/volumes.c
+++ b/kernel-shared/volumes.c
@@ -992,7 +992,7 @@ int btrfs_add_device(struct btrfs_trans_handle *trans,
 	device->devid = free_devid;
 	btrfs_set_device_id(leaf, dev_item, device->devid);
 	btrfs_set_device_generation(leaf, dev_item, 0);
-	btrfs_set_device_type(leaf, dev_item, device->type);
+	btrfs_set_device_flags(leaf, dev_item, device->flags);
 	btrfs_set_device_io_align(leaf, dev_item, device->io_align);
 	btrfs_set_device_io_width(leaf, dev_item, device->io_width);
 	btrfs_set_device_sector_size(leaf, dev_item, device->sector_size);
@@ -1050,7 +1050,7 @@ int btrfs_update_device(struct btrfs_trans_handle *trans,
 	dev_item = btrfs_item_ptr(leaf, path->slots[0], struct btrfs_dev_item);
 
 	btrfs_set_device_id(leaf, dev_item, device->devid);
-	btrfs_set_device_type(leaf, dev_item, device->type);
+	btrfs_set_device_flags(leaf, dev_item, device->flags);
 	btrfs_set_device_io_align(leaf, dev_item, device->io_align);
 	btrfs_set_device_io_width(leaf, dev_item, device->io_width);
 	btrfs_set_device_sector_size(leaf, dev_item, device->sector_size);
@@ -2302,7 +2302,7 @@ static int fill_device_from_item(struct extent_buffer *leaf,
 	device->devid = btrfs_device_id(leaf, dev_item);
 	device->total_bytes = btrfs_device_total_bytes(leaf, dev_item);
 	device->bytes_used = btrfs_device_bytes_used(leaf, dev_item);
-	device->type = btrfs_device_type(leaf, dev_item);
+	device->flags = btrfs_device_flags(leaf, dev_item);
 	device->io_align = btrfs_device_io_align(leaf, dev_item);
 	device->io_width = btrfs_device_io_width(leaf, dev_item);
 	device->sector_size = btrfs_device_sector_size(leaf, dev_item);
diff --git a/kernel-shared/volumes.h b/kernel-shared/volumes.h
index 5cfe7e39..1dd873c9 100644
--- a/kernel-shared/volumes.h
+++ b/kernel-shared/volumes.h
@@ -66,8 +66,8 @@ struct btrfs_device {
 	/* minimal io size for this device */
 	u32 sector_size;
 
-	/* type and info about this device */
-	u64 type;
+	/* device flags (e.g. allocation hint) */
+	u64 flags;
 
 	/* physical drive uuid (or lvm uuid) */
 	u8 uuid[BTRFS_UUID_SIZE];
diff --git a/mkfs/common.c b/mkfs/common.c
index 9608d27f..2ebba7f3 100644
--- a/mkfs/common.c
+++ b/mkfs/common.c
@@ -445,7 +445,7 @@ int make_btrfs(int fd, struct btrfs_mkfs_config *cfg)
 	btrfs_set_device_io_align(buf, dev_item, cfg->sectorsize);
 	btrfs_set_device_io_width(buf, dev_item, cfg->sectorsize);
 	btrfs_set_device_sector_size(buf, dev_item, cfg->sectorsize);
-	btrfs_set_device_type(buf, dev_item, 0);
+	btrfs_set_device_flags(buf, dev_item, 0);
 
 	write_extent_buffer(buf, super.dev_item.uuid,
 			    (unsigned long)btrfs_device_uuid(dev_item),
-- 
2.34.1


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

* [PATCH 2/3] Rename dev_item.type in flags in the command output.
  2022-01-27 19:57 [PATCH 0/3][RFC] btrfs-progs: get/set allocation_hint for an unmounted filesystem Goffredo Baroncelli
  2022-01-27 19:57 ` [PATCH 1/3] Rename btrfs_device->type to flags Goffredo Baroncelli
@ 2022-01-27 19:57 ` Goffredo Baroncelli
  2022-01-27 19:57 ` [PATCH 3/3] Read/change the allocation_hint prop when unmounted Goffredo Baroncelli
  2 siblings, 0 replies; 4+ messages in thread
From: Goffredo Baroncelli @ 2022-01-27 19:57 UTC (permalink / raw)
  To: linux-btrfs
  Cc: Zygo Blaxell, Josef Bacik, David Sterba, Sinnamohideen Shafeeq,
	Paul Jones, Boris Burkov, Goffredo Baroncelli

From: Goffredo Baroncelli <kreijack@inwind.it>

As did in the kernel, rename the device->type to device->flags
in the printf() functions.

Signed-off-by: Goffredo Baroncelli <kreijack@inwind.it>
---
 kernel-shared/print-tree.c | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/kernel-shared/print-tree.c b/kernel-shared/print-tree.c
index 9bb0bd42..3bab0709 100644
--- a/kernel-shared/print-tree.c
+++ b/kernel-shared/print-tree.c
@@ -293,7 +293,7 @@ static void print_dev_item(struct extent_buffer *eb,
 			   BTRFS_UUID_SIZE);
 	uuid_unparse(fsid, fsid_str);
 	printf("\t\tdevid %llu total_bytes %llu bytes_used %llu\n"
-	       "\t\tio_align %u io_width %u sector_size %u type %llu\n"
+	       "\t\tio_align %u io_width %u sector_size %u flags %llu\n"
 	       "\t\tgeneration %llu start_offset %llu dev_group %u\n"
 	       "\t\tseek_speed %hhu bandwidth %hhu\n"
 	       "\t\tuuid %s\n"
@@ -2051,7 +2051,7 @@ void btrfs_print_superblock(struct btrfs_super_block *sb, int full)
 	printf("dev_item.fsid\t\t%s %s\n", buf,
 	       cmp_res ? "[match]" : "[DON'T MATCH]");
 
-	printf("dev_item.type\t\t%llu\n", (unsigned long long)
+	printf("dev_item.flags\t\t%llu\n", (unsigned long long)
 	       btrfs_stack_device_flags(&sb->dev_item));
 	printf("dev_item.total_bytes\t%llu\n", (unsigned long long)
 	       btrfs_stack_device_total_bytes(&sb->dev_item));
-- 
2.34.1


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

* [PATCH 3/3] Read/change the allocation_hint prop when unmounted
  2022-01-27 19:57 [PATCH 0/3][RFC] btrfs-progs: get/set allocation_hint for an unmounted filesystem Goffredo Baroncelli
  2022-01-27 19:57 ` [PATCH 1/3] Rename btrfs_device->type to flags Goffredo Baroncelli
  2022-01-27 19:57 ` [PATCH 2/3] Rename dev_item.type in flags in the command output Goffredo Baroncelli
@ 2022-01-27 19:57 ` Goffredo Baroncelli
  2 siblings, 0 replies; 4+ messages in thread
From: Goffredo Baroncelli @ 2022-01-27 19:57 UTC (permalink / raw)
  To: linux-btrfs
  Cc: Zygo Blaxell, Josef Bacik, David Sterba, Sinnamohideen Shafeeq,
	Paul Jones, Boris Burkov, Goffredo Baroncelli

From: Goffredo Baroncelli <kreijack@inwind.it>

This patch enable the changing of the allocation_hint even
when the filesystem is unmounted.

Signed-off-by: Goffredo Baroncelli <kreijack@inwind.it>
---
 cmds/property.c | 115 ++++++++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 115 insertions(+)

diff --git a/cmds/property.c b/cmds/property.c
index a409f4e9..55de7e6b 100644
--- a/cmds/property.c
+++ b/cmds/property.c
@@ -28,6 +28,9 @@
 #include "cmds/commands.h"
 #include "cmds/props.h"
 #include "kernel-shared/ctree.h"
+#include "kernel-shared/volumes.h"
+#include "kernel-shared/disk-io.h"
+#include "kernel-shared/transaction.h"
 #include "common/open-utils.h"
 #include "common/utils.h"
 #include "common/help.h"
@@ -377,6 +380,115 @@ static struct ull_charp_pair_t {
 	{0, NULL}
 };
 
+static int find_device(const char *object, struct btrfs_device **device_ret)
+{
+	struct btrfs_fs_devices *fs_devices;
+	struct list_head *fs_uuids;
+	struct stat sttarget, st;
+
+	if (stat(object, &sttarget) < 0)
+		return -EACCES;
+
+	fs_uuids = btrfs_scanned_uuids();
+
+	list_for_each_entry(fs_devices, fs_uuids, list) {
+		struct btrfs_device *device;
+
+		list_for_each_entry(device, &fs_devices->devices, dev_list) {
+
+			if (stat(device->name, &st) < 0)
+				return -EACCES;
+
+			if (st.st_rdev == sttarget.st_rdev) {
+				*device_ret = device;
+				return 0;
+			}
+		}
+	}
+
+	return -ENODEV;
+}
+
+static int prop_allocation_hint_unmounted(const char *object,
+					  const char *name,
+					  const char *val)
+{
+
+	struct btrfs_device *device;
+	int ret;
+	struct btrfs_root *root = NULL;
+
+	root = open_ctree(object, btrfs_sb_offset(0), 0);
+	if (!root)
+		return -ENODEV;
+
+	ret = find_device(object, &device);
+	if (ret)
+		goto out;
+
+	if (!val) {
+		int i;
+		u64 v = device->flags & BTRFS_DEV_ALLOCATION_HINT_MASK;
+
+		for (i = 0 ; allocation_hint_description[i].descr ; i++)
+			if (v == allocation_hint_description[i].value)
+				break;
+
+		if (allocation_hint_description[i].descr)
+			printf("allocation_hint=%s\n",
+				allocation_hint_description[i].descr);
+		else
+			printf("allocation_hint=unknown:%llu\n", v);
+		ret = 0;
+	} else {
+		struct btrfs_trans_handle *trans;
+		int i;
+		u64 v;
+
+		for (i = 0 ; allocation_hint_description[i].descr ; i++)
+			if (!strcmp(val, allocation_hint_description[i].descr))
+				break;
+
+		if (allocation_hint_description[i].descr) {
+			v = allocation_hint_description[i].value;
+		} else if (sscanf(val, "%llu", &v) != 1) {
+			error("Invalid value '%s'\n", val);
+			ret = -3;
+			goto out;
+		}
+		if (v & ~BTRFS_DEV_ALLOCATION_HINT_MASK) {
+			error("Invalid value '%s'\n", val);
+			ret = -3;
+			goto out;
+		}
+
+		trans = btrfs_start_transaction(device->fs_info->chunk_root, 1);
+		if (IS_ERR(trans)) {
+			ret = PTR_ERR(trans);
+			goto out;
+		}
+
+		/* Manually update the device item in chunk tree */
+		ret = btrfs_update_device(trans, device);
+		if (ret < 0) {
+			errno = -ret;
+			goto out;
+		}
+
+		/*
+		 * Commit transaction not only to save the above change but also update
+		 * the device item in super block.
+		 */
+		ret = btrfs_commit_transaction(trans, device->fs_info->chunk_root);
+
+		}
+out:
+	if (root)
+		close_ctree(root);
+	return ret;
+
+}
+
 static int prop_allocation_hint(enum prop_object_type type,
 				const char *object,
 				const char *name,
@@ -394,6 +506,9 @@ static int prop_allocation_hint(enum prop_object_type type,
 	ret = btrfs_find_devid_uuid_by_dev(object, &devid,
 		sysfs_file + sizeof(BTRFSYSFS) - 1);
 
+	if (ret == -ENODEV)
+		return prop_allocation_hint_unmounted(object, name, val);
+
 	if (ret)
 		goto out;
 
-- 
2.34.1


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

end of thread, other threads:[~2022-01-27 19:57 UTC | newest]

Thread overview: 4+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2022-01-27 19:57 [PATCH 0/3][RFC] btrfs-progs: get/set allocation_hint for an unmounted filesystem Goffredo Baroncelli
2022-01-27 19:57 ` [PATCH 1/3] Rename btrfs_device->type to flags Goffredo Baroncelli
2022-01-27 19:57 ` [PATCH 2/3] Rename dev_item.type in flags in the command output Goffredo Baroncelli
2022-01-27 19:57 ` [PATCH 3/3] Read/change the allocation_hint prop when unmounted Goffredo Baroncelli

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).