X-Git-Url: https://git.whamcloud.com/?a=blobdiff_plain;f=lustre%2Fofd%2Fofd_fs.c;h=062bb05505c9cfdb718ad50e28ce94778870061a;hb=81c6dc423ce4c62a64d328e49697d26194177f9f;hp=25e59c21d2c730c045d15424722bce71d1929d59;hpb=5963af745b3aa14410d5ceb66f8a7b7d6aaf576a;p=fs%2Flustre-release.git diff --git a/lustre/ofd/ofd_fs.c b/lustre/ofd/ofd_fs.c index 25e59c2..062bb05 100644 --- a/lustre/ofd/ofd_fs.c +++ b/lustre/ofd/ofd_fs.c @@ -23,11 +23,10 @@ * 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/ - * Lustre is a trademark of Sun Microsystems, Inc. * * lustre/ofd/ofd_fs.c * @@ -181,8 +180,12 @@ u64 ofd_seq_last_oid(struct ofd_seq *oseq) void ofd_seq_last_oid_set(struct ofd_seq *oseq, u64 id) { spin_lock(&oseq->os_last_oid_lock); - if (likely(ostid_id(&oseq->os_oi) < id)) - ostid_set_id(&oseq->os_oi, id); + if (likely(ostid_id(&oseq->os_oi) < id)) { + if (ostid_set_id(&oseq->os_oi, id)) { + CERROR("Bad %llu to set " DOSTID "\n", + (unsigned long long)id, POSTID(&oseq->os_oi)); + } + } spin_unlock(&oseq->os_last_oid_lock); } @@ -306,18 +309,17 @@ static void ofd_fld_fini(const struct lu_env *env, struct ofd_device *ofd) */ void ofd_seqs_free(const struct lu_env *env, struct ofd_device *ofd) { - struct ofd_seq *oseq; - struct ofd_seq *tmp; - struct list_head dispose; + struct ofd_seq *oseq; + struct ofd_seq *tmp; + LIST_HEAD(dispose); - INIT_LIST_HEAD(&dispose); write_lock(&ofd->ofd_seq_list_lock); list_for_each_entry_safe(oseq, tmp, &ofd->ofd_seq_list, os_list) list_move(&oseq->os_list, &dispose); write_unlock(&ofd->ofd_seq_list_lock); while (!list_empty(&dispose)) { - oseq = container_of0(dispose.next, struct ofd_seq, os_list); + oseq = container_of(dispose.next, struct ofd_seq, os_list); list_del_init(&oseq->os_list); ofd_seq_put(env, oseq); } @@ -375,8 +377,11 @@ struct ofd_seq *ofd_seq_load(const struct lu_env *env, struct ofd_device *ofd, /* if seq is already initialized */ oseq = ofd_seq_get(ofd, seq); - if (oseq != NULL) + if (oseq != NULL) { + CDEBUG(D_TRACE, "%s: got sequence %#llx "DOSTID"\n", + ofd_name(ofd), seq, POSTID(&oseq->os_oi)); RETURN(oseq); + } OBD_ALLOC_PTR(oseq); if (oseq == NULL) @@ -403,8 +408,10 @@ struct ofd_seq *ofd_seq_load(const struct lu_env *env, struct ofd_device *ofd, mutex_init(&oseq->os_create_lock); spin_lock_init(&oseq->os_last_oid_lock); ostid_set_seq(&oseq->os_oi, seq); + oseq->os_last_id_synced = 0; atomic_set(&oseq->os_refc, 1); + atomic_set(&oseq->os_precreate_in_progress, 0); rc = dt_attr_get(env, dob, &info->fti_attr); if (rc) @@ -412,7 +419,10 @@ struct ofd_seq *ofd_seq_load(const struct lu_env *env, struct ofd_device *ofd, if (info->fti_attr.la_size == 0) { /* object is just created, initialize last id */ - ofd_seq_last_oid_set(oseq, OFD_INIT_OBJID); + if (OBD_FAIL_CHECK(OBD_FAIL_OFD_SET_OID)) + ofd_seq_last_oid_set(oseq, 0xffffff00); + else + ofd_seq_last_oid_set(oseq, OFD_INIT_OBJID); ofd_seq_last_oid_write(env, ofd, oseq); } else if (info->fti_attr.la_size == sizeof(lastid)) { info->fti_off = 0; @@ -432,6 +442,8 @@ struct ofd_seq *ofd_seq_load(const struct lu_env *env, struct ofd_device *ofd, GOTO(cleanup, rc = -EINVAL); } + CDEBUG(D_HA, "%s: adding sequence %#llx\n", ofd_name(ofd), seq); + oseq = ofd_seq_add(env, ofd, oseq); RETURN((oseq != NULL) ? oseq : ERR_PTR(-ENOENT)); cleanup: