IOCTL_IFLAGS(2)           (2019-11-19)            IOCTL_IFLAGS(2)

          ioctl_iflags - ioctl() operations for inode flags

          Various Linux filesystems support the notion of inode
          flags-attributes that modify the semantics of files and
          directories.  These flags can be retrieved and modified
          using two ioctl(2) operations:

              int attr;
              fd = open("pathname", ...);

              ioctl(fd, FS_IOC_GETFLAGS, &attr);  /* Place current flags
                                                     in aqattraq */
              attr |= FS_NOATIME_FL;              /* Tweak returned bit mask */
              ioctl(fd, FS_IOC_SETFLAGS, &attr);  /* Update flags for inode
                                                     referred to by aqfdaq */

          The lsattr(1) and chattr(1) shell commands provide inter-
          faces to these two operations, allowing a user to view and
          modify the inode flags associated with a file.

          The following flags are supported (shown along with the cor-
          responding letter used to indicate the flag by lsattr(1) and

          FS_APPEND_FL aqaaq
               The file can be opened only with the O_APPEND flag.
               (This restriction applies even to the superuser.)  Only
               a privileged process (CAP_LINUX_IMMUTABLE) can set or
               clear this attribute.

          FS_COMPR_FL aqcaq
               Store the file in a compressed format on disk.  This
               flag is not supported by most of the mainstream
               filesystem implementations; one exception is btrfs(5).

          FS_DIRSYNC_FL aqDaq (since Linux 2.6.0)
               Write directory changes synchronously to disk.  This
               flag provides semantics equivalent to the mount(2)
               MS_DIRSYNC option, but on a per-directory basis.  This
               flag can be applied only to directories.

          FS_IMMUTABLE_FL aqiaq
               The file is immutable: no changes are permitted to the
               file contents or metadata (permissions, timestamps,
               ownership, link count and so on).  (This restriction
               applies even to the superuser.)  Only a privileged pro-
               cess (CAP_LINUX_IMMUTABLE) can set or clear this

     Page 1                        Linux             (printed 5/24/22)

     IOCTL_IFLAGS(2)           (2019-11-19)            IOCTL_IFLAGS(2)

          FS_JOURNAL_DATA_FL aqjaq
               Enable journaling of file data on ext3(5) and ext4(5)
               filesystems.  On a filesystem that is journaling in
               ordered or writeback mode, a privileged
               (CAP_SYS_RESOURCE) process can set this flag to enable
               journaling of data updates on a per-file basis.

          FS_NOATIME_FL aqAaq
               Don't update the file last access time when the file is
               accessed.  This can provide I/O performance benefits
               for applications that do not care about the accuracy of
               this timestamp.  This flag provides functionality simi-
               lar to the mount(2) MS_NOATIME flag, but on a per-file

          FS_NOCOW_FL aqCaq (since Linux 2.6.39)
               The file will not be subject to copy-on-write updates.
               This flag has an effect only on filesystems that sup-
               port copy-on-write semantics, such as Btrfs.  See
               chattr(1) and btrfs(5).

          FS_NODUMP_FL aqdaq
               Don't include this file in backups made using dump(8).

          FS_NOTAIL_FL aqtaq
               This flag is supported only on Reiserfs.  It disables
               the Reiserfs tail-packing feature, which tries to pack
               small files (and the final fragment of larger files)
               into the same disk block as the file metadata.

          FS_PROJINHERIT_FL aqPaq (since Linux 4.5)
               Inherit the quota project ID.  Files and subdirectories
               will inherit the project ID of the directory.  This
               flag can be applied only to directories.

          FS_SECRM_FL aqsaq
               Mark the file for secure deletion.  This feature is not
               implemented by any filesystem, since the task of
               securely erasing a file from a recording medium is sur-
               prisingly difficult.

          FS_SYNC_FL aqSaq
               Make file updates synchronous.  For files, this makes
               all writes synchronous (as though all opens of the file
               were with the O_SYNC flag).  For directories, this has
               the same effect as the FS_DIRSYNC_FL flag.

          FS_TOPDIR_FL aqTaq
               Mark a directory for special treatment under the Orlov
               block-allocation strategy.  See chattr(1) for details.
               This flag can be applied only to directories and has an
               effect only for ext2, ext3, and ext4.

     Page 2                        Linux             (printed 5/24/22)

     IOCTL_IFLAGS(2)           (2019-11-19)            IOCTL_IFLAGS(2)

          FS_UNRM_FL aquaq
               Allow the file to be undeleted if it is deleted.  This
               feature is not implemented by any filesystem, since it
               is possible to implement file-recovery mechanisms out-
               side the kernel.

          In most cases, when any of the above flags is set on a
          directory, the flag is inherited by files and subdirectories
          created inside that directory.  Exceptions include
          FS_TOPDIR_FL, which is not inheritable, and FS_DIRSYNC_FL,
          which is inherited only by subdirectories.

          Inode flags are a nonstandard Linux extension.

          In order to change the inode flags of a file using the
          FS_IOC_SETFLAGS operation, the effective user ID of the
          caller must match the owner of the file, or the caller must
          have the CAP_FOWNER capability.

          The type of the argument given to the FS_IOC_GETFLAGS and
          FS_IOC_SETFLAGS operations is int *, notwithstanding the
          implication in the kernel source file
          include/uapi/linux/fs.h that the argument is long *.

          chattr(1), lsattr(1), mount(2), btrfs(5), ext4(5), xfs(5),
          xattr(7), mount(8)

          This page is part of release 5.10 of the Linux man-pages
          project.  A description of the project, information about
          reporting bugs, and the latest version of this page, can be
          found at

     Page 3                        Linux             (printed 5/24/22)