Why we always balance system chunk alone with metadata?
Hi,
During debugging a bug related to balancing metadata chunk, we found that if we specify -m option for "btrfs balance", it will always balance system chunk too.
cmds-balance.c:
---
/*
* allow -s only under --force, otherwise do with system chunks
* the same thing we were ordered to do with meta chunks
*/
if (args.flags & BTRFS_BALANCE_SYSTEM) {
if (!force) {
error(
"Refusing to explicitly operate on system
chunks.\n"
"Pass --force if you really want to do that.");
return 1;
}
} else if (args.flags & BTRFS_BALANCE_METADATA) {
args.flags |= BTRFS_BALANCE_SYSTEM; <<< Here
memcpy(&args.sys, &args.meta,
sizeof(struct btrfs_balance_args));
}---
I'm curious why we always bind system chunk to metadata balance?
Is there any special reason?
The patch introducing such behavior is dated back to 2012, and this makes us unable to do metadata *only* balance.
Any idea?
Thanks,
Qu
Qu Wenruo posted on Wed, 16 Mar 2016 10:48:48 +0800 as excerpted:
Quoted 25 lines
Hi,
During debugging a bug related to balancing metadata chunk, we found that if we specify -m option for "btrfs balance", it will always balance system chunk too.
cmds-balance.c:
---/* * allow -s only under --force, otherwise do with system chunks * the same thing we were ordered to do with meta chunks */ if (args.flags & BTRFS_BALANCE_SYSTEM) { if (!force) { error( "Refusing to explicitly operate on system chunks.\n" "Pass --force if you really want to do that."); return 1; } } else if (args.flags & BTRFS_BALANCE_METADATA) { args.flags |= BTRFS_BALANCE_SYSTEM; <<< Here memcpy(&args.sys, &args.meta, sizeof(struct btrfs_balance_args)); }
Quoted 7 lines
---
I'm curious why we always bind system chunk to metadata balance?
Is there any special reason?
The patch introducing such behavior is dated back to 2012, and this makes us unable to do metadata *only* balance.
I always understood it as a convenient simplification for the sake of the user, for whom tracking data and metadata separately is already a major complication over what they're dealing with on most filesystems.
But I also wondered why there was no parallel to the -s system option for metadata ONLY, perhaps requiring --force just as the -s option does.
The --force requirement for -s /does/ encourage people not to touch it at all, separately, and there could be very good reasons to normally treat system as metadata and process them as a combined unit, but even then, it seems very odd to me to expose -s on its own, even if --force is required, and not a parallel, say -M, for metadata-only, again, possibly only if --force is used as well.
Signature · 3 lines
Duncan - List replies preferred. No HTML msgs. "Every nonfree program has a lord, a master -- and if you use the program, he is your master." Richard Stallman