Skip to content

Commit b4663a8

Browse files
committed
stat(2): add st_filerev
Reviewed by: asomers, markj, olce, rmacklem Sponsored by: The FreeBSD Foundation MFC after: 1 week Differential revision: https://reviews.freebsd.org/D48452
1 parent 661ca92 commit b4663a8

File tree

9 files changed

+13
-2
lines changed

9 files changed

+13
-2
lines changed

sys/compat/freebsd32/freebsd32.h

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -240,7 +240,8 @@ struct stat32 {
240240
uint32_t st_blksize;
241241
uint32_t st_flags;
242242
uint64_t st_gen;
243-
uint64_t st_spare[10];
243+
uint64_t st_filerev;
244+
uint64_t st_spare[9];
244245
};
245246
struct freebsd11_stat32 {
246247
uint32_t st_dev;

sys/compat/freebsd32/freebsd32_misc.c

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2251,6 +2251,7 @@ copy_stat(struct stat *in, struct stat32 *out)
22512251
CP(*in, *out, st_blksize);
22522252
CP(*in, *out, st_flags);
22532253
CP(*in, *out, st_gen);
2254+
CP(*in, *out, st_filerev);
22542255
TS_CP(*in, *out, st_birthtim);
22552256
out->st_padding0 = 0;
22562257
out->st_padding1 = 0;

sys/fs/tmpfs/tmpfs_vnops.c

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -476,6 +476,7 @@ tmpfs_stat(struct vop_stat_args *v)
476476
sb->st_blksize = PAGE_SIZE;
477477
sb->st_flags = node->tn_flags;
478478
sb->st_gen = node->tn_gen;
479+
sb->st_filerev = 0;
479480
if (vp->v_type == VREG) {
480481
#ifdef __ILP32__
481482
vm_object_t obj = node->tn_reg.tn_aobj;

sys/kern/kern_descrip.c

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1620,6 +1620,7 @@ kern_fstat(struct thread *td, int fd, struct stat *sbp)
16201620

16211621
AUDIT_ARG_FILE(td->td_proc, fp);
16221622

1623+
sbp->st_filerev = 0;
16231624
error = fo_stat(fp, sbp, td->td_ucred);
16241625
fdrop(fp, td);
16251626
#ifdef __STAT_TIME_T_EXT

sys/kern/vfs_default.c

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1511,6 +1511,7 @@ vop_stdstat(struct vop_stat_args *a)
15111511
vap->va_fsid = VNOVAL;
15121512
vap->va_gen = 0;
15131513
vap->va_rdev = NODEV;
1514+
vap->va_filerev = 0;
15141515

15151516
error = VOP_GETATTR(vp, vap, a->a_active_cred);
15161517
if (error)
@@ -1587,6 +1588,7 @@ vop_stdstat(struct vop_stat_args *a)
15871588
sb->st_flags = vap->va_flags;
15881589
sb->st_blocks = vap->va_bytes / S_BLKSIZE;
15891590
sb->st_gen = vap->va_gen;
1591+
sb->st_filerev = vap->va_filerev;
15901592
out:
15911593
return (vop_stat_helper_post(a, error));
15921594
}

sys/kern/vfs_subr.c

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1200,6 +1200,7 @@ vattr_null(struct vattr *vap)
12001200
vap->va_flags = VNOVAL;
12011201
vap->va_gen = VNOVAL;
12021202
vap->va_vaflags = 0;
1203+
vap->va_filerev = VNOVAL;
12031204
}
12041205

12051206
/*

sys/sys/stat.h

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -185,7 +185,8 @@ struct stat {
185185
blksize_t st_blksize; /* optimal blocksize for I/O */
186186
fflags_t st_flags; /* user defined flags for file */
187187
__uint64_t st_gen; /* file generation number */
188-
__uint64_t st_spare[10];
188+
__uint64_t st_filerev; /* file revision, incr on changes */
189+
__uint64_t st_spare[9];
189190
};
190191

191192
#ifdef _KERNEL

sys/sys/vnode.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -989,6 +989,7 @@ void vop_rename_fail(struct vop_rename_args *ap);
989989
ap->a_sb->st_padding0 = 0; \
990990
ap->a_sb->st_padding1 = 0; \
991991
bzero(_ap->a_sb->st_spare, sizeof(_ap->a_sb->st_spare)); \
992+
ap->a_sb->st_filerev = 0; \
992993
} \
993994
_error; \
994995
})

sys/ufs/ufs/ufs_vnops.c

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -549,6 +549,7 @@ ufs_stat(struct vop_stat_args *ap)
549549
sb->st_birthtim.tv_sec = -1;
550550
sb->st_birthtim.tv_nsec = 0;
551551
sb->st_blocks = dbtob((uint64_t)ip->i_din1->di_blocks) / S_BLKSIZE;
552+
sb->st_filerev = ip->i_din1->di_modrev;
552553
} else {
553554
sb->st_rdev = ip->i_din2->di_rdev;
554555
sb->st_size = ip->i_din2->di_size;
@@ -559,6 +560,7 @@ ufs_stat(struct vop_stat_args *ap)
559560
sb->st_birthtim.tv_sec = ip->i_din2->di_birthtime;
560561
sb->st_birthtim.tv_nsec = ip->i_din2->di_birthnsec;
561562
sb->st_blocks = dbtob((uint64_t)ip->i_din2->di_blocks) / S_BLKSIZE;
563+
sb->st_filerev = ip->i_din2->di_modrev;
562564
}
563565

564566
sb->st_blksize = max(PAGE_SIZE, vp->v_mount->mnt_stat.f_iosize);

0 commit comments

Comments
 (0)