diff options
author | Linus Torvalds <torvalds@linux-foundation.org> | 2010-08-12 17:23:04 -0400 |
---|---|---|
committer | Linus Torvalds <torvalds@linux-foundation.org> | 2010-08-12 17:23:04 -0400 |
commit | 2069601b3f0ea38170d4b509b89f3ca0a373bdc1 (patch) | |
tree | 647002d4c3814bd3d95d16ef7edef1757de8554f /include/linux/fsnotify_backend.h | |
parent | ad41a1e0cab07c5125456e8d38e5b1ab148d04aa (diff) |
Revert "fsnotify: store struct file not struct path"
This reverts commit 3bcf3860a4ff9bbc522820b4b765e65e4deceb3e (and the
accompanying commit c1e5c954020e "vfs/fsnotify: fsnotify_close can delay
the final work in fput" that was a horribly ugly hack to make it work at
all).
The 'struct file' approach not only causes that disgusting hack, it
somehow breaks pulseaudio, probably due to some other subtlety with
f_count handling.
Fix up various conflicts due to later fsnotify work.
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Diffstat (limited to 'include/linux/fsnotify_backend.h')
-rw-r--r-- | include/linux/fsnotify_backend.h | 16 |
1 files changed, 8 insertions, 8 deletions
diff --git a/include/linux/fsnotify_backend.h b/include/linux/fsnotify_backend.h index 9bbfd7204b04..ed36fb57c426 100644 --- a/include/linux/fsnotify_backend.h +++ b/include/linux/fsnotify_backend.h | |||
@@ -203,20 +203,20 @@ struct fsnotify_event { | |||
203 | /* to_tell may ONLY be dereferenced during handle_event(). */ | 203 | /* to_tell may ONLY be dereferenced during handle_event(). */ |
204 | struct inode *to_tell; /* either the inode the event happened to or its parent */ | 204 | struct inode *to_tell; /* either the inode the event happened to or its parent */ |
205 | /* | 205 | /* |
206 | * depending on the event type we should have either a file or inode | 206 | * depending on the event type we should have either a path or inode |
207 | * We hold a reference on file, but NOT on inode. Since we have the ref on | 207 | * We hold a reference on path, but NOT on inode. Since we have the ref on |
208 | * the file, it may be dereferenced at any point during this object's | 208 | * the path, it may be dereferenced at any point during this object's |
209 | * lifetime. That reference is dropped when this object's refcnt hits | 209 | * lifetime. That reference is dropped when this object's refcnt hits |
210 | * 0. If this event contains an inode instead of a file, the inode may | 210 | * 0. If this event contains an inode instead of a path, the inode may |
211 | * ONLY be used during handle_event(). | 211 | * ONLY be used during handle_event(). |
212 | */ | 212 | */ |
213 | union { | 213 | union { |
214 | struct file *file; | 214 | struct path path; |
215 | struct inode *inode; | 215 | struct inode *inode; |
216 | }; | 216 | }; |
217 | /* when calling fsnotify tell it if the data is a path or inode */ | 217 | /* when calling fsnotify tell it if the data is a path or inode */ |
218 | #define FSNOTIFY_EVENT_NONE 0 | 218 | #define FSNOTIFY_EVENT_NONE 0 |
219 | #define FSNOTIFY_EVENT_FILE 1 | 219 | #define FSNOTIFY_EVENT_PATH 1 |
220 | #define FSNOTIFY_EVENT_INODE 2 | 220 | #define FSNOTIFY_EVENT_INODE 2 |
221 | int data_type; /* which of the above union we have */ | 221 | int data_type; /* which of the above union we have */ |
222 | atomic_t refcnt; /* how many groups still are using/need to send this event */ | 222 | atomic_t refcnt; /* how many groups still are using/need to send this event */ |
@@ -293,7 +293,7 @@ struct fsnotify_mark { | |||
293 | /* main fsnotify call to send events */ | 293 | /* main fsnotify call to send events */ |
294 | extern int fsnotify(struct inode *to_tell, __u32 mask, void *data, int data_is, | 294 | extern int fsnotify(struct inode *to_tell, __u32 mask, void *data, int data_is, |
295 | const unsigned char *name, u32 cookie); | 295 | const unsigned char *name, u32 cookie); |
296 | extern void __fsnotify_parent(struct file *file, struct dentry *dentry, __u32 mask); | 296 | extern void __fsnotify_parent(struct path *path, struct dentry *dentry, __u32 mask); |
297 | extern void __fsnotify_inode_delete(struct inode *inode); | 297 | extern void __fsnotify_inode_delete(struct inode *inode); |
298 | extern void __fsnotify_vfsmount_delete(struct vfsmount *mnt); | 298 | extern void __fsnotify_vfsmount_delete(struct vfsmount *mnt); |
299 | extern u32 fsnotify_get_cookie(void); | 299 | extern u32 fsnotify_get_cookie(void); |
@@ -422,7 +422,7 @@ static inline int fsnotify(struct inode *to_tell, __u32 mask, void *data, int da | |||
422 | return 0; | 422 | return 0; |
423 | } | 423 | } |
424 | 424 | ||
425 | static inline void __fsnotify_parent(struct file *file, struct dentry *dentry, __u32 mask) | 425 | static inline void __fsnotify_parent(struct path *path, struct dentry *dentry, __u32 mask) |
426 | {} | 426 | {} |
427 | 427 | ||
428 | static inline void __fsnotify_inode_delete(struct inode *inode) | 428 | static inline void __fsnotify_inode_delete(struct inode *inode) |