diff options
Diffstat (limited to 'include/linux/fs.h')
| -rw-r--r-- | include/linux/fs.h | 24 | 
1 files changed, 23 insertions, 1 deletions
diff --git a/include/linux/fs.h b/include/linux/fs.h index bb29b02d9bb6..4193a0bd99b0 100644 --- a/include/linux/fs.h +++ b/include/linux/fs.h @@ -18,6 +18,7 @@  #include <linux/pid.h>  #include <linux/bug.h>  #include <linux/mutex.h> +#include <linux/rwsem.h>  #include <linux/capability.h>  #include <linux/semaphore.h>  #include <linux/fiemap.h> @@ -401,7 +402,7 @@ struct address_space {  	atomic_t		i_mmap_writable;/* count VM_SHARED mappings */  	struct rb_root		i_mmap;		/* tree of private and shared mappings */  	struct list_head	i_mmap_nonlinear;/*list VM_NONLINEAR mappings */ -	struct mutex		i_mmap_mutex;	/* protect tree, count, list */ +	struct rw_semaphore	i_mmap_rwsem;	/* protect tree, count, list */  	/* Protected by tree_lock together with the radix tree */  	unsigned long		nrpages;	/* number of total pages */  	unsigned long		nrshadows;	/* number of shadow entries */ @@ -467,6 +468,26 @@ struct block_device {  int mapping_tagged(struct address_space *mapping, int tag); +static inline void i_mmap_lock_write(struct address_space *mapping) +{ +	down_write(&mapping->i_mmap_rwsem); +} + +static inline void i_mmap_unlock_write(struct address_space *mapping) +{ +	up_write(&mapping->i_mmap_rwsem); +} + +static inline void i_mmap_lock_read(struct address_space *mapping) +{ +	down_read(&mapping->i_mmap_rwsem); +} + +static inline void i_mmap_unlock_read(struct address_space *mapping) +{ +	up_read(&mapping->i_mmap_rwsem); +} +  /*   * Might pages of this file be mapped into userspace?   */ @@ -2075,6 +2096,7 @@ extern int vfs_open(const struct path *, struct file *, 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 struct filename *getname_flags(const char __user *, int, int *);  extern struct filename *getname(const char __user *);  extern struct filename *getname_kernel(const char *);  | 
