[Ocfs2-devel] [PATCH 1/2] Ocfs2: Add new ioctls prototype and corresponding data structure to ocfs2 header.

Sunil Mushran sunil.mushran at oracle.com
Mon Nov 30 14:57:48 PST 2009


Tristan Ye wrote:
> We use OCFS2_IOC_INFO to manipulate the new ioctl, the requests can
> be stored in a array of (struct ocfs2_info_request), which should be
> NULL-terminated, kernel therefore can recoginze and fill them one by
> one.
>
> The reason why we need these ioctls is to offer the none-privileged
> end-user a possibility to get filesys info gathering.
>
> Idea here is to make the spearated request small enough to guarantee
> a better backward&forward compatibility since a small piece of request
> would be less likely to be broken if filesys on raw disk get changed.
>
> Currently, the first version include following request type:
>
> 	OCFS2_INFO_CLUSTERSIZE,
> 	OCFS2_INFO_BLOCKSIZE,
> 	OCFS2_INFO_SLOTNUM,
> 	OCFS2_INFO_LABEL,
> 	OCFS2_INFO_UUID,
> 	OCFS2_INFO_FS_FEATURES
>
> It may be grown from time to time:)
>
> Signed-off-by: Tristan Ye <tristan.ye at oracle.com>
> ---
>  fs/ocfs2/ocfs2_fs.h |   69 +++++++++++++++++++++++++++++++++++++++++++++++++++
>  1 files changed, 69 insertions(+), 0 deletions(-)
>
> diff --git a/fs/ocfs2/ocfs2_fs.h b/fs/ocfs2/ocfs2_fs.h
> index e9431e4..dac7f4c 100644
> --- a/fs/ocfs2/ocfs2_fs.h
> +++ b/fs/ocfs2/ocfs2_fs.h
> @@ -309,6 +309,75 @@ struct reflink_arguments {
>  };
>  #define OCFS2_IOC_REFLINK	_IOW('o', 4, struct reflink_arguments)
>  
> +#define OCFS2_UUID_LEN              16
> +#define OCFS2_MAX_LABEL_LEN         64
>   

What's wrong with the existing OCFS2_MAX_VOL_LABEL_LEN?
For UUID, maybe define:
#define OCFS2_VOL_UUIDSTR_LEN (OCFS2_VOL_UUID_LEN * 2 + 1)

> +
> +/*
> + * Used to query fs information for none-privileged 
> + * users by using OCFS2_IOC_INFO ioctols, a series of
> + * following requests need to be NULL-terminated.
> + *
> + * Always try to separate info request into small pieces to
> + * guarantee the backward&forward compatibility.
> + */
> +struct ocfs2_info_request {
> +	__u32 ir_code;	/* Info request code */
> +	__u32 ir_flags; /* Request flags */
> +};
> +

Rename it ocfs2_info. Then you have ocfs2_info_clustersize. In the next
patch you have typedef-ed these structures presumably because the structure
name is long. Instead, shorten the name and use it as is. BTW, typedef-ing
struct is strongly discouraged in the kernel coding standards. For good 
reason.

> +struct ocfs2_info_request_clustersize {
> +	struct ocfs2_info_request ir_request;
> +	__u32 ir_clustersize;
> +};
> +
> +struct ocfs2_info_request_blocksize {
> +	struct ocfs2_info_request ir_request;
> +	__u32 ir_blocksize;
> +};
> +
> +struct ocfs2_info_request_slotnum {
> +	struct ocfs2_info_request ir_request;
> +	__u16 ir_slotnum;
> +};
> +
> +struct ocfs2_info_request_label {
> +	struct ocfs2_info_request ir_request;
> +	__u8	ir_label[OCFS2_MAX_LABEL_LEN];
> +};
> +
> +struct ocfs2_info_request_uuid {
> +	struct ocfs2_info_request ir_request;
> +	__u8	ir_uuid[OCFS2_UUID_LEN];
> +};
>   

Return the uuid string as that is what we use everywhere.

> +
> +struct ocfs2_info_request_fs_features {
> +	struct ocfs2_info_request ir_quest;
> +	__u32 ir_compat_features;
> +	__u32 ir_incompat_features;
> +	__u32 ir_ro_compat_features;
> +};
> +
> +/* Codes for cfs2_info_request */
> +
> +#define OCFS2_INFO_CLUSTERSIZE	0x00000001
> +#define OCFS2_INFO_BLOCKSIZE	0x00000002
> +#define OCFS2_INFO_SLOTNUM      0x00000004
> +#define OCFS2_INFO_LABEL        0x00000008
> +#define OCFS2_INFO_UUID         0x00000010
> +#define OCFS2_INFO_FS_FEATURES	0x00000020
>   

Fix typos, white-spaces, etc. Make use of tabs.

> +
> +/* Flags for struct ocfs2_info_request */
> +/* Filled by the caller */
> +#define OCFS2_INFO_FL_NON_COHERENT  0x00000001  /* Cluster coherency not required.
> +						   This is a hint.  It is up to
> +						   ocfs2 whether the request can
> +						   be fulfilled without locking. */
> +/* Filled by ocfs2 */
> +#define OCFS2_INFO_FL_FILLED        0x80000000  /* Filesystem understood this
> +						   request and filled in the
> +						   answer */
> +
> +#define OCFS2_IOC_INFO		_IOR('o', 5, struct ocfs2_info_request)
>  
>  /*
>   * Journal Flags (ocfs2_dinode.id1.journal1.i_flags)
>   




More information about the Ocfs2-devel mailing list