Whamcloud - gitweb
LU-6158 mdt: always shrink_capsule in getxattr_all
[fs/lustre-release.git] / lustre / obdclass / local_storage.c
index 3672f01..463da93 100644 (file)
@@ -20,7 +20,7 @@
  * GPL HEADER END
  */
 /*
- * Copyright (c) 2012, 2013, Intel Corporation.
+ * Copyright (c) 2012, 2014, Intel Corporation.
  */
 /*
  * lustre/obdclass/local_storage.c
@@ -254,7 +254,7 @@ int local_object_create(const struct lu_env *env,
                        struct dt_object_format *dof, struct thandle *th)
 {
        struct dt_thread_info   *dti = dt_info(env);
-       obd_id                   lastid;
+       u64                      lastid;
        int                      rc;
 
        ENTRY;
@@ -345,6 +345,25 @@ static struct dt_object *__local_file_create(const struct lu_env *env,
        if (rc)
                GOTO(trans_stop, rc);
 
+       if (dti->dti_dof.dof_type == DFT_DIR) {
+               if (!dt_try_as_dir(env, dto))
+                       GOTO(trans_stop, rc = -ENOTDIR);
+
+               rc = dt_declare_insert(env, dto, (const struct dt_rec *)rec,
+                               (const struct dt_key *)".", th);
+               if (rc != 0)
+                       GOTO(trans_stop, rc);
+
+               rc = dt_declare_insert(env, dto, (const struct dt_rec *)rec,
+                               (const struct dt_key *)"..", th);
+               if (rc != 0)
+                       GOTO(trans_stop, rc);
+
+               rc = dt_declare_ref_add(env, dto, th);
+               if (rc != 0)
+                       GOTO(trans_stop, rc);
+       }
+
        rc = dt_trans_start_local(env, ls->ls_osd, th);
        if (rc)
                GOTO(trans_stop, rc);
@@ -361,21 +380,19 @@ static struct dt_object *__local_file_create(const struct lu_env *env,
        LASSERT(dt_object_exists(dto));
 
        if (dti->dti_dof.dof_type == DFT_DIR) {
-               if (!dt_try_as_dir(env, dto))
-                       GOTO(destroy, rc = -ENOTDIR);
 
                rec->rec_type = S_IFDIR;
                rec->rec_fid = fid;
                /* Add "." and ".." for newly created dir */
                rc = dt_insert(env, dto, (const struct dt_rec *)rec,
-                              (const struct dt_key *)".", th, BYPASS_CAPA, 1);
+                              (const struct dt_key *)".", th, 1);
                if (rc != 0)
                        GOTO(destroy, rc);
 
                dt_ref_add(env, dto, th);
                rec->rec_fid = lu_object_fid(&parent->do_lu);
                rc = dt_insert(env, dto, (const struct dt_rec *)rec,
-                              (const struct dt_key *)"..", th, BYPASS_CAPA, 1);
+                              (const struct dt_key *)"..", th, 1);
                if (rc != 0)
                        GOTO(destroy, rc);
        }
@@ -384,7 +401,7 @@ static struct dt_object *__local_file_create(const struct lu_env *env,
        rec->rec_type = dto->do_lu.lo_header->loh_attr;
        dt_write_lock(env, parent, 0);
        rc = dt_insert(env, parent, (const struct dt_rec *)rec,
-                      (const struct dt_key *)name, th, BYPASS_CAPA, 1);
+                      (const struct dt_key *)name, th, 1);
        if (dti->dti_dof.dof_type == DFT_DIR)
                dt_ref_add(env, parent, th);
        dt_write_unlock(env, parent);
@@ -640,7 +657,7 @@ int local_object_unlink(const struct lu_env *env, struct dt_device *dt,
                GOTO(stop, rc);
 
        dt_write_lock(env, dto, 0);
-       rc = dt_delete(env, parent, (struct dt_key *)name, th, BYPASS_CAPA);
+       rc = dt_delete(env, parent, (struct dt_key *)name, th);
        if (rc < 0)
                GOTO(unlock, rc);
 
@@ -651,7 +668,7 @@ int local_object_unlink(const struct lu_env *env, struct dt_device *dt,
                rec->rec_fid = &dti->dti_fid;
                rec->rec_type = dto->do_lu.lo_header->loh_attr;
                rc = dt_insert(env, parent, (const struct dt_rec *)rec,
-                              (const struct dt_key *)name, th, BYPASS_CAPA, 1);
+                              (const struct dt_key *)name, th, 1);
                GOTO(unlock, rc);
        }
 
@@ -786,7 +803,7 @@ int local_oid_storage_init(const struct lu_env *env, struct dt_device *dev,
 {
        struct dt_thread_info   *dti = dt_info(env);
        struct ls_device        *ls;
-       obd_id                   lastid;
+       u64                      lastid;
        struct dt_object        *o = NULL;
        struct thandle          *th;
        __u32                    first_oid = fid_oid(first_fid);