bcachefs: preserve device path as device name
Various userspace scripts/tools may expect mount entries in /proc/mounts to reflect the device path names used to mount the associated filesystem. bcachefs seems to normalize the device path to the underlying device name based on the block device. This confuses tools like fstests when the test devices might be lvm or device-mapper based. The default behavior for show_vfsmnt() appers to be to use the string passed to alloc_vfsmnt(), so tweak bcachefs to copy the path at device superblock read time and to display it via ->show_devname(). Signed-off-by: Brian Foster <bfoster@redhat.com> Signed-off-by: Kent Overstreet <kent.overstreet@linux.dev>
This commit is contained in:
parent
0a11adfb7a
commit
63807d9518
@ -1667,8 +1667,7 @@ static int bch2_show_devname(struct seq_file *seq, struct dentry *root)
|
||||
if (!first)
|
||||
seq_putc(seq, ':');
|
||||
first = false;
|
||||
seq_puts(seq, "/dev/");
|
||||
seq_puts(seq, ca->name);
|
||||
seq_puts(seq, ca->disk_sb.sb_name);
|
||||
}
|
||||
|
||||
return 0;
|
||||
|
@ -166,6 +166,7 @@ void bch2_free_super(struct bch_sb_handle *sb)
|
||||
if (!IS_ERR_OR_NULL(sb->bdev))
|
||||
blkdev_put(sb->bdev, sb->holder);
|
||||
kfree(sb->holder);
|
||||
kfree(sb->sb_name);
|
||||
|
||||
kfree(sb->sb);
|
||||
memset(sb, 0, sizeof(*sb));
|
||||
@ -675,6 +676,10 @@ retry:
|
||||
if (!sb->holder)
|
||||
return -ENOMEM;
|
||||
|
||||
sb->sb_name = kstrdup(path, GFP_KERNEL);
|
||||
if (!sb->sb_name)
|
||||
return -ENOMEM;
|
||||
|
||||
#ifndef __KERNEL__
|
||||
if (opt_get(*opts, direct_io) == false)
|
||||
sb->mode |= BLK_OPEN_BUFFERED;
|
||||
|
@ -5,6 +5,7 @@
|
||||
struct bch_sb_handle {
|
||||
struct bch_sb *sb;
|
||||
struct block_device *bdev;
|
||||
char *sb_name;
|
||||
struct bio *bio;
|
||||
void *holder;
|
||||
size_t buffer_size;
|
||||
|
Loading…
x
Reference in New Issue
Block a user