Update bcachefs sources to bd062cbcd84d bcachefs: Add v2 ioctls that return error strings

This commit is contained in:
Kent Overstreet 2025-08-18 13:02:45 -04:00
parent 760d43376c
commit 916b8959fe
3 changed files with 64 additions and 1 deletions

View File

@ -1 +1 @@
62003adb7cbd505b54495338a1289cc087633cf1 bd062cbcd84d5e7b007561be6e972fcdd283c7aa

View File

@ -82,7 +82,9 @@ struct bch_ioctl_incremental {
#define BCH_IOCTL_READ_SUPER _IOW(0xbc, 12, struct bch_ioctl_read_super) #define BCH_IOCTL_READ_SUPER _IOW(0xbc, 12, struct bch_ioctl_read_super)
#define BCH_IOCTL_DISK_GET_IDX _IOW(0xbc, 13, struct bch_ioctl_disk_get_idx) #define BCH_IOCTL_DISK_GET_IDX _IOW(0xbc, 13, struct bch_ioctl_disk_get_idx)
#define BCH_IOCTL_DISK_RESIZE _IOW(0xbc, 14, struct bch_ioctl_disk_resize) #define BCH_IOCTL_DISK_RESIZE _IOW(0xbc, 14, struct bch_ioctl_disk_resize)
#define BCH_IOCTL_DISK_RESIZE_v2 _IOW(0xbc, 27, struct bch_ioctl_disk_resize_v2)
#define BCH_IOCTL_DISK_RESIZE_JOURNAL _IOW(0xbc, 15, struct bch_ioctl_disk_resize_journal) #define BCH_IOCTL_DISK_RESIZE_JOURNAL _IOW(0xbc, 15, struct bch_ioctl_disk_resize_journal)
#define BCH_IOCTL_DISK_RESIZE_JOURNAL_v2 _IOW(0xbc, 28, struct bch_ioctl_disk_resize_journal_v2)
#define BCH_IOCTL_SUBVOLUME_CREATE _IOW(0xbc, 16, struct bch_ioctl_subvolume) #define BCH_IOCTL_SUBVOLUME_CREATE _IOW(0xbc, 16, struct bch_ioctl_subvolume)
#define BCH_IOCTL_SUBVOLUME_DESTROY _IOW(0xbc, 17, struct bch_ioctl_subvolume) #define BCH_IOCTL_SUBVOLUME_DESTROY _IOW(0xbc, 17, struct bch_ioctl_subvolume)
@ -411,6 +413,14 @@ struct bch_ioctl_disk_resize {
__u64 nbuckets; __u64 nbuckets;
}; };
struct bch_ioctl_disk_resize_v2 {
__u32 flags;
__u32 pad;
__u64 dev;
__u64 nbuckets;
struct bch_ioctl_err_msg err;
};
/* /*
* BCH_IOCTL_DISK_RESIZE_JOURNAL: resize journal on a device * BCH_IOCTL_DISK_RESIZE_JOURNAL: resize journal on a device
* *
@ -424,6 +434,14 @@ struct bch_ioctl_disk_resize_journal {
__u64 nbuckets; __u64 nbuckets;
}; };
struct bch_ioctl_disk_resize_journal_v2 {
__u32 flags;
__u32 pad;
__u64 dev;
__u64 nbuckets;
struct bch_ioctl_err_msg err;
};
struct bch_ioctl_subvolume { struct bch_ioctl_subvolume {
__u32 flags; __u32 flags;
__u32 dirfd; __u32 dirfd;

View File

@ -767,6 +767,25 @@ static long bch2_ioctl_disk_resize(struct bch_fs *c,
return ret; return ret;
} }
static long bch2_ioctl_disk_resize_v2(struct bch_fs *c,
struct bch_ioctl_disk_resize_v2 arg)
{
if (!capable(CAP_SYS_ADMIN))
return -EPERM;
if ((arg.flags & ~BCH_BY_INDEX) ||
arg.pad)
return -EINVAL;
CLASS(bch2_device_lookup, ca)(c, arg.dev, arg.flags);
if (IS_ERR(ca))
return PTR_ERR(ca);
CLASS(printbuf, err)();
int ret = bch2_dev_resize(c, ca, arg.nbuckets, &err);
return copy_ioctl_err_msg(&arg.err, &err, ret);
}
static long bch2_ioctl_disk_resize_journal(struct bch_fs *c, static long bch2_ioctl_disk_resize_journal(struct bch_fs *c,
struct bch_ioctl_disk_resize_journal arg) struct bch_ioctl_disk_resize_journal arg)
{ {
@ -787,6 +806,28 @@ static long bch2_ioctl_disk_resize_journal(struct bch_fs *c,
return bch2_set_nr_journal_buckets(c, ca, arg.nbuckets); return bch2_set_nr_journal_buckets(c, ca, arg.nbuckets);
} }
static long bch2_ioctl_disk_resize_journal_v2(struct bch_fs *c,
struct bch_ioctl_disk_resize_journal_v2 arg)
{
if (!capable(CAP_SYS_ADMIN))
return -EPERM;
if ((arg.flags & ~BCH_BY_INDEX) ||
arg.pad)
return -EINVAL;
if (arg.nbuckets > U32_MAX)
return -EINVAL;
CLASS(bch2_device_lookup, ca)(c, arg.dev, arg.flags);
if (IS_ERR(ca))
return PTR_ERR(ca);
CLASS(printbuf, err)();
int ret = bch2_set_nr_journal_buckets(c, ca, arg.nbuckets);
return copy_ioctl_err_msg(&arg.err, &err, ret);
}
#define BCH_IOCTL(_name, _argtype) \ #define BCH_IOCTL(_name, _argtype) \
do { \ do { \
_argtype i; \ _argtype i; \
@ -850,8 +891,12 @@ long bch2_fs_ioctl(struct bch_fs *c, unsigned cmd, void __user *arg)
BCH_IOCTL(data, struct bch_ioctl_data); BCH_IOCTL(data, struct bch_ioctl_data);
case BCH_IOCTL_DISK_RESIZE: case BCH_IOCTL_DISK_RESIZE:
BCH_IOCTL(disk_resize, struct bch_ioctl_disk_resize); BCH_IOCTL(disk_resize, struct bch_ioctl_disk_resize);
case BCH_IOCTL_DISK_RESIZE_v2:
BCH_IOCTL(disk_resize_v2, struct bch_ioctl_disk_resize_v2);
case BCH_IOCTL_DISK_RESIZE_JOURNAL: case BCH_IOCTL_DISK_RESIZE_JOURNAL:
BCH_IOCTL(disk_resize_journal, struct bch_ioctl_disk_resize_journal); BCH_IOCTL(disk_resize_journal, struct bch_ioctl_disk_resize_journal);
case BCH_IOCTL_DISK_RESIZE_JOURNAL_v2:
BCH_IOCTL(disk_resize_journal_v2, struct bch_ioctl_disk_resize_journal_v2);
case BCH_IOCTL_FSCK_ONLINE: case BCH_IOCTL_FSCK_ONLINE:
BCH_IOCTL(fsck_online, struct bch_ioctl_fsck_online); BCH_IOCTL(fsck_online, struct bch_ioctl_fsck_online);
case BCH_IOCTL_QUERY_ACCOUNTING: case BCH_IOCTL_QUERY_ACCOUNTING: