Bug #2056
closed
HAMMER does not update file access time after read
Added by marino over 13 years ago.
Updated about 12 years ago.
Description
During the development of the upgrade of grep to version 2.7, it was observed
that the HAVE_WORKING_O_NOATIME value was defined as 0 for the i386 platform and
1 for the x86_64 platform. The i386 platform filesystem was UFS and the other
was configured with Hammer.
The grep configuration script uses standard gnu tests. The one used to derive
the O_NOATIME value is located at
http://leaf.dragonflybsd.org/~marino/fctnl_check.c
After some testing, swildner confirmed that Hammer doesn't update the file
access time after data (more than 0 bytes) is read from a file. He believes
that this behavior is not simply a convention, but covered by a standard. Since
Hammer isn't exhibiting the expected behavior, it should be considered a bug.
Moreover, every gnu configure script that is run on a system with Hammer will
produce the wrong value for O_NOATIME support, and thus may cause unexpected
behavior when the software compiles.
I'll take a look at implementing this, it should be pretty straight forward.
Cheers,
Alex
The code is in hammer_vop_read:
/*
* XXX only update the atime if we had to get the MP lock.
* XXX hack hack hack, fixme.
*/
if (got_fstoken) {
if ((ip->flags & HAMMER_INODE_RO) 0 &&
(ip->hmp->mp->mnt_flag & MNT_NOATIME) 0) {
ip->ino_data.atime = trans.time;
hammer_modify_inode(&trans, ip, HAMMER_INODE_ATIME);
}
hammer_done_transaction(&trans);
lwkt_reltoken(&hmp->fs_token);
}
return (error);
It seems that the atime is only updated sometimes. This is horribly inconsistent
behaviour. Matt needs to look at this one, too. I've not the slightest clue why
such a hackish behaviour.
Regards,
Alex
I have committed a change to master to hopefully make atime updates more
consistent. The code that was in there was an attempt to optimize the
concurrency path for read()'s for the case where the buffer cache buffers are
already cached.
Please test.
-Matt
- Status changed from New to Closed
Both hammer and UFS give the same result given the provided test (as would be expected).
Also available in: Atom
PDF