inotify: Properly handle cross-dir renames
authorVolker Lendecke <vl@samba.org>
Fri, 5 Dec 2014 15:38:45 +0000 (15:38 +0000)
committerJeremy Allison <jra@samba.org>
Fri, 5 Dec 2014 20:01:54 +0000 (21:01 +0100)
commitabf867da764b60e94c43ab9ec1d5338ac99ec18d
tree2567e7be76555eb8128876af6d24e6306269d687
parentd6e2db6f52fa26ae3c044ff56ebf814313ca4eb8
inotify: Properly handle cross-dir renames

When watching two subdirectories with inotify and a file is moved between both,
we get a IN_MOVED_FROM for the source watch and a IN_MOVED_TO for the
destination watch. Without this patch we create a NOTIFY_ACTION_OLD_NAME for
the old directory. We hold this back in notify_fsp, expecting the NEW_NAME
immediately after it. In the cross-directory rename case this does not work,
we'll not get the NEW_NAME, there is no NEW_NAME in that directory.

This patch changes us to create NOTIFY_ACTION_REMOVED and NOTIFY_ACTION_ADDED
in this case. Not sure this is right, but at least it is better than before: We
get something at all.

This is more likely to happen with the notifyd approach, as there we
inotify-watch many subdirectories from one process. Without nootifyd you had to
have two explorer windows open and do a nfs or local mv between those two
directories to find this.

Signed-off-by: Volker Lendecke <vl@samba.org>
Reviewed-by: Jeremy Allison <jra@samba.org>
Autobuild-User(master): Jeremy Allison <jra@samba.org>
Autobuild-Date(master): Fri Dec  5 21:01:54 CET 2014 on sn-devel-104
source3/smbd/notify_inotify.c