zde->zde_dnode = oid;
zde->zde_pad = 0;
- zde->zde_type = IFTODT(isdir ? S_IFDIR : S_IFREG);
+ zde->zde_type = S_DT(isdir ? S_IFDIR : S_IFREG);
rc = -zap_add(o->od_os, parent, name, 8, 1, (void *)zde, tx);
GOTO(commit, rc);
/* Init subdir count to be 32, but each seq can have
* different subdir count */
osd_seq->os_subdir_count = OSD_OST_MAP_SIZE;
- OBD_ALLOC(osd_seq->os_compat_dirs,
- sizeof(uint64_t) * osd_seq->os_subdir_count);
+ OBD_ALLOC_PTR_ARRAY(osd_seq->os_compat_dirs, osd_seq->os_subdir_count);
if (osd_seq->os_compat_dirs == NULL)
GOTO(out, rc = -ENOMEM);
up(&seq_list->osl_seq_init_sem);
if (rc != 0) {
if (osd_seq != NULL && osd_seq->os_compat_dirs != NULL)
- OBD_FREE(osd_seq->os_compat_dirs,
- sizeof(uint64_t) * osd_seq->os_subdir_count);
+ OBD_FREE_PTR_ARRAY(osd_seq->os_compat_dirs,
+ osd_seq->os_subdir_count);
if (osd_seq != NULL)
OBD_FREE_PTR(osd_seq);
osd_seq = ERR_PTR(rc);
if (zdn != NULL)
*zdn = NULL;
- if (fid_is_on_ost(env, osd, fid) == 1 || fid_seq(fid) == FID_SEQ_ECHO) {
+ if (fid_is_echo(fid) || fid_is_on_ost(env, osd, fid)) {
zapid = osd_get_idx_for_ost_obj_compat(env, osd, fid,
buf, bufsize);
} else if (unlikely(fid_seq(fid) == FID_SEQ_LOCAL_FILE)) {
if (zdn != NULL)
*zdn = NULL;
- if (fid_is_on_ost(env, osd, fid) == 1 || fid_seq(fid) == FID_SEQ_ECHO ||
- fid_is_last_id(fid)) {
+ if (fid_is_echo(fid) || fid_is_last_id(fid) ||
+ fid_is_on_ost(env, osd, fid)) {
zapid = osd_get_idx_for_ost_obj(env, osd, fid, buf, bufsize);
} else if (unlikely(fid_seq(fid) == FID_SEQ_LOCAL_FILE)) {
/* special objects with fixed known fids get their name */
* power of two and this is checked for basic sanity.
*/
for (count = 0; count < max; count++) {
- snprintf(name, 15, "%s.%d", DMU_OSD_OI_NAME_BASE, count);
+ snprintf(name, sizeof(name) - 1, "%s.%d",
+ DMU_OSD_OI_NAME_BASE, count);
rc = osd_oi_lookup(env, o, o->od_root, name, &oi);
if (!rc)
continue;
list_for_each_entry_safe(osd_seq, tmp, &osl->osl_seq_list,
os_seq_list) {
list_del(&osd_seq->os_seq_list);
- OBD_FREE(osd_seq->os_compat_dirs,
- sizeof(uint64_t) * osd_seq->os_subdir_count);
+ OBD_FREE_PTR_ARRAY(osd_seq->os_compat_dirs,
+ osd_seq->os_subdir_count);
OBD_FREE(osd_seq, sizeof(*osd_seq));
}
write_unlock(&osl->osl_seq_list_lock);
-
- return;
}
/**
RETURN(rc);
}
+static int
+osd_oi_init_index_backup(const struct lu_env *env, struct osd_device *o)
+{
+ struct lu_fid *fid = &osd_oti_get(env)->oti_fid;
+ int rc;
+ ENTRY;
+
+ lu_local_obj_fid(fid, INDEX_BACKUP_OID);
+ rc = osd_obj_find_or_create(env, o, o->od_root, INDEX_BACKUP_DIR,
+ &o->od_index_backup_id, fid, true);
+
+ RETURN(rc);
+}
+
static void
osd_oi_init_remote_parent(const struct lu_env *env, struct osd_device *o)
{
LASSERTF((sf->sf_oi_count & (sf->sf_oi_count - 1)) == 0,
"Invalid OI count in scrub file %d\n", sf->sf_oi_count);
+ rc = osd_oi_init_index_backup(env, o);
+ if (rc)
+ RETURN(rc);
+
osd_oi_init_remote_parent(env, o);
rc = osd_oi_init_compat(env, o);
open:
LASSERT((count & (count - 1)) == 0);
o->od_oi_count = count;
- OBD_ALLOC(o->od_oi_table, sizeof(struct osd_oi *) * count);
+ OBD_ALLOC_PTR_ARRAY(o->od_oi_table, count);
if (o->od_oi_table == NULL)
GOTO(out, rc = -ENOMEM);
osd_ost_seq_fini(env, o);
if (o->od_oi_table) {
- OBD_FREE(o->od_oi_table,
- sizeof(struct osd_oi *) * count);
+ OBD_FREE_PTR_ARRAY(o->od_oi_table, count);
o->od_oi_table = NULL;
}
}
if (o->od_oi_table != NULL) {
(void) osd_oi_close_table(env, o);
- OBD_FREE(o->od_oi_table,
- sizeof(struct osd_oi *) * o->od_oi_count);
+ OBD_FREE_PTR_ARRAY(o->od_oi_table, o->od_oi_count);
o->od_oi_table = NULL;
o->od_oi_count = 0;
}
if (unlikely(oti->oti_ins_cache_used >= oti->oti_ins_cache_size)) {
i = oti->oti_ins_cache_size * 2;
- LASSERT(i < 1000);
if (i == 0)
i = OSD_INS_CACHE_SIZE;
- OBD_ALLOC(idc, sizeof(*idc) * i);
+ OBD_ALLOC_PTR_ARRAY_LARGE(idc, i);
if (idc == NULL)
return ERR_PTR(-ENOMEM);
if (oti->oti_ins_cache != NULL) {
memcpy(idc, oti->oti_ins_cache,
oti->oti_ins_cache_used * sizeof(*idc));
- OBD_FREE(oti->oti_ins_cache,
- oti->oti_ins_cache_used * sizeof(*idc));
+ OBD_FREE_PTR_ARRAY_LARGE(oti->oti_ins_cache,
+ oti->oti_ins_cache_used);
}
oti->oti_ins_cache = idc;
oti->oti_ins_cache_size = i;
if (idc != NULL)
return idc;
+ CDEBUG(D_INODE, "%s: FID "DFID" not in the id map cache\n",
+ osd->od_svname, PFID(fid));
+
/* new mapping is needed */
idc = osd_idc_add(env, osd, fid);
- if (IS_ERR(idc))
+ if (IS_ERR(idc)) {
+ CERROR("%s: FID "DFID" add id map cache failed: %ld\n",
+ osd->od_svname, PFID(fid), PTR_ERR(idc));
return idc;
+ }
/* initialize it */
rc = osd_remote_fid(env, osd, fid);
return 0;
}
+ CDEBUG(D_INODE, "%s: FID "DFID" not in the id map cache\n",
+ osd->od_svname, PFID(fid));
+
/* new mapping is needed */
idc = osd_idc_add(env, osd, fid);
- if (IS_ERR(idc))
+ if (IS_ERR(idc)) {
+ CERROR("%s: FID "DFID" add id map cache failed: %ld\n",
+ osd->od_svname, PFID(fid), PTR_ERR(idc));
return PTR_ERR(idc);
+ }
if (obj->oo_dn)
idc->oic_dnode = obj->oo_dn->dn_object;