struct dentry *dlast;
loff_t off;
int rc = 0;
- int count = 0;
+ int count = FILTER_SUBDIR_COUNT;
ENTRY;
CDEBUG(D_INFO, "read last_rcvd header, uuid = %s, "
"subdir count = %d\n", lsd.lsd_uuid,
lsd.lsd_subdir_count);
- count = le16_to_cpu(lsd.lsd_subdir_count);
- } else if (rc != 0) {
- CERROR("Can't read last_rcvd file, rc = %d\n", rc);
- if (rc > 0)
- rc = -EFAULT;
- goto out;
- } else {
- count = FILTER_SUBDIR_COUNT;
- }
-
- rc = count;
+ if (le16_to_cpu(lsd.lsd_subdir_count) > 0)
+ count = le16_to_cpu(lsd.lsd_subdir_count);
+ } else if (rc != 0) {
+ CERROR("Can't read last_rcvd file, rc = %d\n", rc);
+ if (rc > 0)
+ rc = -EFAULT;
+ dput(dlast);
+ return rc;
+ } else {
+ count = FILTER_SUBDIR_COUNT;
+ }
out:
- dput(dlast);
- return rc;
+ dput(dlast);
+ LASSERT(count > 0);
+ return rc;
}
void osd_compat_fini(struct osd_device *dev)
*/
int osd_compat_init(struct osd_device *dev)
{
- struct lvfs_run_ctxt new;
- struct lvfs_run_ctxt save;
- struct dentry *rootd = osd_sb(dev)->s_root;
- struct dentry *d;
- int rc;
- int i;
-
- ENTRY;
-
- /* to get subdir count from last_rcvd */
- rc = osd_last_rcvd_subdir_count(dev);
- if (rc <= 0)
- RETURN(rc);
+ struct lvfs_run_ctxt new;
+ struct lvfs_run_ctxt save;
+ struct dentry *rootd = osd_sb(dev)->s_root;
+ struct dentry *d;
+ int rc;
+ int i;
+
+ ENTRY;
+
+ OBD_ALLOC_PTR(dev->od_ost_map);
+ if (dev->od_ost_map == NULL)
+ RETURN(-ENOMEM);
+
+ /* to get subdir count from last_rcvd */
+ rc = osd_last_rcvd_subdir_count(dev);
+ if (rc < 0) {
+ OBD_FREE_PTR(dev->od_ost_map);
+ RETURN(rc);
+ }
dev->od_ost_map->subdir_count = rc;
rc = 0;
- OBD_ALLOC_PTR(dev->od_ost_map);
- if (dev->od_ost_map == NULL)
- RETURN(-ENOMEM);
-
LASSERT(dev->od_fsops);
osd_push_ctxt(dev, &new, &save);
{ MDD_CAPA_KEYS_OID, "" /* CAPA_KEYS */ },
{ MDT_LAST_RECV_OID, LAST_RCVD },
{ OFD_LAST_RECV_OID, "" /* LAST_RCVD */ },
- { OFD_LAST_GROUP_OID, "" /* "LAST_GROUP" */ },
+ { OFD_LAST_GROUP_OID, "LAST_GROUP" },
{ LLOG_CATALOGS_OID, "" /* "CATALOGS" */ },
{ MGS_CONFIGS_OID, "" /* MOUNT_CONFIGS_DIR */ },
- { OFD_HEALTH_CHECK_OID, "" /* HEALTH_CHECK */ },
+ { OFD_HEALTH_CHECK_OID, HEALTH_CHECK },
{ 0, NULL }
};
}
int osd_compat_spec_lookup(struct osd_thread_info *info,
- struct osd_device *osd, const struct lu_fid *fid,
- struct osd_inode_id *id)
+ struct osd_device *osd, const struct lu_fid *fid,
+ struct osd_inode_id *id)
{
- struct dentry *dentry;
- char *name;
- int rc = -ERESTART;
-
- ENTRY;
-
- name = oid2name(fid_oid(fid));
- if (name == NULL || strlen(name) == 0)
- return -ERESTART;
+ struct dentry *dentry;
+ char *name;
+ int rc = -ENOENT;
+ ENTRY;
+
+ name = oid2name(fid_oid(fid));
+ if (name == NULL || strlen(name) == 0)
+ RETURN(-ENOENT);
dentry = ll_lookup_one_len(name, osd_sb(osd)->s_root, strlen(name));
if (!IS_ERR(dentry)) {