Whamcloud - gitweb
LU-11381 tests: sanity-flr 201 skip information
[fs/lustre-release.git] / lustre / ofd / ofd_objects.c
index ec5fb4f..7605de4 100644 (file)
@@ -23,7 +23,7 @@
  * Copyright (c) 2009, 2010, Oracle and/or its affiliates. All rights reserved.
  * Use is subject to license terms.
  *
- * Copyright (c) 2012, 2014, Intel Corporation.
+ * Copyright (c) 2012, 2017, Intel Corporation.
  */
 /*
  * This file is part of Lustre, http://www.lustre.org/
@@ -207,12 +207,12 @@ int ofd_precreate_objects(const struct lu_env *env, struct ofd_device *ofd,
 
        /* Don't create objects beyond the valid range for this SEQ */
        if (unlikely(fid_seq_is_mdt0(ostid_seq(&oseq->os_oi)) &&
-                    (id + nr) >= IDIF_MAX_OID)) {
+                    (id + nr) > IDIF_MAX_OID)) {
                CERROR("%s:"DOSTID" hit the IDIF_MAX_OID (1<<48)!\n",
                       ofd_name(ofd), id, ostid_seq(&oseq->os_oi));
                RETURN(rc = -ENOSPC);
        } else if (unlikely(!fid_seq_is_mdt0(ostid_seq(&oseq->os_oi)) &&
-                           (id + nr) >= OBIF_MAX_OID)) {
+                           (id + nr) > OBIF_MAX_OID)) {
                CERROR("%s:"DOSTID" hit the OBIF_MAX_OID (1<<32)!\n",
                       ofd_name(ofd), id, ostid_seq(&oseq->os_oi));
                RETURN(rc = -ENOSPC);
@@ -536,11 +536,20 @@ int ofd_object_ff_update(const struct lu_env *env, struct ofd_object *fo,
                        RETURN(-EPERM);
                }
 
+               if (ff->ff_layout_version & LU_LAYOUT_RESYNC) {
+                       /* this opens a new era of writing */
+                       ff->ff_layout_version = 0;
+                       ff->ff_range = 0;
+               }
+
                /* it's not allowed to change it to a smaller value */
                if (oa->o_layout_version < ff->ff_layout_version)
                        RETURN(-EINVAL);
 
-               if (ff->ff_layout_version == 0) {
+               if (ff->ff_layout_version == 0 ||
+                   oa->o_layout_version & LU_LAYOUT_RESYNC) {
+                       /* if LU_LAYOUT_RESYNC is set, it closes the era of
+                        * writing. Only mirror I/O can write this object. */
                        ff->ff_layout_version = oa->o_layout_version;
                        ff->ff_range = 0;
                } else if (oa->o_layout_version > ff->ff_layout_version) {