svn commit: r355584 - head/sys/ufs/ufs
Konstantin Belousov
kib at FreeBSD.org
Tue Dec 10 14:07:06 UTC 2019
Author: kib
Date: Tue Dec 10 14:07:05 2019
New Revision: 355584
URL: https://svnweb.freebsd.org/changeset/base/355584
Log:
UFS: implement VOP_INACTIVE()
The checks literally repeat conditions that make ufs_inactive() to
take some actions.
Reviewed by: jeff
Tested by: pho
Sponsored by: The FreeBSD Foundation
Differential revision: https://reviews.freebsd.org/D22616
Modified:
head/sys/ufs/ufs/ufs_extern.h
head/sys/ufs/ufs/ufs_inode.c
head/sys/ufs/ufs/ufs_vnops.c
Modified: head/sys/ufs/ufs/ufs_extern.h
==============================================================================
--- head/sys/ufs/ufs/ufs_extern.h Tue Dec 10 13:52:08 2019 (r355583)
+++ head/sys/ufs/ufs/ufs_extern.h Tue Dec 10 14:07:05 2019 (r355584)
@@ -79,6 +79,7 @@ int ufs_inactive(struct vop_inactive_args *);
int ufs_init(struct vfsconf *);
void ufs_itimes(struct vnode *vp);
int ufs_lookup(struct vop_cachedlookup_args *);
+int ufs_need_inactive(struct vop_need_inactive_args *);
int ufs_readdir(struct vop_readdir_args *);
int ufs_reclaim(struct vop_reclaim_args *);
void ffs_snapgone(struct inode *);
Modified: head/sys/ufs/ufs/ufs_inode.c
==============================================================================
--- head/sys/ufs/ufs/ufs_inode.c Tue Dec 10 13:52:08 2019 (r355583)
+++ head/sys/ufs/ufs/ufs_inode.c Tue Dec 10 14:07:05 2019 (r355584)
@@ -63,6 +63,40 @@ __FBSDID("$FreeBSD$");
#include <ufs/ufs/gjournal.h>
#endif
+int
+ufs_need_inactive(ap)
+ struct vop_need_inactive_args *ap;
+{
+ struct vnode *vp;
+ struct inode *ip;
+#ifdef QUOTA
+ int i;
+#endif
+
+ vp = ap->a_vp;
+ ip = VTOI(vp);
+ if (UFS_RDONLY(ip))
+ return (0);
+ if (ip->i_mode == 0 || ip->i_nlink <= 0 ||
+ (ip->i_effnlink == 0 && DOINGSOFTDEP(vp)) ||
+ (ip->i_flag & (IN_ACCESS | IN_CHANGE | IN_MODIFIED |
+ IN_UPDATE)) != 0 ||
+ (ip->i_effnlink <= 0 && (ip->i_size != 0 || (I_IS_UFS2(ip) &&
+ ip->i_din2->di_extsize != 0))))
+ return (1);
+#ifdef QUOTA
+ for (i = 0; i < MAXQUOTAS; i++) {
+ if (ip->i_dquot[i] != NULL)
+ return (1);
+ }
+#endif
+ /*
+ * No need to check ufs_gjournal_close() condition since we
+ * return 1 if only i_nlink <= 0.
+ */
+ return (0);
+}
+
/*
* Last reference to an inode. If necessary, write or delete it.
*/
Modified: head/sys/ufs/ufs/ufs_vnops.c
==============================================================================
--- head/sys/ufs/ufs/ufs_vnops.c Tue Dec 10 13:52:08 2019 (r355583)
+++ head/sys/ufs/ufs/ufs_vnops.c Tue Dec 10 14:07:05 2019 (r355584)
@@ -2742,6 +2742,7 @@ struct vop_vector ufs_vnodeops = {
.vop_markatime = ufs_markatime,
.vop_mkdir = ufs_mkdir,
.vop_mknod = ufs_mknod,
+ .vop_need_inactive = ufs_need_inactive,
.vop_open = ufs_open,
.vop_pathconf = ufs_pathconf,
.vop_poll = vop_stdpoll,
More information about the svn-src-head
mailing list