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

Symlink Bug with Lustre Client

    XMLWordPrintable

Details

    • Bug
    • Resolution: Unresolved
    • Minor
    • None
    • Lustre 2.12.5, Lustre 2.15.1
    • None
    • Affected Client OSes: CentOS 7.8.2003, Rocky Linux release 9.1
      Kernels: 5.14.0-162.12.1.el9_1.0.2.x86_64, 3.10.0-1127.8.2.el7.x86_64
    • 3
    • 9223372036854775807

    Description

      The following sequence has a strange issue that does not affect all clients:

      sesser@hercules-login-1 sesser$touch a; mkdir test; touch test; ln -svf $(pwd)/a test/
      ln: test/: cannot overwrite directory
      sesser@hercules-login-1 sesser$ln -svf $(pwd)/a test/
      'test/a' -> '/work2/hpc/users/sesser/a'
      sesser@hercules-login-1 sesser$ln -svf $(pwd)/a test/
      'test/a' -> '/work2/hpc/users/sesser/a'
      sesser@hercules-login-1 sesser$touch test; ln -svf $(pwd)/a test/
      ln: test/: cannot overwrite directory
      sesser@hercules-login-1 sesser$touch test; ln -svf $(pwd)/a test/
      ln: test/: cannot overwrite directory
      sesser@hercules-login-1 sesser$touch test; ls -l; ln -svf $(pwd)/a test/
      total 16
      rw-r---- 1 sesser admin 0 Jan 5 16:48 a
      drwxr-x--- 2 sesser admin 16384 Jan 5 16:48 test
      'test/a' -> '/work2/hpc/users/sesser/a'

      Issuing the following outputs this:

      touch test; strace ln -svf $(pwd)/a test/

      symlinkat("/work2/hpc/users/sesser/a", AT_FDCWD, "test/") = -1 ENOENT (No such file or directory)
      newfstatat(AT_FDCWD, "test/",

      {st_mode=S_IFDIR|0750, st_size=16384, ...}

      , AT_SYMLINK_NOFOLLOW) = 0
      openat(AT_FDCWD, "/usr/share/locale/C.UTF-8/LC_MESSAGES/coreutils.mo", O_RDONLY) = -1 ENOENT (No such file or directory)
      openat(AT_FDCWD, "/usr/share/locale/C.utf8/LC_MESSAGES/coreutils.mo", O_RDONLY) = -1 ENOENT (No such file or directory)
      openat(AT_FDCWD, "/usr/share/locale/C/LC_MESSAGES/coreutils.mo", O_RDONLY) = -1 ENOENT (No such file or directory)
      write(2, "ln: ", 4ln: ) = 4
      write(2, "test/: cannot overwrite director"..., 33test/: cannot overwrite directory) = 33
      write(2, "\n", 1
      ) = 1
      lseek(0, 0, SEEK_CUR) = -1 ESPIPE (Illegal seek)
      close(0) = 0
      close(1) = 0
      close(2) = 0
      exit_group(1) = ?
      +++ exited with 1 +++

      This is a vendor agnostic problem, as we tested this on another system from a different vendor, and the results are the same. Some clients do behave as expected though.

      Client Details that Work Correctly:
      Client Type 1:

      • OS: CentOS 7.6.1810
      • Kernel: 3.10.0-957.27.2.el7.x86_64
      • Lustre Version: 2.12.8_ddn9
      • Mount Options: defaults, _netdev, user_xattr, flock

      Client Type 2:

      • OS: CentOS 7.8.2003
      • Kernel: 3.10.0-1127.8.2.el7.x86_64
      • Lustre Version: 2.12.5
      • Mount Options: defaults, _netdev, user_xattr, flock

      Client Details that do not Work Correctly:
      Client Type 3:

      • OS: CentOS 7.8.2003
      • Kernel: 3.10.0-1127.8.2.el7.x86_64
      • Lustre Version: 2.15.6
      • Mount Options: defaults, _netdev, user_xattr, flock

      Client Type 4:

      • Rocky 9.1
      • Kernel: 5.14.0-162.12.1.el9_1.0.2.x86_64
      • Lustre Version: 12.15.1
      • Mount Options: defaults, _netdev, user_xattr, flock

      All clients were built using the following commands:

      ./configure --disable-server --enable-quota --enable-mpitests=no
      make
      make check
      make rpms
      yum -y install *.rpms

      Attachments

        Activity

          People

            wc-triage WC Triage
            jbradley John Bradley
            Votes:
            0 Vote for this issue
            Watchers:
            3 Start watching this issue

            Dates

              Created:
              Updated: