#include <unistd.h>
#include <errno.h>
#include <limits.h>
+#include <assert.h>
#include <sys/xattr.h>
#include <sys/param.h>
return 0;
}
+const char *llapi_layout_flags_string(uint32_t flags)
+{
+ switch (flags & LCM_FL_FLR_MASK) {
+ case LCM_FL_RDONLY:
+ return "ro";
+ case LCM_FL_WRITE_PENDING:
+ return "wp";
+ case LCM_FL_SYNC_PENDING:
+ return "sp";
+ }
+
+ return "0";
+}
+
/**
* llapi_layout_mirror_count_is_valid() - Check the validity of mirror count.
* @count: Mirror count value to be checked.
/**
* Iterate every components in the @layout and call callback function @cb.
*
- * \param[in]
+ * \param[in] layout component layout list.
+ * \param[in] cb callback for each component
+ * \param[in] cbdata callback data
+ *
+ * \retval < 0 error happens during the iteration
+ * \retval LLAPI_LAYOUT_ITER_CONT finished the iteration w/o error
+ * \retval LLAPI_LAYOUT_ITER_STOP got something, stop the iteration
*/
int llapi_layout_comp_iterate(struct llapi_layout *layout,
llapi_layout_iter_cb cb, void *cbdata)
if (rc < 0)
return rc;
- while (rc == 0) {
+ /**
+ * make sure on success llapi_layout_comp_use() API returns 0 with
+ * USE_FIRST.
+ */
+ assert(rc == 0);
+
+ while (1) {
rc = cb(layout, cbdata);
if (rc != LLAPI_LAYOUT_ITER_CONT)
break;
rc = llapi_layout_comp_use(layout, LLAPI_LAYOUT_COMP_USE_NEXT);
if (rc < 0)
return rc;
+ else if (rc == 1) /* reached the last comp */
+ return LLAPI_LAYOUT_ITER_CONT;
}
- return rc >= 0 ? LLAPI_LAYOUT_ITER_CONT : rc;
+ return rc;
}
/**