[pnfs] [PATCH 13/37] pnfs: add inode ptr and accessor functions for pnfs_layout_type
Benny Halevy
bhalevy at panasas.com
Thu Jan 3 03:50:40 EST 2008
On Jan. 03, 2008, 0:17 +0200, Dean Hildebrand <seattleplus at gmail.com> wrote:
> I'm not sure about using capital letters for the accessor functions
> below. Aren't capital letters only used for #define? Why not make them
> macros?
I'm not sure that the rules regarding naming conventions for macros vs. inline
functions are that strict. I wanted to keep the convention used for the NFS_I()
static inline function or the NFS_SERVER() macro. Other than that I don't care
much whether these will be in upper or lower case.
Benny
> Dean
>>
>> +static inline struct inode *
>> +PNFS_INODE(struct pnfs_layout_type *lo)
>> +{
>> + return lo->inode;
>> +}
>> +
>> +static inline struct nfs_inode *
>> +PNFS_NFS_INODE(struct pnfs_layout_type *lo)
>> +{
>> + return NFS_I(PNFS_INODE(lo));
>> +}
>> +
>> +static inline struct nfs_server *
>> +PNFS_NFS_SERVER(struct pnfs_layout_type *lo)
>> +{
>> + return NFS_SERVER(PNFS_INODE(lo));
>> +}
>> +
>> +static inline struct pnfs_mount_type *
>> +PNFS_MOUNTID(struct pnfs_layout_type *lo)
>> +{
>> + return NFS_SERVER(PNFS_INODE(lo))->pnfs_mountid;
>> +}
>> +
>> +static inline struct pnfs_layoutdriver_type *
>> +PNFS_LD(struct pnfs_layout_type *lo)
>> +{
>> + return NFS_SERVER(PNFS_INODE(lo))->pnfs_curr_ld;
>> +}
>> +
>> +static inline struct layoutdriver_io_operations *
>> +PNFS_LD_IO_OPS(struct pnfs_layout_type *lo)
>> +{
>> + return PNFS_LD(lo)->ld_io_ops;
>> +}
>> +
>> +static inline struct layoutdriver_policy_operations *
>> +PNFS_LD_POLICY_OPS(struct pnfs_layout_type *lo)
>> +{
>> + return PNFS_LD(lo)->ld_policy_ops;
>> +}
>> +
>> /* Layout driver I/O operations.
>> * Either the pagecache or non-pagecache read/write operations must be implemented
>> */
>> @@ -41,26 +91,26 @@ struct layoutdriver_io_operations {
>> /* Functions that use the pagecache.
>> * If use_pagecache == 1, then these functions must be implemented.
>> */
>> - ssize_t (*read_pagelist) (struct pnfs_layout_type *layoutid, struct inode *, struct page **pages, unsigned int pgbase, unsigned nr_pages, loff_t offset, size_t count, struct nfs_read_data *nfs_data);
>> - ssize_t (*write_pagelist) (struct pnfs_layout_type *layoutid, struct inode *, struct page **pages, unsigned int pgbase, unsigned nr_pages, loff_t offset, size_t count, int sync, struct nfs_write_data *nfs_data);
>> + ssize_t (*read_pagelist) (struct pnfs_layout_type *layoutid, struct page **pages, unsigned int pgbase, unsigned nr_pages, loff_t offset, size_t count, struct nfs_read_data *nfs_data);
>> + ssize_t (*write_pagelist) (struct pnfs_layout_type *layoutid, struct page **pages, unsigned int pgbase, unsigned nr_pages, loff_t offset, size_t count, int sync, struct nfs_write_data *nfs_data);
>>
>> /* Consistency ops */
>> /* 2 problems:
>> * 1) the page list contains nfs_pages, NOT pages
>> * 2) currently the NFS code doesn't create a page array (as it does with read/write)
>> */
>> - int (*commit) (struct pnfs_layout_type *layoutid, struct inode *, struct list_head *, int sync, struct nfs_write_data *nfs_data);
>> + int (*commit) (struct pnfs_layout_type *layoutid, struct list_head *, int sync, struct nfs_write_data *nfs_data);
>>
>> /* Layout information. For each inode, alloc_layout is executed once to retrieve an
>> * inode specific layout structure. Each subsequent layoutget operation results in
>> * a set_layout call to set the opaque layout in the layout driver.*/
>> struct pnfs_layout_type * (*alloc_layout) (struct pnfs_mount_type *mountid, struct inode *inode);
>> int (*has_layout) (struct pnfs_layout_type *layoutid, struct inode *inode, struct nfs4_pnfs_layout_segment *range);
>> - void (*free_layout) (struct pnfs_layout_type **layoutidp, struct inode *inode, struct nfs4_pnfs_layout_segment *range);
>> - struct pnfs_layout_type * (*set_layout) (struct pnfs_layout_type *layoutid, struct inode *inode, struct nfs4_pnfs_layoutget_res *lgr);
>> + void (*free_layout) (struct pnfs_layout_type **layoutidp, struct nfs4_pnfs_layout_segment *range);
>> + struct pnfs_layout_type * (*set_layout) (struct pnfs_layout_type *layoutid, struct nfs4_pnfs_layoutget_res *lgr);
>>
>> - int (*setup_layoutcommit) (struct pnfs_layout_type *layoutid, struct inode *inode, struct pnfs_layoutcommit_arg *arg);
>> - void (*cleanup_layoutcommit) (struct pnfs_layout_type *layoutid, struct inode *inode, struct pnfs_layoutcommit_arg *arg, struct pnfs_layoutcommit_res *res);
>> + int (*setup_layoutcommit) (struct pnfs_layout_type *layoutid, struct pnfs_layoutcommit_arg *arg);
>> + void (*cleanup_layoutcommit) (struct pnfs_layout_type *layoutid, struct pnfs_layoutcommit_arg *arg, struct pnfs_layoutcommit_res *res);
>>
>> /* Registration information for a new mounted file system
>> */
>> @@ -73,7 +123,7 @@ struct layoutdriver_io_operations {
>>
>> struct layoutdriver_policy_operations {
>> /* The stripe size of the file system */
>> - ssize_t (*get_stripesize) (struct pnfs_layout_type *layoutid, struct inode *);
>> + ssize_t (*get_stripesize) (struct pnfs_layout_type *layoutid);
>>
>> /* Should the NFS req. gather algorithm cross stripe boundaries? */
>> int (*gather_across_stripes) (struct pnfs_mount_type *mountid);
>> @@ -103,14 +153,6 @@ struct layoutdriver_policy_operations {
>> int (*layoutret_on_setattr) (struct pnfs_mount_type *);
>> };
>>
>> -/* Per-layout driver specific registration structure */
>> -struct pnfs_layoutdriver_type {
>> - const u32 id;
>> - const char *name;
>> - struct layoutdriver_io_operations *ld_io_ops;
>> - struct layoutdriver_policy_operations *ld_policy_ops;
>> -};
>> -
>> struct pnfs_device {
>> int dev_id;
>> unsigned int dev_count;
>>
More information about the pNFS
mailing list