1/* 2 * Directory notification for Linux 3 * 4 * Copyright (C) 2000,2002 Stephen Rothwell 5 */ 6 7struct dnotify_struct { 8 struct dnotify_struct * dn_next; 9 unsigned long dn_mask; /* Events to be notified 10 see linux/fcntl.h */ 11 int dn_fd; 12 struct file * dn_filp; 13 fl_owner_t dn_owner; 14}; 15 16extern void __inode_dir_notify(struct inode *, unsigned long); 17extern void dnotify_flush(struct file *filp, fl_owner_t id); 18extern int fcntl_dirnotify(int, struct file *, unsigned long); 19 20static inline void inode_dir_notify(struct inode *inode, unsigned long event) 21{ 22 if ((inode)->i_dnotify_mask & (event)) 23 __inode_dir_notify(inode, event); 24} 25 26/* 27 * This is hopelessly wrong, but unfixable without API changes. At 28 * least it doesn't oops the kernel... 29 */ 30static inline void dnotify_parent(struct dentry *dentry, unsigned long event) 31{ 32 struct dentry *parent; 33 spin_lock(&dcache_lock); 34 parent = dentry->d_parent; 35 if (parent->d_inode->i_dnotify_mask & event) { 36 dget(parent); 37 spin_unlock(&dcache_lock); 38 __inode_dir_notify(parent->d_inode, event); 39 dput(parent); 40 } else 41 spin_unlock(&dcache_lock); 42} 43