diff options
Diffstat (limited to 'include/linux')
| -rw-r--r-- | include/linux/dcache.h | 11 | ||||
| -rw-r--r-- | include/linux/fs.h | 49 | ||||
| -rw-r--r-- | include/linux/fsnotify.h | 8 |
3 files changed, 36 insertions, 32 deletions
diff --git a/include/linux/dcache.h b/include/linux/dcache.h index 1a6bb81f0fe5..f42dbe145479 100644 --- a/include/linux/dcache.h +++ b/include/linux/dcache.h | |||
| @@ -146,10 +146,8 @@ enum dentry_d_lock_class | |||
| 146 | struct dentry_operations { | 146 | struct dentry_operations { |
| 147 | int (*d_revalidate)(struct dentry *, unsigned int); | 147 | int (*d_revalidate)(struct dentry *, unsigned int); |
| 148 | int (*d_weak_revalidate)(struct dentry *, unsigned int); | 148 | int (*d_weak_revalidate)(struct dentry *, unsigned int); |
| 149 | int (*d_hash)(const struct dentry *, const struct inode *, | 149 | int (*d_hash)(const struct dentry *, struct qstr *); |
| 150 | struct qstr *); | 150 | int (*d_compare)(const struct dentry *, const struct dentry *, |
| 151 | int (*d_compare)(const struct dentry *, const struct inode *, | ||
| 152 | const struct dentry *, const struct inode *, | ||
| 153 | unsigned int, const char *, const struct qstr *); | 151 | unsigned int, const char *, const struct qstr *); |
| 154 | int (*d_delete)(const struct dentry *); | 152 | int (*d_delete)(const struct dentry *); |
| 155 | void (*d_release)(struct dentry *); | 153 | void (*d_release)(struct dentry *); |
| @@ -246,6 +244,8 @@ extern struct dentry * d_make_root(struct inode *); | |||
| 246 | /* <clickety>-<click> the ramfs-type tree */ | 244 | /* <clickety>-<click> the ramfs-type tree */ |
| 247 | extern void d_genocide(struct dentry *); | 245 | extern void d_genocide(struct dentry *); |
| 248 | 246 | ||
| 247 | extern void d_tmpfile(struct dentry *, struct inode *); | ||
| 248 | |||
| 249 | extern struct dentry *d_find_alias(struct inode *); | 249 | extern struct dentry *d_find_alias(struct inode *); |
| 250 | extern void d_prune_aliases(struct inode *); | 250 | extern void d_prune_aliases(struct inode *); |
| 251 | 251 | ||
| @@ -300,8 +300,7 @@ extern struct dentry *d_lookup(const struct dentry *, const struct qstr *); | |||
| 300 | extern struct dentry *d_hash_and_lookup(struct dentry *, struct qstr *); | 300 | extern struct dentry *d_hash_and_lookup(struct dentry *, struct qstr *); |
| 301 | extern struct dentry *__d_lookup(const struct dentry *, const struct qstr *); | 301 | extern struct dentry *__d_lookup(const struct dentry *, const struct qstr *); |
| 302 | extern struct dentry *__d_lookup_rcu(const struct dentry *parent, | 302 | extern struct dentry *__d_lookup_rcu(const struct dentry *parent, |
| 303 | const struct qstr *name, | 303 | const struct qstr *name, unsigned *seq); |
| 304 | unsigned *seq, struct inode *inode); | ||
| 305 | 304 | ||
| 306 | /** | 305 | /** |
| 307 | * __d_rcu_to_refcount - take a refcount on dentry if sequence check is ok | 306 | * __d_rcu_to_refcount - take a refcount on dentry if sequence check is ok |
diff --git a/include/linux/fs.h b/include/linux/fs.h index f8a5240541b7..2b82c8041490 100644 --- a/include/linux/fs.h +++ b/include/linux/fs.h | |||
| @@ -908,6 +908,7 @@ struct file_lock_operations { | |||
| 908 | 908 | ||
| 909 | struct lock_manager_operations { | 909 | struct lock_manager_operations { |
| 910 | int (*lm_compare_owner)(struct file_lock *, struct file_lock *); | 910 | int (*lm_compare_owner)(struct file_lock *, struct file_lock *); |
| 911 | unsigned long (*lm_owner_key)(struct file_lock *); | ||
| 911 | void (*lm_notify)(struct file_lock *); /* unblock callback */ | 912 | void (*lm_notify)(struct file_lock *); /* unblock callback */ |
| 912 | int (*lm_grant)(struct file_lock *, struct file_lock *, int); | 913 | int (*lm_grant)(struct file_lock *, struct file_lock *, int); |
| 913 | void (*lm_break)(struct file_lock *); | 914 | void (*lm_break)(struct file_lock *); |
| @@ -926,9 +927,27 @@ int locks_in_grace(struct net *); | |||
| 926 | /* that will die - we need it for nfs_lock_info */ | 927 | /* that will die - we need it for nfs_lock_info */ |
| 927 | #include <linux/nfs_fs_i.h> | 928 | #include <linux/nfs_fs_i.h> |
| 928 | 929 | ||
| 930 | /* | ||
| 931 | * struct file_lock represents a generic "file lock". It's used to represent | ||
| 932 | * POSIX byte range locks, BSD (flock) locks, and leases. It's important to | ||
| 933 | * note that the same struct is used to represent both a request for a lock and | ||
| 934 | * the lock itself, but the same object is never used for both. | ||
| 935 | * | ||
| 936 | * FIXME: should we create a separate "struct lock_request" to help distinguish | ||
| 937 | * these two uses? | ||
| 938 | * | ||
| 939 | * The i_flock list is ordered by: | ||
| 940 | * | ||
| 941 | * 1) lock type -- FL_LEASEs first, then FL_FLOCK, and finally FL_POSIX | ||
| 942 | * 2) lock owner | ||
| 943 | * 3) lock range start | ||
| 944 | * 4) lock range end | ||
| 945 | * | ||
| 946 | * Obviously, the last two criteria only matter for POSIX locks. | ||
| 947 | */ | ||
| 929 | struct file_lock { | 948 | struct file_lock { |
| 930 | struct file_lock *fl_next; /* singly linked list for this inode */ | 949 | struct file_lock *fl_next; /* singly linked list for this inode */ |
| 931 | struct list_head fl_link; /* doubly linked list of all locks */ | 950 | struct hlist_node fl_link; /* node in global lists */ |
| 932 | struct list_head fl_block; /* circular list of blocked processes */ | 951 | struct list_head fl_block; /* circular list of blocked processes */ |
| 933 | fl_owner_t fl_owner; | 952 | fl_owner_t fl_owner; |
| 934 | unsigned int fl_flags; | 953 | unsigned int fl_flags; |
| @@ -994,7 +1013,7 @@ extern void locks_release_private(struct file_lock *); | |||
| 994 | extern void posix_test_lock(struct file *, struct file_lock *); | 1013 | extern void posix_test_lock(struct file *, struct file_lock *); |
| 995 | extern int posix_lock_file(struct file *, struct file_lock *, struct file_lock *); | 1014 | extern int posix_lock_file(struct file *, struct file_lock *, struct file_lock *); |
| 996 | extern int posix_lock_file_wait(struct file *, struct file_lock *); | 1015 | extern int posix_lock_file_wait(struct file *, struct file_lock *); |
| 997 | extern int posix_unblock_lock(struct file *, struct file_lock *); | 1016 | extern int posix_unblock_lock(struct file_lock *); |
| 998 | extern int vfs_test_lock(struct file *, struct file_lock *); | 1017 | extern int vfs_test_lock(struct file *, struct file_lock *); |
| 999 | extern int vfs_lock_file(struct file *, unsigned int, struct file_lock *, struct file_lock *); | 1018 | extern int vfs_lock_file(struct file *, unsigned int, struct file_lock *, struct file_lock *); |
| 1000 | extern int vfs_cancel_lock(struct file *filp, struct file_lock *fl); | 1019 | extern int vfs_cancel_lock(struct file *filp, struct file_lock *fl); |
| @@ -1006,9 +1025,6 @@ extern int vfs_setlease(struct file *, long, struct file_lock **); | |||
| 1006 | extern int lease_modify(struct file_lock **, int); | 1025 | extern int lease_modify(struct file_lock **, int); |
| 1007 | extern int lock_may_read(struct inode *, loff_t start, unsigned long count); | 1026 | extern int lock_may_read(struct inode *, loff_t start, unsigned long count); |
| 1008 | extern int lock_may_write(struct inode *, loff_t start, unsigned long count); | 1027 | extern int lock_may_write(struct inode *, loff_t start, unsigned long count); |
| 1009 | extern void locks_delete_block(struct file_lock *waiter); | ||
| 1010 | extern void lock_flocks(void); | ||
| 1011 | extern void unlock_flocks(void); | ||
| 1012 | #else /* !CONFIG_FILE_LOCKING */ | 1028 | #else /* !CONFIG_FILE_LOCKING */ |
| 1013 | static inline int fcntl_getlk(struct file *file, struct flock __user *user) | 1029 | static inline int fcntl_getlk(struct file *file, struct flock __user *user) |
| 1014 | { | 1030 | { |
| @@ -1084,8 +1100,7 @@ static inline int posix_lock_file_wait(struct file *filp, struct file_lock *fl) | |||
| 1084 | return -ENOLCK; | 1100 | return -ENOLCK; |
| 1085 | } | 1101 | } |
| 1086 | 1102 | ||
| 1087 | static inline int posix_unblock_lock(struct file *filp, | 1103 | static inline int posix_unblock_lock(struct file_lock *waiter) |
| 1088 | struct file_lock *waiter) | ||
| 1089 | { | 1104 | { |
| 1090 | return -ENOENT; | 1105 | return -ENOENT; |
| 1091 | } | 1106 | } |
| @@ -1150,19 +1165,6 @@ static inline int lock_may_write(struct inode *inode, loff_t start, | |||
| 1150 | { | 1165 | { |
| 1151 | return 1; | 1166 | return 1; |
| 1152 | } | 1167 | } |
| 1153 | |||
| 1154 | static inline void locks_delete_block(struct file_lock *waiter) | ||
| 1155 | { | ||
| 1156 | } | ||
| 1157 | |||
| 1158 | static inline void lock_flocks(void) | ||
| 1159 | { | ||
| 1160 | } | ||
| 1161 | |||
| 1162 | static inline void unlock_flocks(void) | ||
| 1163 | { | ||
| 1164 | } | ||
| 1165 | |||
| 1166 | #endif /* !CONFIG_FILE_LOCKING */ | 1168 | #endif /* !CONFIG_FILE_LOCKING */ |
| 1167 | 1169 | ||
| 1168 | 1170 | ||
| @@ -1580,6 +1582,7 @@ struct inode_operations { | |||
| 1580 | int (*atomic_open)(struct inode *, struct dentry *, | 1582 | int (*atomic_open)(struct inode *, struct dentry *, |
| 1581 | struct file *, unsigned open_flag, | 1583 | struct file *, unsigned open_flag, |
| 1582 | umode_t create_mode, int *opened); | 1584 | umode_t create_mode, int *opened); |
| 1585 | int (*tmpfile) (struct inode *, struct dentry *, umode_t); | ||
| 1583 | } ____cacheline_aligned; | 1586 | } ____cacheline_aligned; |
| 1584 | 1587 | ||
| 1585 | ssize_t rw_copy_check_uvector(int type, const struct iovec __user * uvector, | 1588 | ssize_t rw_copy_check_uvector(int type, const struct iovec __user * uvector, |
| @@ -1743,6 +1746,7 @@ struct super_operations { | |||
| 1743 | #define I_REFERENCED (1 << 8) | 1746 | #define I_REFERENCED (1 << 8) |
| 1744 | #define __I_DIO_WAKEUP 9 | 1747 | #define __I_DIO_WAKEUP 9 |
| 1745 | #define I_DIO_WAKEUP (1 << I_DIO_WAKEUP) | 1748 | #define I_DIO_WAKEUP (1 << I_DIO_WAKEUP) |
| 1749 | #define I_LINKABLE (1 << 10) | ||
| 1746 | 1750 | ||
| 1747 | #define I_DIRTY (I_DIRTY_SYNC | I_DIRTY_DATASYNC | I_DIRTY_PAGES) | 1751 | #define I_DIRTY (I_DIRTY_SYNC | I_DIRTY_DATASYNC | I_DIRTY_PAGES) |
| 1748 | 1752 | ||
| @@ -1896,7 +1900,6 @@ extern int current_umask(void); | |||
| 1896 | extern struct kobject *fs_kobj; | 1900 | extern struct kobject *fs_kobj; |
| 1897 | 1901 | ||
| 1898 | #define MAX_RW_COUNT (INT_MAX & PAGE_CACHE_MASK) | 1902 | #define MAX_RW_COUNT (INT_MAX & PAGE_CACHE_MASK) |
| 1899 | extern int rw_verify_area(int, struct file *, loff_t *, size_t); | ||
| 1900 | 1903 | ||
| 1901 | #define FLOCK_VERIFY_READ 1 | 1904 | #define FLOCK_VERIFY_READ 1 |
| 1902 | #define FLOCK_VERIFY_WRITE 2 | 1905 | #define FLOCK_VERIFY_WRITE 2 |
| @@ -2309,7 +2312,6 @@ extern struct file * open_exec(const char *); | |||
| 2309 | /* fs/dcache.c -- generic fs support functions */ | 2312 | /* fs/dcache.c -- generic fs support functions */ |
| 2310 | extern int is_subdir(struct dentry *, struct dentry *); | 2313 | extern int is_subdir(struct dentry *, struct dentry *); |
| 2311 | extern int path_is_under(struct path *, struct path *); | 2314 | extern int path_is_under(struct path *, struct path *); |
| 2312 | extern ino_t find_inode_number(struct dentry *, struct qstr *); | ||
| 2313 | 2315 | ||
| 2314 | #include <linux/err.h> | 2316 | #include <linux/err.h> |
| 2315 | 2317 | ||
| @@ -2424,9 +2426,12 @@ extern void | |||
| 2424 | file_ra_state_init(struct file_ra_state *ra, struct address_space *mapping); | 2426 | file_ra_state_init(struct file_ra_state *ra, struct address_space *mapping); |
| 2425 | extern loff_t noop_llseek(struct file *file, loff_t offset, int whence); | 2427 | extern loff_t noop_llseek(struct file *file, loff_t offset, int whence); |
| 2426 | extern loff_t no_llseek(struct file *file, loff_t offset, int whence); | 2428 | extern loff_t no_llseek(struct file *file, loff_t offset, int whence); |
| 2429 | extern loff_t vfs_setpos(struct file *file, loff_t offset, loff_t maxsize); | ||
| 2427 | extern loff_t generic_file_llseek(struct file *file, loff_t offset, int whence); | 2430 | extern loff_t generic_file_llseek(struct file *file, loff_t offset, int whence); |
| 2428 | extern loff_t generic_file_llseek_size(struct file *file, loff_t offset, | 2431 | extern loff_t generic_file_llseek_size(struct file *file, loff_t offset, |
| 2429 | int whence, loff_t maxsize, loff_t eof); | 2432 | int whence, loff_t maxsize, loff_t eof); |
| 2433 | extern loff_t fixed_size_llseek(struct file *file, loff_t offset, | ||
| 2434 | int whence, loff_t size); | ||
| 2430 | extern int generic_file_open(struct inode * inode, struct file * filp); | 2435 | extern int generic_file_open(struct inode * inode, struct file * filp); |
| 2431 | extern int nonseekable_open(struct inode * inode, struct file * filp); | 2436 | extern int nonseekable_open(struct inode * inode, struct file * filp); |
| 2432 | 2437 | ||
diff --git a/include/linux/fsnotify.h b/include/linux/fsnotify.h index a78680a92dba..1c804b057fb1 100644 --- a/include/linux/fsnotify.h +++ b/include/linux/fsnotify.h | |||
| @@ -38,7 +38,7 @@ static inline int fsnotify_parent(struct path *path, struct dentry *dentry, __u3 | |||
| 38 | static inline int fsnotify_perm(struct file *file, int mask) | 38 | static inline int fsnotify_perm(struct file *file, int mask) |
| 39 | { | 39 | { |
| 40 | struct path *path = &file->f_path; | 40 | struct path *path = &file->f_path; |
| 41 | struct inode *inode = path->dentry->d_inode; | 41 | struct inode *inode = file_inode(file); |
| 42 | __u32 fsnotify_mask = 0; | 42 | __u32 fsnotify_mask = 0; |
| 43 | int ret; | 43 | int ret; |
| 44 | 44 | ||
| @@ -192,7 +192,7 @@ static inline void fsnotify_mkdir(struct inode *inode, struct dentry *dentry) | |||
| 192 | static inline void fsnotify_access(struct file *file) | 192 | static inline void fsnotify_access(struct file *file) |
| 193 | { | 193 | { |
| 194 | struct path *path = &file->f_path; | 194 | struct path *path = &file->f_path; |
| 195 | struct inode *inode = path->dentry->d_inode; | 195 | struct inode *inode = file_inode(file); |
| 196 | __u32 mask = FS_ACCESS; | 196 | __u32 mask = FS_ACCESS; |
| 197 | 197 | ||
| 198 | if (S_ISDIR(inode->i_mode)) | 198 | if (S_ISDIR(inode->i_mode)) |
| @@ -210,7 +210,7 @@ static inline void fsnotify_access(struct file *file) | |||
| 210 | static inline void fsnotify_modify(struct file *file) | 210 | static inline void fsnotify_modify(struct file *file) |
| 211 | { | 211 | { |
| 212 | struct path *path = &file->f_path; | 212 | struct path *path = &file->f_path; |
| 213 | struct inode *inode = path->dentry->d_inode; | 213 | struct inode *inode = file_inode(file); |
| 214 | __u32 mask = FS_MODIFY; | 214 | __u32 mask = FS_MODIFY; |
| 215 | 215 | ||
| 216 | if (S_ISDIR(inode->i_mode)) | 216 | if (S_ISDIR(inode->i_mode)) |
| @@ -228,7 +228,7 @@ static inline void fsnotify_modify(struct file *file) | |||
| 228 | static inline void fsnotify_open(struct file *file) | 228 | static inline void fsnotify_open(struct file *file) |
| 229 | { | 229 | { |
| 230 | struct path *path = &file->f_path; | 230 | struct path *path = &file->f_path; |
| 231 | struct inode *inode = path->dentry->d_inode; | 231 | struct inode *inode = file_inode(file); |
| 232 | __u32 mask = FS_OPEN; | 232 | __u32 mask = FS_OPEN; |
| 233 | 233 | ||
| 234 | if (S_ISDIR(inode->i_mode)) | 234 | if (S_ISDIR(inode->i_mode)) |
