Uploaded image for project: 'Lustre'
  1. Lustre
  2. LU-9512

Implement O_TMPFILE for Lustre

    XMLWordPrintable

Details

    • New Feature
    • Resolution: Unresolved
    • Major
    • None
    • Upstream, Lustre 2.11.0
    • 9223372036854775807

    Description

      We should implement O_TMPFILE for Lustre. We already have a similar interface for creating volatile files for lfs_migrate(). This should be hooked into the VFS O_TMPFILE mechanism for applications to use.

      From the open(2) man page in RHEL8.5:

             O_TMPFILE (since Linux 3.11)
                    Create an unnamed temporary regular file.  The pathname argument
                    specifies a directory; an unnamed inode will be created in that
                    directory's filesystem.  Anything written to the resulting file
                    will be lost when the last file descriptor is closed, unless the
                    file is given a name.
      
                    O_TMPFILE must be specified with one of O_RDWR or O_WRONLY  and,
                    optionally, O_EXCL.  If O_EXCL is not specified, then linkat(2)
                    can be used to link the temporary file into the filesystem,
                    making it permanent, using code like the following:
      
                        char path[PATH_MAX];
                        fd = open("/path/to/dir", O_TMPFILE | O_RDWR,
                                                  S_IRUSR | S_IWUSR);
      
                        /* File I/O on 'fd'... */
      
                        snprintf(path, PATH_MAX, "/proc/self/fd/%d", fd);
                        linkat(AT_FDCWD, path, AT_FDCWD, "/path/for/file",
                               AT_SYMLINK_FOLLOW);
      
                    In this case, the open() mode argument determines the file
                    permission mode, as with O_CREAT.
      
                    Specifying O_EXCL in conjunction with O_TMPFILE prevents a temporary
                    file from being linked into the filesystem in the above manner.
                    (Note that the meaning of O_EXCL in this case is different from
                    the meaning of O_EXCL otherwise.)
      
                    There are two main use cases for O_TMPFILE:
      
                    *  Improved tmpfile(3) functionality: race-free creation of
                       temporary files that (1) are automatically deleted when closed;
                       (2) can never be reached via any pathname; (3) are not subject
                       to symlink attacks; and (4) do not require the caller to devise
                       unique names.
      
                    *  Creating a file that is initially invisible, which is then
                       populated with data and adjusted to have appropriate filesystem
                       attributes (fchown(2), fchmod(2), fsetxattr(2), etc.) before
                       being atomically linked into the filesystem in a fully formed
                       state (using linkat(2) as described above).
      
                    O_TMPFILE requires support by the underlying filesystem; only a
                    subset of Linux filesystems provide that support.  In the initial
                    implementation, support was provided in the ext2, ext3, ext4,
                    UDF, Minix, and shmem filesystems.  Support for other filesystems
                    has subsequently been added as follows: XFS (Linux 3.15); Btrfs
                    (Linux 3.16); F2FS (Linux 3.16); and ubifs (Linux 4.9)
      

      Attachments

        Activity

          People

            arshad512 Arshad Hussain
            adilger Andreas Dilger
            Votes:
            0 Vote for this issue
            Watchers:
            8 Start watching this issue

            Dates

              Created:
              Updated: