mirror of
https://github.com/opnsense/src.git
synced 2026-06-03 13:58:30 -04:00
Linux 6.7 compat: zfs_setattr fix atime update
In db4fc559c I messed up and changed this bit of code to set the inode atime to an uninitialised value, when actually it was just supposed to loading the atime from the inode to be stored in the SA. This changes it to what it should have been. Ensure times change by the right amount Previously, we only checked if the times changed at all, which missed a bug where the atime was being set to an undefined value. Now ensure the times change by two seconds (or thereabouts), ensuring we catch cases where we set the time to something bonkers Reviewed-by: Brian Behlendorf <behlendorf1@llnl.gov> Signed-off-by: Rob Norris <robn@despairlabs.com> Sponsored-by: https://despairlabs.com/sponsor/ Closes #15762 Closes #15773
This commit is contained in:
parent
9ecd112dc1
commit
2ecc2dfe42
2 changed files with 12 additions and 5 deletions
|
|
@ -2435,9 +2435,8 @@ top:
|
|||
|
||||
if ((mask & ATTR_ATIME) || zp->z_atime_dirty) {
|
||||
zp->z_atime_dirty = B_FALSE;
|
||||
inode_timespec_t tmp_atime;
|
||||
inode_timespec_t tmp_atime = zpl_inode_get_atime(ip);
|
||||
ZFS_TIME_ENCODE(&tmp_atime, atime);
|
||||
zpl_inode_set_atime_to_ts(ZTOI(zp), tmp_atime);
|
||||
SA_ADD_BULK_ATTR(bulk, count, SA_ZPL_ATIME(zfsvfs), NULL,
|
||||
&atime, sizeof (atime));
|
||||
}
|
||||
|
|
|
|||
|
|
@ -362,12 +362,20 @@ main(void)
|
|||
return (1);
|
||||
}
|
||||
|
||||
if (t1 == t2) {
|
||||
(void) fprintf(stderr, "%s: t1(%ld) == t2(%ld)\n",
|
||||
|
||||
/*
|
||||
* Ideally, time change would be exactly two seconds, but allow
|
||||
* a little slack in case of scheduling delays or similar.
|
||||
*/
|
||||
long delta = (long)t2 - (long)t1;
|
||||
if (delta < 2 || delta > 4) {
|
||||
(void) fprintf(stderr,
|
||||
"%s: BAD time change: t1(%ld), t2(%ld)\n",
|
||||
timetest_table[i].name, (long)t1, (long)t2);
|
||||
return (1);
|
||||
} else {
|
||||
(void) fprintf(stderr, "%s: t1(%ld) != t2(%ld)\n",
|
||||
(void) fprintf(stderr,
|
||||
"%s: good time change: t1(%ld), t2(%ld)\n",
|
||||
timetest_table[i].name, (long)t1, (long)t2);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in a new issue