Issue #3251 has been updated by tonyc.

deef wrote:
> However, I've been unable to reproduce chmod() issue... It works as expected 
> for me on master. And according to the code, it should also work the same on 
> RELEASE_5_8. Could anybody confirm, please? :)

My test is a little broken in that it doesn't distinguish between a successful 
chmod() that does change the mode and a successful chmod() doesn't change the 
mode, but I'm not sure that makes a difference.

Looking at the code (HEAD:/sys/vfs/hammer2/hammer2_vnops.c#l543) it appears 
ctime is only updated when the mode is modified.  The dragonfly man pages that 
I (briefly) looked at don't include enough information to decide whether that's 
documented behaviour, but POSIX says:

  Upon successful completion, chmod() shall mark for update the last file 
status change timestamp of the file.

So it looks to me like POSIX says that ctime should be modified even if the 
mode doesn't actually change.  This is the behaviour on Linux/ext4 and FreeBSD 
11.4/ufs.

----------------------------------------
Bug #3251: file ctime not updated as documented on chmod(), link()
http://bugs.dragonflybsd.org/issues/3251#change-13939

* Author: tonyc
* Status: In Progress
* Priority: Normal
* Assignee: 
* Category: VFS subsystem
* Target version: 
----------------------------------------
The stat(2) man page claims:

     st_ctim       Time when file status was last changed (inode data
                   modification).  Changed by the chmod(2), chown(2), link(2),
                   mknod(2), rename(2), unlink(2), utimes(2) and write(2)
                   system calls.

but neither link() nor chmod() update ctim.tv_sec:

  $ pwd
  /home/tony/dev/perl/git/dflybugs
  $ cc -olink_ctime link_ctime.c
  $ ./link_ctime
  FAIL: chmod didn't update ctime
  FAIL: link didn't update ctime
  $ mount
  serno/VB6e53d937-50b8dc58.s1d on / (hammer2, local)
  devfs on /dev (devfs, nosymfollow, local)
  /dev/serno/VB6e53d937-50b8dc58.s1a on /boot (ufs, local)
  /build/usr.obj on /usr/obj (null)
  /build/var.crash on /var/crash (null)
  /build/var.cache on /var/cache (null)
  /build/var.spool on /var/spool (null)
  /build/var.log on /var/log (null)
  /build/var.tmp on /var/tmp (null)
  tmpfs on /tmp (tmpfs, local)
  procfs on /proc (procfs, local)
  tmpfs on /var/run/shm (tmpfs, local)
  $ uname -a
  DragonFly  5.8-RELEASE DragonFly v5.8.3-RELEASE #10: Thu Sep 24 19:19:45 EDT 
2020     
r...@www.shiningsilence.com:/usr/obj/home/justin/release/5_8/sys/X86_64_GENERIC 
 x86_64

link_ctime.c is attached.

---Files--------------------------------
link_ctime.c (1.12 KB)


-- 
You have received this notification because you have either subscribed to it, 
or are involved in it.
To change your notification preferences, please click here: 
http://bugs.dragonflybsd.org/my/account

Reply via email to