Page MenuHomeFreeBSD

D51300.id158466.diff
No OneTemporary

D51300.id158466.diff

diff --git a/sys/kern/vfs_subr.c b/sys/kern/vfs_subr.c
--- a/sys/kern/vfs_subr.c
+++ b/sys/kern/vfs_subr.c
@@ -6533,17 +6533,6 @@
VFS_KNOTE_UNLOCKED(a->a_vp, NOTE_READ);
}
-void
-vop_readdir_post(void *ap, int rc)
-{
- struct vop_readdir_args *a = ap;
-
- if (!rc) {
- VFS_KNOTE_LOCKED(a->a_vp, NOTE_READ);
- INOTIFY(a->a_vp, IN_ACCESS);
- }
-}
-
static struct knlist fs_knlist;
static void
diff --git a/sys/kern/vnode_if.src b/sys/kern/vnode_if.src
--- a/sys/kern/vnode_if.src
+++ b/sys/kern/vnode_if.src
@@ -380,7 +380,8 @@
%% readdir vp L L L
-%! readdir post vop_readdir_post
+%! readdir pre VOP_READDIR_PRE
+%! readdir post VOP_READDIR_POST
vop_readdir {
IN struct vnode *vp;
diff --git a/sys/sys/vnode.h b/sys/sys/vnode.h
--- a/sys/sys/vnode.h
+++ b/sys/sys/vnode.h
@@ -939,7 +939,6 @@
void vop_open_post(void *a, int rc);
void vop_read_post(void *a, int rc);
void vop_read_pgcache_post(void *ap, int rc);
-void vop_readdir_post(void *a, int rc);
void vop_reclaim_post(void *a, int rc);
void vop_remove_pre(void *a);
void vop_remove_post(void *a, int rc);
@@ -1015,6 +1014,35 @@
_error; \
})
+#ifdef INVARIANTS
+#define VOP_READDIR_PRE_ASSERT(ap) \
+ ssize_t oresid; \
+ \
+ oresid = (ap)->a_uio->uio_resid;
+
+#define VOP_READDIR_POST_ASSERT(ap, ret) \
+ ssize_t nresid; \
+ \
+ nresid = (ap)->a_uio->uio_resid; \
+ if ((ret) == 0 && (ap)->a_eofflag != NULL) { \
+ VNASSERT(nresid != oresid || *(ap)->a_eofflag == 1, \
+ (ap)->a_vp, ("VOP_READDIR: eofflag not set")); \
+ }
+#else
+#define VOP_READDIR_PRE_ASSERT(ap)
+#define VOP_READDIR_POST_ASSERT(ap, ret)
+#endif
+
+#define VOP_READDIR_PRE(ap) \
+ VOP_READDIR_PRE_ASSERT(ap)
+
+#define VOP_READDIR_POST(ap, ret) \
+ VOP_READDIR_POST_ASSERT(ap, ret) \
+ if ((ret) == 0) { \
+ VFS_KNOTE_LOCKED((ap)->a_vp, NOTE_READ); \
+ INOTIFY((ap)->a_vp, IN_ACCESS); \
+ }
+
#define VOP_WRITE_PRE(ap) \
struct vattr va; \
int error; \

File Metadata

Mime Type
text/plain
Expires
Fri, Jun 26, 7:24 PM (2 h, 55 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
34366535
Default Alt Text
D51300.id158466.diff (1 KB)

Event Timeline