mirror of
https://github.com/kdave/btrfs-progs
synced 2025-02-17 02:06:51 +00:00
Currently, write_dev_supers() compares the superblock location vs the size of the device to check if it can write the superblock. This is not correct for a zoned device, whose superblock location is different than a regular device. Introduce check_sb_location() to check if the superblock zone exists for the zoned case. Running btrfs check can fail on a certain zoned device setup (e.g, zone size = 128MB, device size = 16GB). From generic/330: yes | btrfs check --repair --force /dev/nullb1 [1/7] checking root items Fixed 0 roots. [2/7] checking extents ERROR: zoned: failed to read zone info of 4096 and 4097: Invalid argument ERROR: failed to write super block for devid 1: write error: Input/output error failed to write new super block err -5 failed to repair damaged filesystem, aborting This happens because write_dev_supers() is comparing the original superblock location vs the device size to check if it can write out a superblock copy or not. For the above example, since the first copy location (64MB) < device size (16GB), it tries to write out the copy. But, the copy must be written into zone 4096 (512G / zone size (128M) = 4096), which is out of the device. Signed-off-by: Naohiro Aota <naohiro.aota@wdc.com> Signed-off-by: David Sterba <dsterba@suse.com> |
||
---|---|---|
.. | ||
uapi | ||
accessors.c | ||
accessors.h | ||
async-thread.c | ||
async-thread.h | ||
backref.c | ||
backref.h | ||
compression.h | ||
ctree.c | ||
ctree.h | ||
delayed-ref.c | ||
delayed-ref.h | ||
dir-item.c | ||
disk-io.c | ||
disk-io.h | ||
extent_io.c | ||
extent_io.h | ||
extent-io-tree.c | ||
extent-io-tree.h | ||
extent-tree.c | ||
file-item.c | ||
file-item.h | ||
file.c | ||
free-space-cache.c | ||
free-space-cache.h | ||
free-space-tree.c | ||
free-space-tree.h | ||
inode-item.c | ||
inode.c | ||
locking.c | ||
locking.h | ||
messages.c | ||
messages.h | ||
misc.h | ||
print-tree.c | ||
print-tree.h | ||
README.md | ||
root-tree.c | ||
send.h | ||
transaction.c | ||
transaction.h | ||
tree-checker.c | ||
tree-checker.h | ||
tree-mod-log.h | ||
ulist.c | ||
ulist.h | ||
uuid-tree.c | ||
volumes.c | ||
volumes.h | ||
zoned.c | ||
zoned.h |
Shared sources with kernel
Status and progress of kernel/userspace synchronization.
- accessors.c - done, local changes
- accessors.h - done, local changes
- async-thread.c - done
- async-thread.h - done
- backref.c - todo
- backref.h - todo
- compression.h - done
- ctree.c - partial
- ctree.h - partial
- delayed-ref.c - partial
- delayed-ref.h - partial
- dir-item.c - partial
- disk-io.c - todo
- disk-io.h - todo
- extent_io.c
- extent_io.h
- extent-io-tree.c - done, local changes
- extent-io-tree.h - done, local changes
- extent-tree.c - todo
- file.c - todo
- file-item.c - todo
- file-item.h - partial
- free-space-cache.c - not needed
- free-space-cache.h - not needed
- free-space-tree.c - partial
- free-space-tree.h - partial
- inode.c - todo
- inode-item.c - partial
- locking.c - done, local changes
- locking.h - done, local changes
- messages.c - done, local changes
- messages.h - done, local changes
- misc.h - done
- print-tree.c - partial, sync to kernel
- print-tree.h - partial
- root-tree.c - partial
- root-tree.h - done
- send.h - done
- transaction.c - todo
- transaction.h - partial, local changes
- tree-checker.c - partial, local changes
- tree-checker.h - partial, local changes
- tree-mod-log.h - done, local changes
- ulist.c - done
- ulist.h - done
- uuid-tree.c - partial
- volumes.c - todo, local changes
- volumes.h - todo, local changes
- zoned.c - todo
- zoned.h - todo