Module Name: src
Committed By: christos
Date: Thu Aug 20 20:28:13 UTC 2020
Modified Files:
src/sys/ufs/ffs: ffs_vfsops.c
src/sys/ufs/ufs: inode.h ufs_vnops.c
Log Message:
Don't cache id's for vnodes that have ACLs. ok chs@
To generate a diff of this commit:
cvs rdiff -u -r1.371 -r1.372 src/sys/ufs/ffs/ffs_vfsops.c
cvs rdiff -u -r1.77 -r1.78 src/sys/ufs/ufs/inode.h
cvs rdiff -u -r1.255 -r1.256 src/sys/ufs/ufs/ufs_vnops.c
Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.
Modified files:
Index: src/sys/ufs/ffs/ffs_vfsops.c
diff -u src/sys/ufs/ffs/ffs_vfsops.c:1.371 src/sys/ufs/ffs/ffs_vfsops.c:1.372
--- src/sys/ufs/ffs/ffs_vfsops.c:1.371 Sun Jul 5 16:37:40 2020
+++ src/sys/ufs/ffs/ffs_vfsops.c Thu Aug 20 16:28:13 2020
@@ -1,4 +1,4 @@
-/* $NetBSD: ffs_vfsops.c,v 1.371 2020/07/05 20:37:40 christos Exp $ */
+/* $NetBSD: ffs_vfsops.c,v 1.372 2020/08/20 20:28:13 christos Exp $ */
/*-
* Copyright (c) 2008, 2009 The NetBSD Foundation, Inc.
@@ -61,7 +61,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: ffs_vfsops.c,v 1.371 2020/07/05 20:37:40 christos Exp $");
+__KERNEL_RCSID(0, "$NetBSD: ffs_vfsops.c,v 1.372 2020/08/20 20:28:13 christos Exp $");
#if defined(_KERNEL_OPT)
#include "opt_ffs.h"
@@ -2139,7 +2139,7 @@ ffs_loadvnode(struct mount *mp, struct v
ip->i_gid = ip->i_ffs1_ogid; /* XXX */
} /* XXX */
uvm_vnp_setsize(vp, ip->i_size);
- cache_enter_id(vp, ip->i_mode, ip->i_uid, ip->i_gid, true);
+ cache_enter_id(vp, ip->i_mode, ip->i_uid, ip->i_gid, !HAS_ACLS(ip));
*new_key = &ip->i_number;
return 0;
}
@@ -2261,7 +2261,7 @@ ffs_newvnode(struct mount *mp, struct vn
}
uvm_vnp_setsize(vp, ip->i_size);
- cache_enter_id(vp, ip->i_mode, ip->i_uid, ip->i_gid, true);
+ cache_enter_id(vp, ip->i_mode, ip->i_uid, ip->i_gid, !HAS_ACLS(ip));
*new_key = &ip->i_number;
return 0;
}
Index: src/sys/ufs/ufs/inode.h
diff -u src/sys/ufs/ufs/inode.h:1.77 src/sys/ufs/ufs/inode.h:1.78
--- src/sys/ufs/ufs/inode.h:1.77 Sat Apr 18 15:18:34 2020
+++ src/sys/ufs/ufs/inode.h Thu Aug 20 16:28:13 2020
@@ -1,4 +1,4 @@
-/* $NetBSD: inode.h,v 1.77 2020/04/18 19:18:34 christos Exp $ */
+/* $NetBSD: inode.h,v 1.78 2020/08/20 20:28:13 christos Exp $ */
/*
* Copyright (c) 1982, 1989, 1993
@@ -238,6 +238,14 @@ struct inode {
#if defined(_KERNEL)
/*
+ * This macro does not differentiate between having extattrs and having
+ * extattrs containing ACLS, but that's ok since it is only used to
+ * determine if we are eligible for namei cache and we can be pessimistic
+ */
+#define HAS_ACLS(ip) \
+ ((ip)->i_ump->um_fstype == UFS2 && (ip)->i_ffs2_extsize > 0)
+
+/*
* The DIP macro is used to access fields in the dinode that are
* not cached in the inode itself.
*/
Index: src/sys/ufs/ufs/ufs_vnops.c
diff -u src/sys/ufs/ufs/ufs_vnops.c:1.255 src/sys/ufs/ufs/ufs_vnops.c:1.256
--- src/sys/ufs/ufs/ufs_vnops.c:1.255 Mon May 18 04:28:44 2020
+++ src/sys/ufs/ufs/ufs_vnops.c Thu Aug 20 16:28:13 2020
@@ -1,4 +1,4 @@
-/* $NetBSD: ufs_vnops.c,v 1.255 2020/05/18 08:28:44 hannken Exp $ */
+/* $NetBSD: ufs_vnops.c,v 1.256 2020/08/20 20:28:13 christos Exp $ */
/*-
* Copyright (c) 2008, 2020 The NetBSD Foundation, Inc.
@@ -66,7 +66,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: ufs_vnops.c,v 1.255 2020/05/18 08:28:44 hannken Exp $");
+__KERNEL_RCSID(0, "$NetBSD: ufs_vnops.c,v 1.256 2020/08/20 20:28:13 christos Exp $");
#if defined(_KERNEL_OPT)
#include "opt_ffs.h"
@@ -669,7 +669,7 @@ ufs_setattr(void *v)
}
VN_KNOTE(vp, NOTE_ATTRIB);
out:
- cache_enter_id(vp, ip->i_mode, ip->i_uid, ip->i_gid, true);
+ cache_enter_id(vp, ip->i_mode, ip->i_uid, ip->i_gid, !HAS_ACLS(ip));
return (error);
}
@@ -740,7 +740,7 @@ ufs_chmod(struct vnode *vp, int mode, ka
ip->i_flag |= IN_CHANGE;
DIP_ASSIGN(ip, mode, ip->i_mode);
UFS_WAPBL_UPDATE(vp, NULL, NULL, 0);
- cache_enter_id(vp, ip->i_mode, ip->i_uid, ip->i_gid, true);
+ cache_enter_id(vp, ip->i_mode, ip->i_uid, ip->i_gid, !HAS_ACLS(ip));
return (0);
}
@@ -810,7 +810,7 @@ ufs_chown(struct vnode *vp, uid_t uid, g
#endif /* QUOTA || QUOTA2 */
ip->i_flag |= IN_CHANGE;
UFS_WAPBL_UPDATE(vp, NULL, NULL, 0);
- cache_enter_id(vp, ip->i_mode, ip->i_uid, ip->i_gid, true);
+ cache_enter_id(vp, ip->i_mode, ip->i_uid, ip->i_gid, !HAS_ACLS(ip));
return (0);
}