btrfs: print a message when a missing device re-appears

There is a bug report that fstrim crashed, and that crash is eventually
pinned down to a missing device which re-appeared and screwed up callers
that only checks BTRFS_DEV_STATE_MISSING, but not
BTRFS_DEV_STATE_WRITEABLE nor device->bdev.

A missing device re-appearing can be very tricky, as for now it will
result in a device without WRITEABLE or MISSING flag, and still no bdev
pointer.

As the first step to enhance handling of such re-appearing missing
devices, add a dmesg output when a missing device re-appeared.

Reviewed-by: Filipe Manana <fdmanana@suse.com>
Signed-off-by: Qu Wenruo <wqu@suse.com>
Signed-off-by: David Sterba <dsterba@suse.com>
This commit is contained in:
Qu Wenruo
2026-06-02 14:56:49 +09:30
committed by Johannes Thumshirn
parent 1b1937eb08
commit 7af30ba6eb

View File

@@ -963,6 +963,11 @@ static noinline struct btrfs_device *device_list_add(const char *path,
devid, btrfs_dev_name(device),
path, current->comm,
task_pid_nr(current));
} else {
btrfs_info(NULL,
"missing devid %llu re-appeared at %s scanned by %s (%d)",
devid, path, current->comm,
task_pid_nr(current));
}
name = kstrdup(path, GFP_NOFS);