diff options
Diffstat (limited to 'Documentation/filesystems')
| -rw-r--r-- | Documentation/filesystems/Locking | 8 | ||||
| -rw-r--r-- | Documentation/filesystems/configfs/configfs.txt | 2 | ||||
| -rw-r--r-- | Documentation/filesystems/debugfs.txt | 56 | ||||
| -rw-r--r-- | Documentation/filesystems/sysfs.txt | 2 | ||||
| -rw-r--r-- | Documentation/filesystems/vfs.txt | 8 | 
5 files changed, 53 insertions, 23 deletions
diff --git a/Documentation/filesystems/Locking b/Documentation/filesystems/Locking index d819ba16a0c..4fca82e5276 100644 --- a/Documentation/filesystems/Locking +++ b/Documentation/filesystems/Locking @@ -37,15 +37,15 @@ d_manage:	no		no		yes (ref-walk)	maybe  --------------------------- inode_operations ---------------------------   prototypes: -	int (*create) (struct inode *,struct dentry *,int, struct nameidata *); +	int (*create) (struct inode *,struct dentry *,umode_t, struct nameidata *);  	struct dentry * (*lookup) (struct inode *,struct dentry *, struct nameid  ata *);  	int (*link) (struct dentry *,struct inode *,struct dentry *);  	int (*unlink) (struct inode *,struct dentry *);  	int (*symlink) (struct inode *,struct dentry *,const char *); -	int (*mkdir) (struct inode *,struct dentry *,int); +	int (*mkdir) (struct inode *,struct dentry *,umode_t);  	int (*rmdir) (struct inode *,struct dentry *); -	int (*mknod) (struct inode *,struct dentry *,int,dev_t); +	int (*mknod) (struct inode *,struct dentry *,umode_t,dev_t);  	int (*rename) (struct inode *, struct dentry *,  			struct inode *, struct dentry *);  	int (*readlink) (struct dentry *, char __user *,int); @@ -117,7 +117,7 @@ prototypes:  	int (*statfs) (struct dentry *, struct kstatfs *);  	int (*remount_fs) (struct super_block *, int *, char *);  	void (*umount_begin) (struct super_block *); -	int (*show_options)(struct seq_file *, struct vfsmount *); +	int (*show_options)(struct seq_file *, struct dentry *);  	ssize_t (*quota_read)(struct super_block *, int, char *, size_t, loff_t);  	ssize_t (*quota_write)(struct super_block *, int, const char *, size_t, loff_t);  	int (*bdev_try_to_free_page)(struct super_block*, struct page*, gfp_t); diff --git a/Documentation/filesystems/configfs/configfs.txt b/Documentation/filesystems/configfs/configfs.txt index dd57bb6bb39..b40fec9d3f5 100644 --- a/Documentation/filesystems/configfs/configfs.txt +++ b/Documentation/filesystems/configfs/configfs.txt @@ -192,7 +192,7 @@ attribute value uses the store_attribute() method.  	struct configfs_attribute {  		char                    *ca_name;  		struct module           *ca_owner; -		mode_t                  ca_mode; +		umode_t                  ca_mode;  	};  When a config_item wants an attribute to appear as a file in the item's diff --git a/Documentation/filesystems/debugfs.txt b/Documentation/filesystems/debugfs.txt index 742cc06e138..6872c91bce3 100644 --- a/Documentation/filesystems/debugfs.txt +++ b/Documentation/filesystems/debugfs.txt @@ -35,7 +35,7 @@ described below will work.  The most general way to create a file within a debugfs directory is with: -    struct dentry *debugfs_create_file(const char *name, mode_t mode, +    struct dentry *debugfs_create_file(const char *name, umode_t mode,  				       struct dentry *parent, void *data,  				       const struct file_operations *fops); @@ -53,13 +53,13 @@ actually necessary; the debugfs code provides a number of helper functions  for simple situations.  Files containing a single integer value can be  created with any of: -    struct dentry *debugfs_create_u8(const char *name, mode_t mode, +    struct dentry *debugfs_create_u8(const char *name, umode_t mode,  				     struct dentry *parent, u8 *value); -    struct dentry *debugfs_create_u16(const char *name, mode_t mode, +    struct dentry *debugfs_create_u16(const char *name, umode_t mode,  				      struct dentry *parent, u16 *value); -    struct dentry *debugfs_create_u32(const char *name, mode_t mode, +    struct dentry *debugfs_create_u32(const char *name, umode_t mode,  				      struct dentry *parent, u32 *value); -    struct dentry *debugfs_create_u64(const char *name, mode_t mode, +    struct dentry *debugfs_create_u64(const char *name, umode_t mode,  				      struct dentry *parent, u64 *value);  These files support both reading and writing the given value; if a specific @@ -67,13 +67,13 @@ file should not be written to, simply set the mode bits accordingly.  The  values in these files are in decimal; if hexadecimal is more appropriate,  the following functions can be used instead: -    struct dentry *debugfs_create_x8(const char *name, mode_t mode, +    struct dentry *debugfs_create_x8(const char *name, umode_t mode,  				     struct dentry *parent, u8 *value); -    struct dentry *debugfs_create_x16(const char *name, mode_t mode, +    struct dentry *debugfs_create_x16(const char *name, umode_t mode,  				      struct dentry *parent, u16 *value); -    struct dentry *debugfs_create_x32(const char *name, mode_t mode, +    struct dentry *debugfs_create_x32(const char *name, umode_t mode,  				      struct dentry *parent, u32 *value); -    struct dentry *debugfs_create_x64(const char *name, mode_t mode, +    struct dentry *debugfs_create_x64(const char *name, umode_t mode,  				      struct dentry *parent, u64 *value);  These functions are useful as long as the developer knows the size of the @@ -81,7 +81,7 @@ value to be exported.  Some types can have different widths on different  architectures, though, complicating the situation somewhat.  There is a  function meant to help out in one special case: -    struct dentry *debugfs_create_size_t(const char *name, mode_t mode, +    struct dentry *debugfs_create_size_t(const char *name, umode_t mode,  				         struct dentry *parent,   					 size_t *value); @@ -90,21 +90,22 @@ a variable of type size_t.  Boolean values can be placed in debugfs with: -    struct dentry *debugfs_create_bool(const char *name, mode_t mode, +    struct dentry *debugfs_create_bool(const char *name, umode_t mode,  				       struct dentry *parent, u32 *value);  A read on the resulting file will yield either Y (for non-zero values) or  N, followed by a newline.  If written to, it will accept either upper- or  lower-case values, or 1 or 0.  Any other input will be silently ignored. -Finally, a block of arbitrary binary data can be exported with: +Another option is exporting a block of arbitrary binary data, with +this structure and function:      struct debugfs_blob_wrapper {  	void *data;  	unsigned long size;      }; -    struct dentry *debugfs_create_blob(const char *name, mode_t mode, +    struct dentry *debugfs_create_blob(const char *name, umode_t mode,  				       struct dentry *parent,  				       struct debugfs_blob_wrapper *blob); @@ -115,6 +116,35 @@ can be used to export binary information, but there does not appear to be  any code which does so in the mainline.  Note that all files created with  debugfs_create_blob() are read-only. +If you want to dump a block of registers (something that happens quite +often during development, even if little such code reaches mainline. +Debugfs offers two functions: one to make a registers-only file, and +another to insert a register block in the middle of another sequential +file. + +    struct debugfs_reg32 { +	char *name; +	unsigned long offset; +    }; + +    struct debugfs_regset32 { +	struct debugfs_reg32 *regs; +	int nregs; +	void __iomem *base; +    }; + +    struct dentry *debugfs_create_regset32(const char *name, mode_t mode, +				     struct dentry *parent, +				     struct debugfs_regset32 *regset); + +    int debugfs_print_regs32(struct seq_file *s, struct debugfs_reg32 *regs, +			 int nregs, void __iomem *base, char *prefix); + +The "base" argument may be 0, but you may want to build the reg32 array +using __stringify, and a number of register names (macros) are actually +byte offsets over a base for the register block. + +  There are a couple of other directory-oriented helper functions:      struct dentry *debugfs_rename(struct dentry *old_dir,  diff --git a/Documentation/filesystems/sysfs.txt b/Documentation/filesystems/sysfs.txt index 07235caec22..a6619b7064b 100644 --- a/Documentation/filesystems/sysfs.txt +++ b/Documentation/filesystems/sysfs.txt @@ -70,7 +70,7 @@ An attribute definition is simply:  struct attribute {          char                    * name;          struct module		*owner; -        mode_t                  mode; +        umode_t                 mode;  }; diff --git a/Documentation/filesystems/vfs.txt b/Documentation/filesystems/vfs.txt index 43cbd082172..3d9393b845b 100644 --- a/Documentation/filesystems/vfs.txt +++ b/Documentation/filesystems/vfs.txt @@ -225,7 +225,7 @@ struct super_operations {          void (*clear_inode) (struct inode *);          void (*umount_begin) (struct super_block *); -        int (*show_options)(struct seq_file *, struct vfsmount *); +        int (*show_options)(struct seq_file *, struct dentry *);          ssize_t (*quota_read)(struct super_block *, int, char *, size_t, loff_t);          ssize_t (*quota_write)(struct super_block *, int, const char *, size_t, loff_t); @@ -341,14 +341,14 @@ This describes how the VFS can manipulate an inode in your  filesystem. As of kernel 2.6.22, the following members are defined:  struct inode_operations { -	int (*create) (struct inode *,struct dentry *,int, struct nameidata *); +	int (*create) (struct inode *,struct dentry *, umode_t, struct nameidata *);  	struct dentry * (*lookup) (struct inode *,struct dentry *, struct nameidata *);  	int (*link) (struct dentry *,struct inode *,struct dentry *);  	int (*unlink) (struct inode *,struct dentry *);  	int (*symlink) (struct inode *,struct dentry *,const char *); -	int (*mkdir) (struct inode *,struct dentry *,int); +	int (*mkdir) (struct inode *,struct dentry *,umode_t);  	int (*rmdir) (struct inode *,struct dentry *); -	int (*mknod) (struct inode *,struct dentry *,int,dev_t); +	int (*mknod) (struct inode *,struct dentry *,umode_t,dev_t);  	int (*rename) (struct inode *, struct dentry *,  			struct inode *, struct dentry *);  	int (*readlink) (struct dentry *, char __user *,int);  |