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

HSM: Allow receiving messages to be non-blocking

    XMLWordPrintable

Details

    • 3
    • 14041

    Description

      When using the HSM API for a copy tool, it's impossible to
      properly exit an application because one thread might be
      stuck in llapi_hsm_copytool_recv(), which in turn blocks
      forever on a read.

      So this patch expands the existing Lustre userspace HSM API
      to be able to apply flags to the read side of the
      communication pipe, so it can be opened with O_NONBLOCK,
      and gives access to the pipe file descriptor used. (read side)

      So now a program can do a poll/select, and then call
      llapi_hsm_copytool_recv without blocking.

      Notes: The flags passed in from the copy tool to
      llapi_hsm_copytool_register are applied to the read side of
      the pipe using fcntl, because we do not want to apply the
      same flags to the read and write sides of the pipe.

      No functionality is added for setting flags on the write
      side of the pipe, since the kernel expects particular
      behavior from that side of the pipe, and it seems unwise
      to let user space modify it.

      Additionally, this patch changes llapi_hsm_copytool_recv to
      not return -EAGAIN when it finds a message for an archive
      not serviced by that copytool.

      Instead of returning -EAGAIN to the copy tool, which just
      restarts the receive operation, this patch just loops inside
      the recv function.

      This is because this -EAGAIN conflicts with -EAGAIN
      returned from the call to libcfs_ukuc_msg_get
      which can occur when O_NONBLOCK is set.

      Attachments

        Activity

          People

            cliffw Cliff White (Inactive)
            paf Patrick Farrell (Inactive)
            Votes:
            0 Vote for this issue
            Watchers:
            10 Start watching this issue

            Dates

              Created:
              Updated:
              Resolved: