xfs: add log attributes for log lsn and grant head data
Create log attributes to export the current runtime state of the log to sysfs. Note that the filesystem should be frozen for consistency across attributes. The following per-mount attributes are created: log_head_lsn, log_tail_lsn, reserve_grant_head and write_grant_head. These represent the physical log head, tail and reserve and write grant heads respectively. Attribute values are exported in the following format: "cycle:[block,byte]" ... where cycle represents the log cycle and [block,bytes] represents either the basic block or byte offset of the log, depending on the attribute. Log sequence number (LSN) values are encoded in basic blocks and grant heads are encoded in bytes. All values are in decimal format. Signed-off-by: Brian Foster <bfoster@redhat.com> Reviewed-by: Dave Chinner <dchinner@redhat.com> Signed-off-by: Dave Chinner <david@fromorbit.com>
This commit is contained in:
parent
baff4e44b9
commit
80d6d69821
1 changed files with 64 additions and 0 deletions
|
@ -53,7 +53,71 @@ struct kobj_type xfs_mp_ktype = {
|
|||
|
||||
/* xlog */
|
||||
|
||||
STATIC ssize_t
|
||||
log_head_lsn_show(
|
||||
char *buf,
|
||||
void *data)
|
||||
{
|
||||
struct xlog *log = data;
|
||||
int cycle;
|
||||
int block;
|
||||
|
||||
spin_lock(&log->l_icloglock);
|
||||
cycle = log->l_curr_cycle;
|
||||
block = log->l_curr_block;
|
||||
spin_unlock(&log->l_icloglock);
|
||||
|
||||
return snprintf(buf, PAGE_SIZE, "%d:%d\n", cycle, block);
|
||||
}
|
||||
XFS_SYSFS_ATTR_RO(log_head_lsn);
|
||||
|
||||
STATIC ssize_t
|
||||
log_tail_lsn_show(
|
||||
char *buf,
|
||||
void *data)
|
||||
{
|
||||
struct xlog *log = data;
|
||||
int cycle;
|
||||
int block;
|
||||
|
||||
xlog_crack_atomic_lsn(&log->l_tail_lsn, &cycle, &block);
|
||||
return snprintf(buf, PAGE_SIZE, "%d:%d\n", cycle, block);
|
||||
}
|
||||
XFS_SYSFS_ATTR_RO(log_tail_lsn);
|
||||
|
||||
STATIC ssize_t
|
||||
reserve_grant_head_show(
|
||||
char *buf,
|
||||
void *data)
|
||||
{
|
||||
struct xlog *log = data;
|
||||
int cycle;
|
||||
int bytes;
|
||||
|
||||
xlog_crack_grant_head(&log->l_reserve_head.grant, &cycle, &bytes);
|
||||
return snprintf(buf, PAGE_SIZE, "%d:%d\n", cycle, bytes);
|
||||
}
|
||||
XFS_SYSFS_ATTR_RO(reserve_grant_head);
|
||||
|
||||
STATIC ssize_t
|
||||
write_grant_head_show(
|
||||
char *buf,
|
||||
void *data)
|
||||
{
|
||||
struct xlog *log = data;
|
||||
int cycle;
|
||||
int bytes;
|
||||
|
||||
xlog_crack_grant_head(&log->l_write_head.grant, &cycle, &bytes);
|
||||
return snprintf(buf, PAGE_SIZE, "%d:%d\n", cycle, bytes);
|
||||
}
|
||||
XFS_SYSFS_ATTR_RO(write_grant_head);
|
||||
|
||||
static struct attribute *xfs_log_attrs[] = {
|
||||
ATTR_LIST(log_head_lsn),
|
||||
ATTR_LIST(log_tail_lsn),
|
||||
ATTR_LIST(reserve_grant_head),
|
||||
ATTR_LIST(write_grant_head),
|
||||
NULL,
|
||||
};
|
||||
|
||||
|
|
Loading…
Reference in a new issue