svn commit: r298921 - head/sys/kern
Konstantin Belousov
kib at FreeBSD.org
Mon May 2 13:13:33 UTC 2016
Author: kib
Date: Mon May 2 13:13:32 2016
New Revision: 298921
URL: https://svnweb.freebsd.org/changeset/base/298921
Log:
Fix reporting of NOTE_LINK when directory link count changes due to
rename removing or adding subdirectory entry.
Discussed with and tested by: Vladimir Kondratyev <wulf at cicgroup.ru>
NetBSD PR: 48958 (http://gnats.netbsd.org/48958)
MFC after: 2 weeks
Sponsored by: The FreeBSD Foundation
Modified:
head/sys/kern/vfs_subr.c
Modified: head/sys/kern/vfs_subr.c
==============================================================================
--- head/sys/kern/vfs_subr.c Mon May 2 05:46:47 2016 (r298920)
+++ head/sys/kern/vfs_subr.c Mon May 2 13:13:32 2016 (r298921)
@@ -4650,10 +4650,26 @@ void
vop_rename_post(void *ap, int rc)
{
struct vop_rename_args *a = ap;
+ long hint;
if (!rc) {
- VFS_KNOTE_UNLOCKED(a->a_fdvp, NOTE_WRITE);
- VFS_KNOTE_UNLOCKED(a->a_tdvp, NOTE_WRITE);
+ hint = NOTE_WRITE;
+ if (a->a_fdvp == a->a_tdvp) {
+ if (a->a_tvp != NULL && a->a_tvp->v_type == VDIR)
+ hint |= NOTE_LINK;
+ VFS_KNOTE_UNLOCKED(a->a_fdvp, hint);
+ VFS_KNOTE_UNLOCKED(a->a_tdvp, hint);
+ } else {
+ if (a->a_fvp->v_type == VDIR)
+ hint |= NOTE_LINK;
+ VFS_KNOTE_UNLOCKED(a->a_fdvp, hint);
+
+ if (a->a_fvp->v_type == VDIR && a->a_tvp != NULL &&
+ a->a_tvp->v_type == VDIR)
+ hint &= ~NOTE_LINK;
+ VFS_KNOTE_UNLOCKED(a->a_tdvp, hint);
+ }
+
VFS_KNOTE_UNLOCKED(a->a_fvp, NOTE_RENAME);
if (a->a_tvp)
VFS_KNOTE_UNLOCKED(a->a_tvp, NOTE_DELETE);
More information about the svn-src-head
mailing list