diff options
Diffstat (limited to 'include/linux/fs.h')
| -rw-r--r-- | include/linux/fs.h | 33 | 
1 files changed, 24 insertions, 9 deletions
diff --git a/include/linux/fs.h b/include/linux/fs.h index 17fd887c798..8fabb037a48 100644 --- a/include/linux/fs.h +++ b/include/linux/fs.h @@ -826,7 +826,7 @@ struct inode {  	struct list_head	i_lru;		/* inode LRU list */  	struct list_head	i_sb_list;  	union { -		struct list_head	i_dentry; +		struct hlist_head	i_dentry;  		struct rcu_head		i_rcu;  	};  	u64			i_version; @@ -1571,7 +1571,7 @@ extern void unlock_super(struct super_block *);  /*   * VFS helper functions..   */ -extern int vfs_create(struct inode *, struct dentry *, umode_t, struct nameidata *); +extern int vfs_create(struct inode *, struct dentry *, umode_t, bool);  extern int vfs_mkdir(struct inode *, struct dentry *, umode_t);  extern int vfs_mknod(struct inode *, struct dentry *, umode_t, dev_t);  extern int vfs_symlink(struct inode *, struct dentry *, const char *); @@ -1666,7 +1666,7 @@ struct file_operations {  };  struct inode_operations { -	struct dentry * (*lookup) (struct inode *,struct dentry *, struct nameidata *); +	struct dentry * (*lookup) (struct inode *,struct dentry *, unsigned int);  	void * (*follow_link) (struct dentry *, struct nameidata *);  	int (*permission) (struct inode *, int);  	struct posix_acl * (*get_acl)(struct inode *, int); @@ -1674,7 +1674,7 @@ struct inode_operations {  	int (*readlink) (struct dentry *, char __user *,int);  	void (*put_link) (struct dentry *, struct nameidata *, void *); -	int (*create) (struct inode *,struct dentry *,umode_t,struct nameidata *); +	int (*create) (struct inode *,struct dentry *, umode_t, bool);  	int (*link) (struct dentry *,struct inode *,struct dentry *);  	int (*unlink) (struct inode *,struct dentry *);  	int (*symlink) (struct inode *,struct dentry *,const char *); @@ -1693,6 +1693,9 @@ struct inode_operations {  	int (*fiemap)(struct inode *, struct fiemap_extent_info *, u64 start,  		      u64 len);  	int (*update_time)(struct inode *, struct timespec *, int); +	int (*atomic_open)(struct inode *, struct dentry *, +			   struct file *, unsigned open_flag, +			   umode_t create_mode, int *opened);  } ____cacheline_aligned;  struct seq_file; @@ -1911,7 +1914,7 @@ void free_anon_bdev(dev_t);  struct super_block *sget(struct file_system_type *type,  			int (*test)(struct super_block *,void *),  			int (*set)(struct super_block *,void *), -			void *data); +			int flags, void *data);  extern struct dentry *mount_pseudo(struct file_system_type *, char *,  	const struct super_operations *ops,  	const struct dentry_operations *dops, @@ -2057,10 +2060,17 @@ extern long do_sys_open(int dfd, const char __user *filename, int flags,  extern struct file *filp_open(const char *, int, umode_t);  extern struct file *file_open_root(struct dentry *, struct vfsmount *,  				   const char *, int); -extern struct file * dentry_open(struct dentry *, struct vfsmount *, int, -				 const struct cred *); +extern struct file * dentry_open(const struct path *, int, const struct cred *);  extern int filp_close(struct file *, fl_owner_t id);  extern char * getname(const char __user *); +enum { +	FILE_CREATED = 1, +	FILE_OPENED = 2 +}; +extern int finish_open(struct file *file, struct dentry *dentry, +			int (*open)(struct inode *, struct file *), +			int *opened); +extern int finish_no_open(struct file *file, struct dentry *dentry);  /* fs/ioctl.c */ @@ -2091,6 +2101,7 @@ extern sector_t blkdev_max_block(struct block_device *bdev);  extern void bd_forget(struct inode *inode);  extern void bdput(struct block_device *);  extern void invalidate_bdev(struct block_device *); +extern void iterate_bdevs(void (*)(struct block_device *, void *), void *);  extern int sync_blockdev(struct block_device *bdev);  extern void kill_bdev(struct block_device *);  extern struct super_block *freeze_bdev(struct block_device *); @@ -2112,6 +2123,10 @@ static inline int thaw_bdev(struct block_device *bdev, struct super_block *sb)  {  	return 0;  } + +static inline void iterate_bdevs(void (*f)(struct block_device *, void *), void *arg) +{ +}  #endif  extern int sync_filesystem(struct super_block *);  extern const struct file_operations def_blk_fops; @@ -2438,7 +2453,7 @@ extern loff_t noop_llseek(struct file *file, loff_t offset, int origin);  extern loff_t no_llseek(struct file *file, loff_t offset, int origin);  extern loff_t generic_file_llseek(struct file *file, loff_t offset, int origin);  extern loff_t generic_file_llseek_size(struct file *file, loff_t offset, -		int origin, loff_t maxsize); +		int origin, loff_t maxsize, loff_t eof);  extern int generic_file_open(struct inode * inode, struct file * filp);  extern int nonseekable_open(struct inode * inode, struct file * filp); @@ -2560,7 +2575,7 @@ extern int simple_write_end(struct file *file, struct address_space *mapping,  			loff_t pos, unsigned len, unsigned copied,  			struct page *page, void *fsdata); -extern struct dentry *simple_lookup(struct inode *, struct dentry *, struct nameidata *); +extern struct dentry *simple_lookup(struct inode *, struct dentry *, unsigned int flags);  extern ssize_t generic_read_dir(struct file *, char __user *, size_t, loff_t *);  extern const struct file_operations simple_dir_operations;  extern const struct inode_operations simple_dir_inode_operations;  |