- rc = mdd_declare_xattr_set(env, mdd, obj, buf, XATTR_NAME_LOV,
- LU_XATTR_SPLIT, handle);
- if (rc)
- GOTO(out, rc);
- rc = mdd_declare_xattr_set(env, mdd, vic, buf_vic, XATTR_NAME_LOV,
- LU_XATTR_SPLIT, handle);
- if (rc)
- GOTO(out, rc);
+ if (vic) {
+ /**
+ * non delete mirror split
+ *
+ * declare obj set remaining layout in @buf, will set obj's
+ * in-memory layout
+ */
+ rc = mdd_declare_xattr_set(env, mdd, obj, buf, XATTR_NAME_LOV,
+ LU_XATTR_SPLIT, handle);
+ if (rc)
+ GOTO(stop, rc);
+
+ /* declare vic set splitted layout in @buf_vic */
+ rc = mdd_declare_xattr_set(env, mdd, vic, buf_vic,
+ XATTR_NAME_LOV, LU_XATTR_SPLIT,
+ handle);
+ if (rc)
+ GOTO(stop, rc);
+ } else {
+ /**
+ * declare delete mirror objects in @buf_vic, will change obj's
+ * in-memory layout
+ */
+ rc = mdd_declare_xattr_set(env, mdd, obj, buf_vic,
+ XATTR_NAME_LOV, LU_XATTR_PURGE,
+ handle);
+ if (rc)
+ GOTO(stop, rc);
+
+ /* declare obj set remaining layout in @buf */
+ rc = mdd_declare_xattr_set(env, mdd, obj, buf,
+ XATTR_NAME_LOV, LU_XATTR_SPLIT,
+ handle);
+ if (rc)
+ GOTO(stop, rc);
+ }