X-Git-Url: https://git.whamcloud.com/?a=blobdiff_plain;f=lustre%2Fobdclass%2Flocal_storage.c;h=463da932321113ec3b66e221db9b4b08c120adf1;hb=7f67aa42f9123caef3cee714f1e2cee3c6848892;hp=563e8dd536fae10748c58ea0a42697b3367cc99a;hpb=3a490d8405ff73d6eaa14c291e14867b5ba01c87;p=fs%2Flustre-release.git diff --git a/lustre/obdclass/local_storage.c b/lustre/obdclass/local_storage.c index 563e8dd..463da93 100644 --- a/lustre/obdclass/local_storage.c +++ b/lustre/obdclass/local_storage.c @@ -20,7 +20,7 @@ * GPL HEADER END */ /* - * Copyright (c) 2012, 2013, Intel Corporation. + * Copyright (c) 2012, 2014, Intel Corporation. */ /* * lustre/obdclass/local_storage.c @@ -68,14 +68,14 @@ static void ls_object_free(const struct lu_env *env, struct lu_object *o) OBD_FREE_PTR(obj); } -struct lu_object_operations ls_lu_obj_ops = { +static struct lu_object_operations ls_lu_obj_ops = { .loo_object_init = ls_object_init, .loo_object_free = ls_object_free, }; -struct lu_object *ls_object_alloc(const struct lu_env *env, - const struct lu_object_header *_h, - struct lu_device *d) +static struct lu_object *ls_object_alloc(const struct lu_env *env, + const struct lu_object_header *_h, + struct lu_device *d) { struct lu_object_header *h; struct ls_object *o; @@ -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; @@ -291,13 +291,14 @@ int local_object_create(const struct lu_env *env, /* * Create local named object (file, directory or index) in parent directory. */ -struct dt_object *__local_file_create(const struct lu_env *env, - const struct lu_fid *fid, - struct local_oid_storage *los, - struct ls_device *ls, - struct dt_object *parent, - const char *name, struct lu_attr *attr, - struct dt_object_format *dof) +static struct dt_object *__local_file_create(const struct lu_env *env, + const struct lu_fid *fid, + struct local_oid_storage *los, + struct ls_device *ls, + struct dt_object *parent, + const char *name, + struct lu_attr *attr, + struct dt_object_format *dof) { struct dt_thread_info *dti = dt_info(env); struct lu_object_conf *conf = &dti->dti_conf; @@ -344,6 +345,25 @@ 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); @@ -360,21 +380,19 @@ 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); } @@ -383,7 +401,7 @@ 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); @@ -639,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); @@ -650,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); } @@ -691,8 +709,9 @@ void dt_los_put(struct local_oid_storage *los) /* after Lustre 2.3 release there may be old file to store last generated FID * If such file exists then we have to read its content */ -int lastid_compat_check(const struct lu_env *env, struct dt_device *dev, - __u64 lastid_seq, __u32 *first_oid, struct ls_device *ls) +static int lastid_compat_check(const struct lu_env *env, struct dt_device *dev, + __u64 lastid_seq, __u32 *first_oid, + struct ls_device *ls) { struct dt_thread_info *dti = dt_info(env); struct dt_object *root = NULL; @@ -784,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);