Lines Matching +full:mode +full:- +full:capable
1 // SPDX-License-Identifier: GPL-2.0-only
3 * Copyright (C) Sistina Software, Inc. 1997-2003 All rights reserved.
4 * Copyright (C) 2004-2006 Red Hat, Inc. All rights reserved.
41 return a->show ? a->show(sdp, buf) : 0; in gfs2_attr_show()
49 return a->store ? a->store(sdp, buf, len) : len; in gfs2_attr_store()
63 MAJOR(sdp->sd_vfs->s_dev), MINOR(sdp->sd_vfs->s_dev)); in id_show()
68 unsigned long f = sdp->sd_flags; in status_show()
102 (sdp->sd_jdesc ? sdp->sd_jdesc->jd_jid : 0), in status_show()
103 (sdp->sd_args.ar_spectator ? 1 : 0), in status_show()
109 (sb_rdonly(sdp->sd_vfs) ? 1 : 0), in status_show()
118 sdp->sd_log_error, in status_show()
119 rwsem_is_locked(&sdp->sd_log_flush_lock), in status_show()
120 sdp->sd_log_num_revoke, in status_show()
121 atomic_read(&sdp->sd_log_in_flight), in status_show()
122 atomic_read(&sdp->sd_log_blks_needed), in status_show()
123 atomic_read(&sdp->sd_log_blks_free), in status_show()
124 sdp->sd_log_flush_head, in status_show()
125 sdp->sd_log_flush_tail, in status_show()
126 sdp->sd_log_blks_reserved, in status_show()
127 atomic_read(&sdp->sd_log_revokes_available)); in status_show()
133 return snprintf(buf, PAGE_SIZE, "%s\n", sdp->sd_fsname); in fsname_show()
138 struct super_block *s = sdp->sd_vfs; in uuid_show()
141 if (uuid_is_null(&s->s_uuid)) in uuid_show()
143 return snprintf(buf, PAGE_SIZE, "%pUB\n", &s->s_uuid); in uuid_show()
148 struct super_block *sb = sdp->sd_vfs; in freeze_show()
149 int frozen = (sb->s_writers.frozen == SB_UNFROZEN) ? 0 : 1; in freeze_show()
162 if (!capable(CAP_SYS_ADMIN)) in freeze_store()
163 return -EPERM; in freeze_store()
167 error = thaw_super(sdp->sd_vfs); in freeze_store()
170 error = freeze_super(sdp->sd_vfs); in freeze_store()
173 return -EINVAL; in freeze_store()
194 if (!capable(CAP_SYS_ADMIN)) in withdraw_store()
195 return -EPERM; in withdraw_store()
202 return -EINVAL; in withdraw_store()
215 if (!capable(CAP_SYS_ADMIN)) in statfs_sync_store()
216 return -EPERM; in statfs_sync_store()
223 return -EINVAL; in statfs_sync_store()
225 gfs2_statfs_sync(sdp->sd_vfs, 0); in statfs_sync_store()
234 if (!capable(CAP_SYS_ADMIN)) in quota_sync_store()
235 return -EPERM; in quota_sync_store()
242 return -EINVAL; in quota_sync_store()
244 gfs2_quota_sync(sdp->sd_vfs, 0); in quota_sync_store()
255 if (!capable(CAP_SYS_ADMIN)) in quota_refresh_user_store()
256 return -EPERM; in quota_refresh_user_store()
264 return -EINVAL; in quota_refresh_user_store()
277 if (!capable(CAP_SYS_ADMIN)) in quota_refresh_group_store()
278 return -EPERM; in quota_refresh_group_store()
286 return -EINVAL; in quota_refresh_group_store()
299 char mode[16]; in demote_rq_store() local
302 if (!capable(CAP_SYS_ADMIN)) in demote_rq_store()
303 return -EPERM; in demote_rq_store()
306 mode); in demote_rq_store()
308 return -EINVAL; in demote_rq_store()
310 if (strcmp(mode, "EX") == 0) in demote_rq_store()
312 else if ((strcmp(mode, "CW") == 0) || (strcmp(mode, "DF") == 0)) in demote_rq_store()
314 else if ((strcmp(mode, "PR") == 0) || (strcmp(mode, "SH") == 0)) in demote_rq_store()
317 return -EINVAL; in demote_rq_store()
320 return -EINVAL; in demote_rq_store()
326 return -EINVAL; in demote_rq_store()
327 if (!test_and_set_bit(SDF_DEMOTE, &sdp->sd_flags)) in demote_rq_store()
338 #define GFS2_ATTR(name, mode, show, store) \ argument
339 static struct gfs2_attr gfs2_attr_##name = __ATTR(name, mode, show, store)
373 complete(&sdp->sd_kobj_unregister); in gfs2_sbd_release()
389 const struct lm_lockops *ops = sdp->sd_lockstruct.ls_ops; in proto_name_show()
390 return sprintf(buf, "%s\n", ops->lm_proto_name); in proto_name_show()
395 struct lm_lockstruct *ls = &sdp->sd_lockstruct; in block_show()
399 if (test_bit(DFL_BLOCK_LOCKS, &ls->ls_recover_flags)) in block_show()
407 struct lm_lockstruct *ls = &sdp->sd_lockstruct; in block_store()
415 set_bit(DFL_BLOCK_LOCKS, &ls->ls_recover_flags); in block_store()
417 clear_bit(DFL_BLOCK_LOCKS, &ls->ls_recover_flags); in block_store()
421 return -EINVAL; in block_store()
428 int val = completion_done(&sdp->sd_wdack) ? 1 : 0; in wdack_show()
442 !strcmp(sdp->sd_lockstruct.ls_ops->lm_proto_name, "lock_dlm")) in wdack_store()
443 complete(&sdp->sd_wdack); in wdack_store()
445 return -EINVAL; in wdack_store()
451 struct lm_lockstruct *ls = &sdp->sd_lockstruct; in lkfirst_show()
452 return sprintf(buf, "%d\n", ls->ls_first); in lkfirst_show()
462 return -EINVAL; in lkfirst_store()
463 rv = wait_for_completion_killable(&sdp->sd_locking_init); in lkfirst_store()
466 spin_lock(&sdp->sd_jindex_spin); in lkfirst_store()
467 rv = -EBUSY; in lkfirst_store()
468 if (test_bit(SDF_NOJOURNALID, &sdp->sd_flags) == 0) in lkfirst_store()
470 rv = -EINVAL; in lkfirst_store()
471 if (sdp->sd_args.ar_spectator) in lkfirst_store()
473 if (sdp->sd_lockstruct.ls_ops->lm_mount == NULL) in lkfirst_store()
475 sdp->sd_lockstruct.ls_first = first; in lkfirst_store()
478 spin_unlock(&sdp->sd_jindex_spin); in lkfirst_store()
484 struct lm_lockstruct *ls = &sdp->sd_lockstruct; in first_done_show()
485 return sprintf(buf, "%d\n", !!test_bit(DFL_FIRST_MOUNT_DONE, &ls->ls_recover_flags)); in first_done_show()
494 wait_for_completion(&sdp->sd_journal_ready); in gfs2_recover_set()
496 spin_lock(&sdp->sd_jindex_spin); in gfs2_recover_set()
497 rv = -EBUSY; in gfs2_recover_set()
505 if (!sdp->sd_jdesc) in gfs2_recover_set()
507 if (sdp->sd_jdesc->jd_jid == jid && !sdp->sd_args.ar_spectator) in gfs2_recover_set()
509 rv = -ENOENT; in gfs2_recover_set()
510 list_for_each_entry(jd, &sdp->sd_jindex_list, jd_list) { in gfs2_recover_set()
511 if (jd->jd_jid != jid && !sdp->sd_args.ar_spectator) in gfs2_recover_set()
517 spin_unlock(&sdp->sd_jindex_spin); in gfs2_recover_set()
528 return -EINVAL; in recover_store()
530 if (test_bit(SDF_NORECOVERY, &sdp->sd_flags)) { in recover_store()
531 rv = -ESHUTDOWN; in recover_store()
542 struct lm_lockstruct *ls = &sdp->sd_lockstruct; in recover_done_show()
543 return sprintf(buf, "%d\n", ls->ls_recover_jid_done); in recover_done_show()
548 struct lm_lockstruct *ls = &sdp->sd_lockstruct; in recover_status_show()
549 return sprintf(buf, "%d\n", ls->ls_recover_jid_status); in recover_status_show()
554 return sprintf(buf, "%d\n", sdp->sd_lockstruct.ls_jid); in jid_show()
564 return -EINVAL; in jid_store()
565 rv = wait_for_completion_killable(&sdp->sd_locking_init); in jid_store()
568 spin_lock(&sdp->sd_jindex_spin); in jid_store()
569 rv = -EINVAL; in jid_store()
570 if (sdp->sd_lockstruct.ls_ops->lm_mount == NULL) in jid_store()
572 rv = -EBUSY; in jid_store()
573 if (test_bit(SDF_NOJOURNALID, &sdp->sd_flags) == 0) in jid_store()
576 if (sdp->sd_args.ar_spectator && jid > 0) in jid_store()
577 rv = jid = -EINVAL; in jid_store()
578 sdp->sd_lockstruct.ls_jid = jid; in jid_store()
579 clear_bit(SDF_NOJOURNALID, &sdp->sd_flags); in jid_store()
581 wake_up_bit(&sdp->sd_flags, SDF_NOJOURNALID); in jid_store()
583 spin_unlock(&sdp->sd_jindex_spin); in jid_store()
620 sdp->sd_tune.gt_quota_scale_num, in quota_scale_show()
621 sdp->sd_tune.gt_quota_scale_den); in quota_scale_show()
627 struct gfs2_tune *gt = &sdp->sd_tune; in quota_scale_store()
630 if (!capable(CAP_SYS_ADMIN)) in quota_scale_store()
631 return -EPERM; in quota_scale_store()
634 return -EINVAL; in quota_scale_store()
636 spin_lock(>->gt_spin); in quota_scale_store()
637 gt->gt_quota_scale_num = x; in quota_scale_store()
638 gt->gt_quota_scale_den = y; in quota_scale_store()
639 spin_unlock(>->gt_spin); in quota_scale_store()
646 struct gfs2_tune *gt = &sdp->sd_tune; in tune_set()
650 if (!capable(CAP_SYS_ADMIN)) in tune_set()
651 return -EPERM; in tune_set()
658 return -EINVAL; in tune_set()
660 spin_lock(>->gt_spin); in tune_set()
662 spin_unlock(>->gt_spin); in tune_set()
672 return snprintf(buf, PAGE_SIZE, "%u\n", sdp->sd_tune.gt_##name); \
679 return tune_set(sdp, &sdp->sd_tune.gt_##name, check_zero, buf, len); \
716 struct super_block *sb = sdp->sd_vfs; in gfs2_sys_fs_add()
723 sprintf(spectator, "SPECTATOR=%d", sdp->sd_args.ar_spectator ? 1 : 0); in gfs2_sys_fs_add()
725 init_completion(&sdp->sd_kobj_unregister); in gfs2_sys_fs_add()
726 sdp->sd_kobj.kset = gfs2_kset; in gfs2_sys_fs_add()
727 error = kobject_init_and_add(&sdp->sd_kobj, &gfs2_ktype, NULL, in gfs2_sys_fs_add()
728 "%s", sdp->sd_table_name); in gfs2_sys_fs_add()
732 error = sysfs_create_group(&sdp->sd_kobj, &tune_group); in gfs2_sys_fs_add()
736 error = sysfs_create_group(&sdp->sd_kobj, &lock_module_group); in gfs2_sys_fs_add()
740 error = sysfs_create_link(&sdp->sd_kobj, in gfs2_sys_fs_add()
741 &disk_to_dev(sb->s_bdev->bd_disk)->kobj, in gfs2_sys_fs_add()
746 kobject_uevent_env(&sdp->sd_kobj, KOBJ_ADD, envp); in gfs2_sys_fs_add()
750 sysfs_remove_group(&sdp->sd_kobj, &lock_module_group); in gfs2_sys_fs_add()
752 sysfs_remove_group(&sdp->sd_kobj, &tune_group); in gfs2_sys_fs_add()
755 kobject_put(&sdp->sd_kobj); in gfs2_sys_fs_add()
756 wait_for_completion(&sdp->sd_kobj_unregister); in gfs2_sys_fs_add()
757 sb->s_fs_info = NULL; in gfs2_sys_fs_add()
763 sysfs_remove_link(&sdp->sd_kobj, "device"); in gfs2_sys_fs_del()
764 sysfs_remove_group(&sdp->sd_kobj, &tune_group); in gfs2_sys_fs_del()
765 sysfs_remove_group(&sdp->sd_kobj, &lock_module_group); in gfs2_sys_fs_del()
766 kobject_put(&sdp->sd_kobj); in gfs2_sys_fs_del()
767 wait_for_completion(&sdp->sd_kobj_unregister); in gfs2_sys_fs_del()
773 struct super_block *s = sdp->sd_vfs; in gfs2_uevent()
775 add_uevent_var(env, "LOCKTABLE=%s", sdp->sd_table_name); in gfs2_uevent()
776 add_uevent_var(env, "LOCKPROTO=%s", sdp->sd_proto_name); in gfs2_uevent()
777 if (!test_bit(SDF_NOJOURNALID, &sdp->sd_flags)) in gfs2_uevent()
778 add_uevent_var(env, "JOURNALID=%d", sdp->sd_lockstruct.ls_jid); in gfs2_uevent()
779 if (!uuid_is_null(&s->s_uuid)) in gfs2_uevent()
780 add_uevent_var(env, "UUID=%pUB", &s->s_uuid); in gfs2_uevent()
792 return -ENOMEM; in gfs2_sys_init()