* Copyright (c) 2009, 2010, Oracle and/or its affiliates. All rights reserved.
* Use is subject to license terms.
*
* Copyright (c) 2009, 2010, Oracle and/or its affiliates. All rights reserved.
* Use is subject to license terms.
*
if (atomic_dec_and_test(&oseq->os_refc)) {
LASSERT(list_empty(&oseq->os_list));
LASSERT(oseq->os_lastid_obj != NULL);
if (atomic_dec_and_test(&oseq->os_refc)) {
LASSERT(list_empty(&oseq->os_list));
LASSERT(oseq->os_lastid_obj != NULL);
void ofd_seq_last_oid_set(struct ofd_seq *oseq, u64 id)
{
spin_lock(&oseq->os_last_oid_lock);
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));
+ }
+ }
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)) {
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)) {
/* if seq is already initialized */
oseq = ofd_seq_get(ofd, seq);
/* if seq is already initialized */
oseq = ofd_seq_get(ofd, seq);
mutex_init(&oseq->os_create_lock);
spin_lock_init(&oseq->os_last_oid_lock);
ostid_set_seq(&oseq->os_oi, seq);
mutex_init(&oseq->os_create_lock);
spin_lock_init(&oseq->os_last_oid_lock);
ostid_set_seq(&oseq->os_oi, seq);
if (info->fti_attr.la_size == 0) {
/* object is just created, initialize last id */
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;
ofd_seq_last_oid_write(env, ofd, oseq);
} else if (info->fti_attr.la_size == sizeof(lastid)) {
info->fti_off = 0;
oseq = ofd_seq_add(env, ofd, oseq);
RETURN((oseq != NULL) ? oseq : ERR_PTR(-ENOENT));
cleanup:
oseq = ofd_seq_add(env, ofd, oseq);
RETURN((oseq != NULL) ? oseq : ERR_PTR(-ENOENT));
cleanup: