* General Public License for more details.
*/
+#include <linux/dcache.h> /* d_unlinked */
#include <linux/fs.h> /* struct inode */
#include <linux/fsnotify_backend.h>
#include <linux/inotify.h>
struct fsnotify_event_private_data *fsn_event_priv;
int wd, ret;
+ pr_debug("%s: group=%p event=%p to_tell=%p mask=%x\n", __func__, group,
+ event, event->to_tell, event->mask);
+
to_tell = event->to_tell;
fsn_mark = fsnotify_find_inode_mark(group, to_tell);
struct fsnotify_mark *fsn_mark;
bool send;
+ pr_debug("%s: group=%p inode=%p mask=%x data=%p data_type=%d\n",
+ __func__, group, inode, mask, data, data_type);
+
fsn_mark = fsnotify_find_inode_mark(group, inode);
if (!fsn_mark)
return false;
mask = (mask & ~FS_EVENT_ON_CHILD);
send = (fsn_mark->mask & mask);
+ if (send && (fsn_mark->mask & FS_EXCL_UNLINK) &&
+ (data_type == FSNOTIFY_EVENT_PATH)) {
+ struct path *path = data;
+
+ if (d_unlinked(path->dentry))
+ send = false;
+ }
+
/* find took a reference */
fsnotify_put_mark(fsn_mark);