Whamcloud - gitweb
LU-947 ptlrpc: allow stopping threads above threads_max
[fs/lustre-release.git] / lustre / utils / liblustreapi_chlg.c
index 15f334c..5735fc1 100644 (file)
@@ -68,6 +68,8 @@ struct changelog_private {
        int                              clp_fd;
        /* Changelog delivery mode */
        enum changelog_send_flag         clp_send_flags;
+       /* Changelog extra flags */
+       enum changelog_send_extra_flag   clp_send_extra_flags;
        /* Available bytes in buffer */
        size_t                           clp_buf_len;
        /* Current position in buffer */
@@ -243,6 +245,14 @@ int llapi_changelog_recv(void *priv, struct changelog_rec **rech)
 
        if (cp->clp_send_flags & CHANGELOG_FLAG_EXTRA_FLAGS) {
                rec_fmt |= CLF_EXTRA_FLAGS;
+               if (cp->clp_send_extra_flags & CHANGELOG_EXTRA_FLAG_UIDGID)
+                       rec_extra_fmt |= CLFE_UIDGID;
+               if (cp->clp_send_extra_flags & CHANGELOG_EXTRA_FLAG_NID)
+                       rec_extra_fmt |= CLFE_NID;
+               if (cp->clp_send_extra_flags & CHANGELOG_EXTRA_FLAG_OMODE)
+                       rec_extra_fmt |= CLFE_OPEN;
+               if (cp->clp_send_extra_flags & CHANGELOG_EXTRA_FLAG_XATTR)
+                       rec_extra_fmt |= CLFE_XATTR;
        }
 
        if (cp->clp_buf + cp->clp_buf_len <= cp->clp_buf_pos) {
@@ -328,3 +338,36 @@ out_close:
        close(fd);
        return rc;
 }
+
+/**
+ * Set extra flags for reading changelogs
+ *
+ * @param priv         Opaque private control structure
+ * @param extra_flags  Read extra flags (e.g. CHANGELOG_EXTRA_FLAG_UIDGID)
+ *
+ * Just call this function right after llapi_changelog_start().
+ */
+int llapi_changelog_set_xflags(void *priv,
+                              enum changelog_send_extra_flag extra_flags)
+{
+       struct changelog_private *cp = priv;
+       static bool warned_uidgid;
+
+       if (!cp || cp->clp_magic != CHANGELOG_PRIV_MAGIC)
+               return -EINVAL;
+
+       cp->clp_send_extra_flags = extra_flags;
+
+       /* CHANGELOG_EXTRA_FLAG_UIDGID will eventually become mandatory.
+        * If it wasn't specified, display a warning here.
+        * Code elsewhere will remove the corresponding extension.
+        */
+       if (!(extra_flags & CHANGELOG_EXTRA_FLAG_UIDGID) && !warned_uidgid) {
+               llapi_err_noerrno(LLAPI_MSG_WARN,
+                    "warning: %s() called without CHANGELOG_EXTRA_FLAG_UIDGID",
+                    __func__);
+               warned_uidgid = true;
+       }
+
+       return 0;
+}