Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit ff52cc21 authored by Eric Paris's avatar Eric Paris
Browse files

fsnotify: move events should indicate the event was on a child



fsnotify tells its listeners explicitly when an event happened on the given
inode verses on the child of the given inode.  (see __fsnotify_parent)
However, the semantics of fsnotify_move() are such that we deliver events
directly to the two parent directories in question (old_dir and new_dir)
directly without using the __fsnotify_parent() call.  fsnotify should be
adding FS_EVENT_ON_CHILD for the notifications to these parents.

Signed-off-by: default avatarEric Paris <eparis@redhat.com>
parent 63c882a0
Loading
Loading
Loading
Loading
+4 −8
Original line number Original line Diff line number Diff line
@@ -71,12 +71,11 @@ static inline void fsnotify_move(struct inode *old_dir, struct inode *new_dir,
	struct inode *source = moved->d_inode;
	struct inode *source = moved->d_inode;
	u32 in_cookie = inotify_get_cookie();
	u32 in_cookie = inotify_get_cookie();
	u32 fs_cookie = fsnotify_get_cookie();
	u32 fs_cookie = fsnotify_get_cookie();
	__u32 old_dir_mask = 0;
	__u32 old_dir_mask = (FS_EVENT_ON_CHILD | FS_MOVED_FROM);
	__u32 new_dir_mask = 0;
	__u32 new_dir_mask = (FS_EVENT_ON_CHILD | FS_MOVED_TO);


	if (old_dir == new_dir) {
	if (old_dir == new_dir)
		old_dir_mask = FS_DN_RENAME;
		old_dir_mask |= FS_DN_RENAME;
	}


	if (isdir) {
	if (isdir) {
		isdir = IN_ISDIR;
		isdir = IN_ISDIR;
@@ -84,9 +83,6 @@ static inline void fsnotify_move(struct inode *old_dir, struct inode *new_dir,
		new_dir_mask |= FS_IN_ISDIR;
		new_dir_mask |= FS_IN_ISDIR;
	}
	}


	old_dir_mask |= FS_MOVED_FROM;
	new_dir_mask |= FS_MOVED_TO;

	inotify_inode_queue_event(old_dir, IN_MOVED_FROM|isdir, in_cookie, old_name,
	inotify_inode_queue_event(old_dir, IN_MOVED_FROM|isdir, in_cookie, old_name,
				  source);
				  source);
	inotify_inode_queue_event(new_dir, IN_MOVED_TO|isdir, in_cookie, new_name,
	inotify_inode_queue_event(new_dir, IN_MOVED_TO|isdir, in_cookie, new_name,