Whamcloud - gitweb
LU-3569 ofd: packing ost_idx in IDIF
[fs/lustre-release.git] / lustre / ofd / ofd_objects.c
index 32ca902..ee9ebe2 100644 (file)
@@ -27,7 +27,7 @@
  * Copyright (c) 2009, 2010, Oracle and/or its affiliates. All rights reserved.
  * Use is subject to license terms.
  *
- * Copyright (c) 2012, Intel Corporation.
+ * Copyright (c) 2012, 2013, Intel Corporation.
  */
 /*
  * This file is part of Lustre, http://www.lustre.org/
@@ -84,7 +84,8 @@ struct ofd_object *ofd_object_find(const struct lu_env *env,
        if (likely(!IS_ERR(o)))
                fo = ofd_obj(o);
        else
-               fo = (struct ofd_object *)o; /* return error */
+               fo = ERR_CAST(o); /* return error */
+
        RETURN(fo);
 }
 
@@ -103,7 +104,7 @@ struct ofd_object *ofd_object_find_or_create(const struct lu_env *env,
 
        dto = dt_find_or_create(env, ofd->ofd_osd, fid, &info->fti_dof, attr);
        if (IS_ERR(dto))
-               RETURN((struct ofd_object *)dto);
+               RETURN(ERR_CAST(dto));
 
        fo_obj = lu_object_locate(dto->do_lu.lo_header,
                                  ofd->ofd_dt_dev.dd_lu_dev.ld_type);
@@ -112,8 +113,7 @@ struct ofd_object *ofd_object_find_or_create(const struct lu_env *env,
 
 int ofd_object_ff_check(const struct lu_env *env, struct ofd_object *fo)
 {
-       struct ofd_thread_info  *info = ofd_info(env);
-       int                      rc = 0;
+       int rc = 0;
 
        ENTRY;
 
@@ -122,9 +122,7 @@ int ofd_object_ff_check(const struct lu_env *env, struct ofd_object *fo)
                 * This actually means that we don't know whether the object
                 * has the "fid" EA or not.
                 */
-               info->fti_buf.lb_buf = &info->fti_mds_fid2;
-               info->fti_buf.lb_len = sizeof(info->fti_mds_fid2);
-               rc = dt_xattr_get(env, ofd_object_child(fo), &info->fti_buf,
+               rc = dt_xattr_get(env, ofd_object_child(fo), &LU_BUF_NULL,
                                  XATTR_NAME_FID, BYPASS_CAPA);
                if (rc >= 0 || rc == -ENODATA) {
                        /*
@@ -154,6 +152,7 @@ int ofd_precreate_objects(const struct lu_env *env, struct ofd_device *ofd,
        struct dt_object        *next;
        struct thandle          *th;
        struct ofd_object       **batch;
+       struct lu_fid           *fid = &info->fti_fid;
        obd_id                   tmp;
        int                      rc;
        int                      i;
@@ -163,14 +162,15 @@ int ofd_precreate_objects(const struct lu_env *env, struct ofd_device *ofd,
        ENTRY;
 
        /* Don't create objects beyond the valid range for this SEQ */
-       if (unlikely(fid_seq_is_mdt0(oseq->os_seq) && (id + nr) >= IDIF_MAX_OID)) {
+       if (unlikely(fid_seq_is_mdt0(ostid_seq(&oseq->os_oi)) &&
+                    (id + nr) >= IDIF_MAX_OID)) {
                CERROR("%s:"DOSTID" hit the IDIF_MAX_OID (1<<48)!\n",
-                      ofd_name(ofd), id, oseq->os_seq);
+                      ofd_name(ofd), id, ostid_seq(&oseq->os_oi));
                RETURN(rc = -ENOSPC);
-       } else if (unlikely(!fid_seq_is_mdt0(oseq->os_seq) &&
+       } else if (unlikely(!fid_seq_is_mdt0(ostid_seq(&oseq->os_oi)) &&
                            (id + nr) >= OBIF_MAX_OID)) {
                CERROR("%s:"DOSTID" hit the OBIF_MAX_OID (1<<32)!\n",
-                      ofd_name(ofd), id, oseq->os_seq);
+                      ofd_name(ofd), id, ostid_seq(&oseq->os_oi));
                RETURN(rc = -ENOSPC);
        }
 
@@ -195,21 +195,21 @@ int ofd_precreate_objects(const struct lu_env *env, struct ofd_device *ofd,
        info->fti_attr.la_mtime = 0;
        info->fti_attr.la_ctime = 0;
 
+       LASSERT(id != 0);
+
        /* prepare objects */
+       *fid = *lu_object_fid(&oseq->os_lastid_obj->do_lu);
        for (i = 0; i < nr; i++) {
-               info->fti_ostid.oi_id = id + i;
-               info->fti_ostid.oi_seq = oseq->os_seq;
-
-               rc = fid_ostid_unpack(&info->fti_fid, &info->fti_ostid, 0);
-               if (rc) {
+               rc = fid_set_id(fid, id + i);
+               if (rc != 0) {
                        if (i == 0)
-                               GOTO(out, rc = PTR_ERR(fo));
+                               GOTO(out, rc);
 
                        nr = i;
                        break;
                }
 
-               fo = ofd_object_find(env, ofd, &info->fti_fid);
+               fo = ofd_object_find(env, ofd, fid);
                if (IS_ERR(fo)) {
                        if (i == 0)
                                GOTO(out, rc = PTR_ERR(fo));
@@ -243,8 +243,8 @@ int ofd_precreate_objects(const struct lu_env *env, struct ofd_device *ofd,
                if (unlikely(ofd_object_exists(fo))) {
                        /* object may exist being re-created by write replay */
                        CDEBUG(D_INODE, "object "LPX64"/"LPX64" exists: "
-                              DFID"\n", oseq->os_seq, id,
-                              PFID(&info->fti_fid));
+                              DFID"\n", ostid_seq(&oseq->os_oi), id,
+                              PFID(lu_object_fid(&fo->ofo_obj.do_lu)));
                        continue;
                }
 
@@ -263,7 +263,8 @@ int ofd_precreate_objects(const struct lu_env *env, struct ofd_device *ofd,
        if (rc)
                GOTO(trans_stop, rc);
 
-       CDEBUG(D_OTHER, "create new object "DFID"\n", PFID(&info->fti_fid));
+       CDEBUG(D_OTHER, "%s: create new object "DFID" nr %d\n",
+              ofd_name(ofd), PFID(fid), nr);
 
        for (i = 0; i < nr; i++) {
                fo = batch[i];