Lines Matching +full:mi +full:- +full:v
1 // SPDX-License-Identifier: GPL-2.0
14 #include "sb-counters.h"
15 #include "super-io.h"
27 /* returns with ref on ca->ref */
34 if (dev >= c->sb.nr_devices) in bch2_device_lookup()
35 return ERR_PTR(-EINVAL); in bch2_device_lookup()
39 return ERR_PTR(-EINVAL); in bch2_device_lookup()
63 int ret = -EFAULT;
66 return -EFAULT;
69 return -EINVAL;
73 return -ENOMEM;
77 if (copy_from_user(user_devs, user_arg->devs,
93 closure_put(&c->cl);
109 return -EFAULT;
112 return -EINVAL;
124 return -EINVAL;
147 ret = -ENOTTY; in bch2_global_ioctl()
159 return copy_to_user_errcode(&user_arg->uuid, &c->sb.user_uuid, in bch2_ioctl_query_uuid()
160 sizeof(c->sb.user_uuid)); in bch2_ioctl_query_uuid()
167 return -EPERM;
170 return -EINVAL;
178 return -EPERM;
191 return -EPERM; in bch2_ioctl_disk_add()
194 return -EINVAL; in bch2_ioctl_disk_add()
213 return -EPERM; in bch2_ioctl_disk_remove()
220 return -EINVAL; in bch2_ioctl_disk_remove()
235 return -EPERM; in bch2_ioctl_disk_online()
238 return -EINVAL; in bch2_ioctl_disk_online()
256 return -EPERM; in bch2_ioctl_disk_offline()
263 return -EINVAL; in bch2_ioctl_disk_offline()
281 return -EPERM; in bch2_ioctl_disk_set_state()
289 return -EINVAL; in bch2_ioctl_disk_set_state()
315 ctx->thr.ret = bch2_data_job(ctx->c, &ctx->stats, ctx->arg); in bch2_data_thread()
316 if (ctx->thr.ret == -BCH_ERR_device_offline) in bch2_data_thread()
317 ctx->stats.ret = BCH_IOCTL_DATA_EVENT_RET_device_offline; in bch2_data_thread()
319 ctx->stats.ret = BCH_IOCTL_DATA_EVENT_RET_done; in bch2_data_thread()
320 ctx->stats.data_type = (int) DATA_PROGRESS_DATA_TYPE_done; in bch2_data_thread()
327 struct bch_data_ctx *ctx = container_of(file->private_data, struct bch_data_ctx, thr); in bch2_data_job_release()
329 bch2_thread_with_file_exit(&ctx->thr); in bch2_data_job_release()
337 struct bch_data_ctx *ctx = container_of(file->private_data, struct bch_data_ctx, thr); in bch2_data_job_read()
338 struct bch_fs *c = ctx->c; in bch2_data_job_read()
341 .ret = ctx->stats.ret, in bch2_data_job_read()
342 .p.data_type = ctx->stats.data_type, in bch2_data_job_read()
343 .p.btree_id = ctx->stats.pos.btree, in bch2_data_job_read()
344 .p.pos = ctx->stats.pos.pos, in bch2_data_job_read()
345 .p.sectors_done = atomic64_read(&ctx->stats.sectors_seen), in bch2_data_job_read()
346 .p.sectors_error_corrected = atomic64_read(&ctx->stats.sectors_error_corrected), in bch2_data_job_read()
347 .p.sectors_error_uncorrected = atomic64_read(&ctx->stats.sectors_error_uncorrected), in bch2_data_job_read()
350 if (ctx->arg.op == BCH_DATA_OP_scrub) { in bch2_data_job_read()
351 struct bch_dev *ca = bch2_dev_tryget(c, ctx->arg.scrub.dev); in bch2_data_job_read()
356 if (ctx->arg.scrub.data_types & BIT(i)) in bch2_data_job_read()
365 return -EINVAL; in bch2_data_job_read()
382 return -EPERM; in bch2_ioctl_data()
385 return -EINVAL; in bch2_ioctl_data()
389 return -ENOMEM; in bch2_ioctl_data()
391 ctx->c = c; in bch2_ioctl_data()
392 ctx->arg = arg; in bch2_ioctl_data()
394 ret = bch2_run_thread_with_file(&ctx->thr, in bch2_ioctl_data()
410 if (!test_bit(BCH_FS_started, &c->flags)) in bch2_ioctl_fs_usage()
411 return -EINVAL; in bch2_ioctl_fs_usage()
413 if (get_user(replica_entries_bytes, &user_arg->replica_entries_bytes)) in bch2_ioctl_fs_usage()
414 return -EFAULT; in bch2_ioctl_fs_usage()
417 (replica_entries_bytes < replicas.nr ? -ERANGE : 0) ?: in bch2_ioctl_fs_usage()
418 copy_to_user_errcode(&user_arg->replicas, replicas.data, replicas.nr); in bch2_ioctl_fs_usage()
423 arg.capacity = c->capacity; in bch2_ioctl_fs_usage()
425 arg.online_reserved = percpu_u64_get(c->online_reserved); in bch2_ioctl_fs_usage()
450 if (!test_bit(BCH_FS_started, &c->flags)) in bch2_ioctl_query_accounting()
451 return -EINVAL; in bch2_ioctl_query_accounting()
455 (arg.accounting_u64s * sizeof(u64) < accounting.nr ? -ERANGE : 0) ?: in bch2_ioctl_query_accounting()
456 copy_to_user_errcode(&user_arg->accounting, accounting.data, accounting.nr); in bch2_ioctl_query_accounting()
460 arg.capacity = c->capacity; in bch2_ioctl_query_accounting()
462 arg.online_reserved = percpu_u64_get(c->online_reserved); in bch2_ioctl_query_accounting()
480 if (!test_bit(BCH_FS_started, &c->flags)) in bch2_ioctl_dev_usage()
481 return -EINVAL; in bch2_ioctl_dev_usage()
484 return -EFAULT; in bch2_ioctl_dev_usage()
490 return -EINVAL; in bch2_ioctl_dev_usage()
498 arg.state = ca->mi.state; in bch2_ioctl_dev_usage()
499 arg.bucket_size = ca->mi.bucket_size; in bch2_ioctl_dev_usage()
500 arg.nr_buckets = ca->mi.nbuckets - ca->mi.first_bucket; in bch2_ioctl_dev_usage()
521 if (!test_bit(BCH_FS_started, &c->flags)) in bch2_ioctl_dev_usage_v2()
522 return -EINVAL; in bch2_ioctl_dev_usage_v2()
525 return -EFAULT; in bch2_ioctl_dev_usage_v2()
531 return -EINVAL; in bch2_ioctl_dev_usage_v2()
539 arg.state = ca->mi.state; in bch2_ioctl_dev_usage_v2()
540 arg.bucket_size = ca->mi.bucket_size; in bch2_ioctl_dev_usage_v2()
542 arg.nr_buckets = ca->mi.nbuckets - ca->mi.first_bucket; in bch2_ioctl_dev_usage_v2()
555 ret = copy_to_user_errcode(&user_arg->d[i], &t, sizeof(t)); in bch2_ioctl_dev_usage_v2()
572 return -EPERM; in bch2_ioctl_read_super()
576 return -EINVAL; in bch2_ioctl_read_super()
578 mutex_lock(&c->sb_lock); in bch2_ioctl_read_super()
586 sb = ca->disk_sb.sb; in bch2_ioctl_read_super()
588 sb = c->disk_sb.sb; in bch2_ioctl_read_super()
592 ret = -ERANGE; in bch2_ioctl_read_super()
601 mutex_unlock(&c->sb_lock); in bch2_ioctl_read_super()
611 return -EPERM; in bch2_ioctl_disk_get_idx()
614 return -EINVAL; in bch2_ioctl_disk_get_idx()
617 if (ca->dev == dev) { in bch2_ioctl_disk_get_idx()
618 percpu_ref_put(&ca->io_ref[READ]); in bch2_ioctl_disk_get_idx()
619 return ca->dev_idx; in bch2_ioctl_disk_get_idx()
622 return -BCH_ERR_ENOENT_dev_idx_not_found; in bch2_ioctl_disk_get_idx()
632 return -EPERM; in bch2_ioctl_disk_resize()
636 return -EINVAL; in bch2_ioctl_disk_resize()
655 return -EPERM; in bch2_ioctl_disk_resize_journal()
659 return -EINVAL; in bch2_ioctl_disk_resize_journal()
662 return -EINVAL; in bch2_ioctl_disk_resize_journal()
679 return -EFAULT; \
709 if (!test_bit(BCH_FS_started, &c->flags)) in bch2_fs_ioctl()
710 return -EINVAL; in bch2_fs_ioctl()
736 return -ENOTTY; in bch2_fs_ioctl()
746 static long bch2_chardev_ioctl(struct file *filp, unsigned cmd, unsigned long v) in bch2_chardev_ioctl() argument
750 void __user *arg = (void __user *) v; in bch2_chardev_ioctl()
771 if (!IS_ERR_OR_NULL(c->chardev)) in bch2_fs_chardev_exit()
772 device_unregister(c->chardev); in bch2_fs_chardev_exit()
773 if (c->minor >= 0) in bch2_fs_chardev_exit()
774 idr_remove(&bch_chardev_minor, c->minor); in bch2_fs_chardev_exit()
779 c->minor = idr_alloc(&bch_chardev_minor, c, 0, 0, GFP_KERNEL); in bch2_fs_chardev_init()
780 if (c->minor < 0) in bch2_fs_chardev_init()
781 return c->minor; in bch2_fs_chardev_init()
783 c->chardev = device_create(&bch_chardev_class, NULL, in bch2_fs_chardev_init()
784 MKDEV(bch_chardev_major, c->minor), c, in bch2_fs_chardev_init()
785 "bcachefs%u-ctl", c->minor); in bch2_fs_chardev_init()
786 if (IS_ERR(c->chardev)) in bch2_fs_chardev_init()
787 return PTR_ERR(c->chardev); in bch2_fs_chardev_init()
804 bch_chardev_major = register_chrdev(0, "bcachefs-ctl", &bch_chardev_fops); in bch2_chardev_init()
814 NULL, "bcachefs-ctl"); in bch2_chardev_init()
825 unregister_chrdev(bch_chardev_major, "bcachefs-ctl"); in bch2_chardev_init()