xfs: add xlog sysfs kobject and attribute handlers
Embed a kobject into the xfs log data structure (xlog). This creates a 'log' subdirectory for every XFS mount instance in sysfs. The lifecycle of the log kobject is tied to the lifecycle of the log. Also define a set of generic attribute handlers associated with the log kobject in preparation for the addition of attributes. 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
							
								
									a31b1d3d89
								
							
						
					
					
						commit
						baff4e44b9
					
				| @ -34,6 +34,7 @@ | ||||
| #include "xfs_trace.h" | ||||
| #include "xfs_fsops.h" | ||||
| #include "xfs_cksum.h" | ||||
| #include "xfs_sysfs.h" | ||||
| 
 | ||||
| kmem_zone_t	*xfs_log_ticket_zone; | ||||
| 
 | ||||
| @ -707,6 +708,11 @@ xfs_log_mount( | ||||
| 		} | ||||
| 	} | ||||
| 
 | ||||
| 	error = xfs_sysfs_init(&mp->m_log->l_kobj, &xfs_log_ktype, &mp->m_kobj, | ||||
| 			       "log"); | ||||
| 	if (error) | ||||
| 		goto out_destroy_ail; | ||||
| 
 | ||||
| 	/* Normal transactions can now occur */ | ||||
| 	mp->m_log->l_flags &= ~XLOG_ACTIVE_RECOVERY; | ||||
| 
 | ||||
| @ -947,6 +953,9 @@ xfs_log_unmount( | ||||
| 	xfs_log_quiesce(mp); | ||||
| 
 | ||||
| 	xfs_trans_ail_destroy(mp); | ||||
| 
 | ||||
| 	xfs_sysfs_del(&mp->m_log->l_kobj); | ||||
| 
 | ||||
| 	xlog_dealloc_log(mp->m_log); | ||||
| } | ||||
| 
 | ||||
|  | ||||
| @ -405,6 +405,8 @@ struct xlog { | ||||
| 	struct xlog_grant_head	l_reserve_head; | ||||
| 	struct xlog_grant_head	l_write_head; | ||||
| 
 | ||||
| 	struct xfs_kobj		l_kobj; | ||||
| 
 | ||||
| 	/* The following field are used for debugging; need to hold icloglock */ | ||||
| #ifdef DEBUG | ||||
| 	char			*l_iclog_bak[XLOG_MAX_ICLOGS]; | ||||
|  | ||||
| @ -18,6 +18,9 @@ | ||||
| 
 | ||||
| #include "xfs.h" | ||||
| #include "xfs_sysfs.h" | ||||
| #include "xfs_log_format.h" | ||||
| #include "xfs_log.h" | ||||
| #include "xfs_log_priv.h" | ||||
| 
 | ||||
| struct xfs_sysfs_attr { | ||||
| 	struct attribute attr; | ||||
| @ -47,3 +50,52 @@ to_attr(struct attribute *attr) | ||||
| struct kobj_type xfs_mp_ktype = { | ||||
| 	.release = xfs_sysfs_release, | ||||
| }; | ||||
| 
 | ||||
| /* xlog */ | ||||
| 
 | ||||
| static struct attribute *xfs_log_attrs[] = { | ||||
| 	NULL, | ||||
| }; | ||||
| 
 | ||||
| static inline struct xlog * | ||||
| to_xlog(struct kobject *kobject) | ||||
| { | ||||
| 	struct xfs_kobj *kobj = to_kobj(kobject); | ||||
| 	return container_of(kobj, struct xlog, l_kobj); | ||||
| } | ||||
| 
 | ||||
| STATIC ssize_t | ||||
| xfs_log_show( | ||||
| 	struct kobject		*kobject, | ||||
| 	struct attribute	*attr, | ||||
| 	char			*buf) | ||||
| { | ||||
| 	struct xlog *log = to_xlog(kobject); | ||||
| 	struct xfs_sysfs_attr *xfs_attr = to_attr(attr); | ||||
| 
 | ||||
| 	return xfs_attr->show ? xfs_attr->show(buf, log) : 0; | ||||
| } | ||||
| 
 | ||||
| STATIC ssize_t | ||||
| xfs_log_store( | ||||
| 	struct kobject		*kobject, | ||||
| 	struct attribute	*attr, | ||||
| 	const char		*buf, | ||||
| 	size_t			count) | ||||
| { | ||||
| 	struct xlog *log = to_xlog(kobject); | ||||
| 	struct xfs_sysfs_attr *xfs_attr = to_attr(attr); | ||||
| 
 | ||||
| 	return xfs_attr->store ? xfs_attr->store(buf, count, log) : 0; | ||||
| } | ||||
| 
 | ||||
| static struct sysfs_ops xfs_log_ops = { | ||||
| 	.show = xfs_log_show, | ||||
| 	.store = xfs_log_store, | ||||
| }; | ||||
| 
 | ||||
| struct kobj_type xfs_log_ktype = { | ||||
| 	.release = xfs_sysfs_release, | ||||
| 	.sysfs_ops = &xfs_log_ops, | ||||
| 	.default_attrs = xfs_log_attrs, | ||||
| }; | ||||
|  | ||||
| @ -20,6 +20,7 @@ | ||||
| #define __XFS_SYSFS_H__ | ||||
| 
 | ||||
| extern struct kobj_type xfs_mp_ktype;	/* xfs_mount */ | ||||
| extern struct kobj_type xfs_log_ktype;	/* xlog */ | ||||
| 
 | ||||
| static inline struct xfs_kobj * | ||||
| to_kobj(struct kobject *kobject) | ||||
|  | ||||
		Loading…
	
		Reference in New Issue
	
	Block a user