All of lore.kernel.org
 help / color / mirror / Atom feed
* Clarification of statx->attributes_mask meaning?
@ 2020-11-25 19:19 Eric Sandeen
  2020-11-25 21:25 ` Darrick J. Wong
  2020-11-25 21:50 ` David Howells
  0 siblings, 2 replies; 10+ messages in thread
From: Eric Sandeen @ 2020-11-25 19:19 UTC (permalink / raw)
  To: linux-fsdevel; +Cc: David Howells

The way attributes_mask is used in various filesystems seems a bit
inconsistent.

Most filesystems set only the bits for features that are possible to enable
on that filesystem, i.e. XFS:

        if (ip->i_d.di_flags & XFS_DIFLAG_IMMUTABLE)
                stat->attributes |= STATX_ATTR_IMMUTABLE;
        if (ip->i_d.di_flags & XFS_DIFLAG_APPEND)
                stat->attributes |= STATX_ATTR_APPEND;
        if (ip->i_d.di_flags & XFS_DIFLAG_NODUMP)
                stat->attributes |= STATX_ATTR_NODUMP;

        stat->attributes_mask |= (STATX_ATTR_IMMUTABLE |
                                  STATX_ATTR_APPEND |
                                  STATX_ATTR_NODUMP);

btrfs, cifs, erofs, ext4, f2fs, hfsplus, orangefs and ubifs are similar.

But others seem to set the mask to everything it can definitively answer,
i.e. "Encryption and compression are off, and we really mean it" even though
it will never be set to one in ->attributes, i.e. on gfs2:

        if (gfsflags & GFS2_DIF_APPENDONLY)
                stat->attributes |= STATX_ATTR_APPEND;
        if (gfsflags & GFS2_DIF_IMMUTABLE)
                stat->attributes |= STATX_ATTR_IMMUTABLE;

        stat->attributes_mask |= (STATX_ATTR_APPEND |
                                  STATX_ATTR_COMPRESSED |
                                  STATX_ATTR_ENCRYPTED |
                                  STATX_ATTR_IMMUTABLE |
                                  STATX_ATTR_NODUMP);

ext2 is similar (it adds STATX_ATTR_ENCRYPTED to the mask but will never set
it in attributes)

The commit 3209f68b3ca4 which added attributes_mask says:

"Include a mask in struct stat to indicate which bits of stx_attributes the
filesystem actually supports."

The manpage says:

"A mask indicating which bits in stx_attributes are supported by the VFS and
the filesystem."

-and-

"Note that any attribute that is not indicated as supported by stx_attributes_mask
has no usable value here."

So is this intended to indicate which bits of statx->attributes are valid, whether
they are 1 or 0, or which bits could possibly be set to 1 by the filesystem?

If the former, then we should move attributes_mask into the VFS to set all flags
known by the kernel, but David's original commit did not do that so I'm left
wondering...

Thanks,
-Eric

^ permalink raw reply	[flat|nested] 10+ messages in thread

end of thread, other threads:[~2020-12-01 16:26 UTC | newest]

Thread overview: 10+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2020-11-25 19:19 Clarification of statx->attributes_mask meaning? Eric Sandeen
2020-11-25 21:25 ` Darrick J. Wong
2020-11-25 21:42   ` Eric Sandeen
2020-11-25 21:50 ` David Howells
2020-11-30 23:29   ` Eric Sandeen
2020-12-01  3:20     ` Theodore Y. Ts'o
2020-12-01  3:37       ` Eric Sandeen
2020-12-01  3:50         ` Eric Sandeen
2020-12-01 15:39         ` Theodore Y. Ts'o
2020-12-01 16:25           ` Miklos Szeredi

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.