[Cluster-devel] [GFS2 PATCH] gfs2: Add new sysfs file for gfs2 status
Andrew Price
anprice at redhat.com
Fri Mar 19 13:31:52 UTC 2021
On 19/03/2021 12:06, Bob Peterson wrote:
> This patch adds a new file: /sys/fs/gfs2/*/status which will report
> the status of the file system. Catting this file dumps the current
> status of the file system according to various superblock variables.
> For example:
>
> Journal Checked: 1
> Journal Live: 1
> Journal ID: 0
> Spectator: 0
> Withdrawn: 0
> No barriers: 0
> No recovery: 0
> Demote: 0
> No Journal ID: 1
> Mounted RO: 0
> RO Recovery: 0
> Skip DLM Unlock: 0
> Force AIL Flush: 0
> FS Frozen: 0
> Withdrawing: 0
> Withdraw In Prog: 0
> Remote Withdraw: 0
> Withdraw Recovery: 0
> sd_log_lock held: 0
> statfs_spin held: 0
> sd_rindex_spin: 0
> sd_jindex_spin: 0
> sd_trunc_lock: 0
> sd_bitmap_lock: 0
> sd_ordered_lock: 0
> sd_ail_lock: 0
> sd_log_error: 0
> sd_log_flush_lock: 0
> sd_log_num_revoke: 0
> sd_log_in_flight: 0
> sd_log_blks_needed: 0
> sd_log_blks_free: 32768
> sd_log_flush_head: 0
> sd_log_flush_tail: 5384
> sd_log_blks_reserved: 0
> sd_log_revokes_available: 503
>
> Signed-off-by: Bob Peterson <rpeterso at redhat.com>
> ---
> fs/gfs2/sys.c | 83 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
> 1 file changed, 83 insertions(+)
>
> diff --git a/fs/gfs2/sys.c b/fs/gfs2/sys.c
> index c3e72dba7418..57f53c13866e 100644
> --- a/fs/gfs2/sys.c
> +++ b/fs/gfs2/sys.c
> @@ -63,6 +63,87 @@ static ssize_t id_show(struct gfs2_sbd *sdp, char *buf)
> MAJOR(sdp->sd_vfs->s_dev), MINOR(sdp->sd_vfs->s_dev));
> }
>
> +static ssize_t status_show(struct gfs2_sbd *sdp, char *buf)
> +{
> + unsigned long f = sdp->sd_flags;
> + ssize_t s;
> +
> + s = snprintf(buf, PAGE_SIZE,
> + "Journal Checked: %d\n"
> + "Journal Live: %d\n"
> + "Journal ID: %d\n"
> + "Spectator: %d\n"
> + "Withdrawn: %d\n"
> + "No barriers: %d\n"
> + "No recovery: %d\n"
> + "Demote: %d\n"
> + "No Journal ID: %d\n"
> + "Mounted RO: %d\n"
> + "RO Recovery: %d\n"
> + "Skip DLM Unlock: %d\n"
> + "Force AIL Flush: %d\n"
> + "FS Frozen: %d\n"
> + "Withdrawing: %d\n"
> + "Withdraw In Prog: %d\n"
> + "Remote Withdraw: %d\n"
> + "Withdraw Recovery: %d\n"
> + "sd_log_lock held: %d\n"
> + "statfs_spin held: %d\n"
> + "sd_rindex_spin: %d\n"
> + "sd_jindex_spin: %d\n"
> + "sd_trunc_lock: %d\n"
> + "sd_bitmap_lock: %d\n"
> + "sd_ordered_lock: %d\n"
> + "sd_ail_lock: %d\n"
> + "sd_log_error: %d\n"
> + "sd_log_flush_lock: %d\n"
> + "sd_log_num_revoke: %u\n"
> + "sd_log_in_flight: %d\n"
> + "sd_log_blks_needed: %d\n"
> + "sd_log_blks_free: %d\n"
> + "sd_log_flush_head: %d\n"
> + "sd_log_flush_tail: %d\n"
> + "sd_log_blks_reserved: %d\n"
> + "sd_log_revokes_available: %d\n",
> + test_bit(SDF_JOURNAL_CHECKED, &f),
> + test_bit(SDF_JOURNAL_LIVE, &f),
> + (sdp->sd_jdesc ? sdp->sd_jdesc->jd_jid : 0),
> + (sdp->sd_args.ar_spectator ? 1 : 0),
> + test_bit(SDF_WITHDRAWN, &f),
> + test_bit(SDF_NOBARRIERS, &f),
> + test_bit(SDF_NORECOVERY, &f),
> + test_bit(SDF_DEMOTE, &f),
> + test_bit(SDF_NOJOURNALID, &f),
> + (sb_rdonly(sdp->sd_vfs) ? 1 : 0),
> + test_bit(SDF_RORECOVERY, &f),
> + test_bit(SDF_SKIP_DLM_UNLOCK, &f),
> + test_bit(SDF_FORCE_AIL_FLUSH, &f),
> + test_bit(SDF_FS_FROZEN, &f),
> + test_bit(SDF_WITHDRAWING, &f),
> + test_bit(SDF_WITHDRAW_IN_PROG, &f),
> + test_bit(SDF_REMOTE_WITHDRAW, &f),
> + test_bit(SDF_WITHDRAW_RECOVERY, &f),
> + spin_is_locked(&sdp->sd_log_lock),
> + spin_is_locked(&sdp->sd_statfs_spin),
> + spin_is_locked(&sdp->sd_rindex_spin),
> + spin_is_locked(&sdp->sd_jindex_spin),
> + spin_is_locked(&sdp->sd_trunc_lock),
> + spin_is_locked(&sdp->sd_bitmap_lock),
> + spin_is_locked(&sdp->sd_ordered_lock),
> + spin_is_locked(&sdp->sd_ail_lock),
> + sdp->sd_log_error,
> + rwsem_is_locked(&sdp->sd_log_flush_lock),
> + sdp->sd_log_num_revoke,
> + atomic_read(&sdp->sd_log_in_flight),
> + atomic_read(&sdp->sd_log_blks_needed),
> + atomic_read(&sdp->sd_log_blks_free),
> + sdp->sd_log_flush_head,
> + sdp->sd_log_flush_tail,
> + sdp->sd_log_blks_reserved,
> + atomic_read(&sdp->sd_log_revokes_available));
> + return s;
> +}
> +
> static ssize_t fsname_show(struct gfs2_sbd *sdp, char *buf)
> {
> return snprintf(buf, PAGE_SIZE, "%s\n", sdp->sd_fsname);
> @@ -283,6 +364,7 @@ GFS2_ATTR(quota_sync, 0200, NULL, quota_sync_store);
> GFS2_ATTR(quota_refresh_user, 0200, NULL, quota_refresh_user_store);
> GFS2_ATTR(quota_refresh_group, 0200, NULL, quota_refresh_group_store);
> GFS2_ATTR(demote_rq, 0200, NULL, demote_rq_store);
> +GFS2_ATTR(status, 0444, status_show, NULL);
Do non-root users need access to this? I'd be more comfortable with
0400, following the principle of least privilege.
Andy
>
> static struct attribute *gfs2_attrs[] = {
> &gfs2_attr_id.attr,
> @@ -295,6 +377,7 @@ static struct attribute *gfs2_attrs[] = {
> &gfs2_attr_quota_refresh_user.attr,
> &gfs2_attr_quota_refresh_group.attr,
> &gfs2_attr_demote_rq.attr,
> + &gfs2_attr_status.attr,
> NULL,
> };
> ATTRIBUTE_GROUPS(gfs2);
>
More information about the Cluster-devel
mailing list