jeff.liu wrote: > Jim Meyering 写道: >> jeff.liu wrote: >> >>> A tiny patch, make chmod do not touch the inode if the new file >>> permission mode is same as it was before. >>> >> ... >> >>> +static bool >>> +may_have_nfsacl(const char *file) >>> +{ >>> +# if HAVE_SYS_VFS_H && HAVE_SYS_STATFS_H && HAVE_STRUCT_STATFS_F_TYPE >>> + struct statfs buf; >>> + >>> + /* If statfs fails, assume we can't use the optimization. */ >>> + if (statfs (file, &buf) < 0) >>> >> >> This function should accept a file descriptor, not a file name, >> and should call fstatfs, not statfs. >> >> > Thanks for the correction. > IMHO, to get a fd, then call fstatfs ranther than statfs here, is to > ensure the same file object proceeding to operated on?
fts provides a file descriptor for every directory it processes, so you can use an "FTS_ENT const *ent" parameter instead. When it refers to a directory, use ent->fts_fts->fts_cwd_fd as the file descriptor. Otherwise, you will have to call statfs after all. At first, I was thinking we could avoid statfs most of the time (i.e., change device only at a directory), but with bind-mounted regular files, the device can change at any time during a traversal.