/**
* osd_lookup_one_len_unlocked
*
+ * @dev: obd device we are searching
* @name: pathname component to lookup
* @base: base directory to lookup from
* @len: maximum length @len should be interpreted to
* This should be called without the parent
* i_mutex held, and will take the i_mutex itself.
*/
-struct dentry *osd_lookup_one_len_unlocked(const char *name,
+struct dentry *osd_lookup_one_len_unlocked(struct osd_device *dev,
+ const char *name,
struct dentry *base, int len)
{
struct dentry *dchild;
return dchild;
if (dchild->d_inode && unlikely(is_bad_inode(dchild->d_inode))) {
- CERROR("bad inode returned %lu/%u\n",
- dchild->d_inode->i_ino, dchild->d_inode->i_generation);
+ CERROR("%s: bad inode returned %lu/%u: rc = -ENOENT\n",
+ osd_name(dev), dchild->d_inode->i_ino,
+ dchild->d_inode->i_generation);
dput(dchild);
dchild = ERR_PTR(-ENOENT);
}
/**
* osd_ios_lookup_one_len - lookup single pathname component
*
+ * @dev: obd device we are searching
* @name: pathname component to lookup
* @base: base directory to lookup from
* @len: maximum length @len should be interpreted to
*/
-struct dentry *osd_ios_lookup_one_len(const char *name, struct dentry *base,
- int len)
+struct dentry *osd_ios_lookup_one_len(struct osd_device *dev, const char *name,
+ struct dentry *base, int len)
{
- return osd_lookup_one_len_unlocked(name, base, len);
+ return osd_lookup_one_len_unlocked(dev, name, base, len);
}
/* utility to make a directory */
// ASSERT_KERNEL_CTXT("kernel doing mkdir outside kernel context\n");
CDEBUG(D_INODE, "creating directory %.*s\n", (int)strlen(name), name);
- dchild = osd_lookup_one_len_unlocked(name, dir, strlen(name));
+ dchild = osd_lookup_one_len_unlocked(osd, name, dir, strlen(name));
if (IS_ERR(dchild))
RETURN(dchild);
ENTRY;
- dlast = osd_lookup_one_len_unlocked(LAST_RCVD, osd_sb(osd)->s_root,
+ dlast = osd_lookup_one_len_unlocked(osd, LAST_RCVD, osd_sb(osd)->s_root,
strlen(LAST_RCVD));
if (IS_ERR(dlast))
return PTR_ERR(dlast);
RETURN(-ENOENT);
}
- dentry = osd_lookup_one_len_unlocked(name, root, strlen(name));
+ dentry = osd_lookup_one_len_unlocked(osd, name, root, strlen(name));
if (!IS_ERR(dentry)) {
inode = dentry->d_inode;
if (inode) {
struct osd_inode_id *id);
void osd_scrub_dump(struct seq_file *m, struct osd_device *dev);
-struct dentry *osd_lookup_one_len_unlocked(const char *name,
+struct dentry *osd_lookup_one_len_unlocked(struct osd_device *dev,
+ const char *name,
struct dentry *base, int len);
-struct dentry *osd_ios_lookup_one_len(const char *name, struct dentry *base,
- int len);
+struct dentry *osd_ios_lookup_one_len(struct osd_device *dev,
+ const char *name,
+ struct dentry *base, int len);
int osd_fld_lookup(const struct lu_env *env, struct osd_device *osd,
u64 seq, struct lu_seq_range *range);
struct inode *inode;
int rc;
- dentry = osd_lookup_one_len_unlocked(name, osd_sb(osd)->s_root,
+ dentry = osd_lookup_one_len_unlocked(osd, name, osd_sb(osd)->s_root,
strlen(name));
if (IS_ERR(dentry))
return ERR_CAST(dentry);
if (rc)
return ERR_PTR(rc);
- dentry = osd_lookup_one_len_unlocked(name, osd_sb(osd)->s_root,
+ dentry = osd_lookup_one_len_unlocked(osd, name, osd_sb(osd)->s_root,
strlen(name));
if (IS_ERR(dentry))
return ERR_CAST(dentry);
RETURN(count);
}
-static int osd_remove_oi_one(struct dentry *parent, const char *name,
- int namelen)
+static int osd_remove_oi_one(struct osd_device *osd, struct dentry *parent,
+ const char *name, int namelen)
{
struct dentry *child;
int rc;
- child = osd_lookup_one_len_unlocked(name, parent, namelen);
+ child = osd_lookup_one_len_unlocked(osd, name, parent, namelen);
if (IS_ERR(child)) {
rc = PTR_ERR(child);
} else {
for (i = 0; i < OSD_OI_FID_NR_MAX; i++) {
namelen = snprintf(name, sizeof(name), "%s.%d",
OSD_OI_NAME_BASE, i);
- rc = osd_remove_oi_one(osd_sb(osd)->s_root, name, namelen);
+ rc = osd_remove_oi_one(osd, osd_sb(osd)->s_root, name, namelen);
if (rc != 0) {
CERROR("%s: fail to remove the stale OI file %s: "
"rc = %d\n", osd_dev2name(osd), name, rc);
}
namelen = snprintf(name, sizeof(name), "%s", OSD_OI_NAME_BASE);
- rc = osd_remove_oi_one(osd_sb(osd)->s_root, name, namelen);
+ rc = osd_remove_oi_one(osd, osd_sb(osd)->s_root, name, namelen);
if (rc != 0)
CERROR("%s: fail to remove the stale OI file %s: rc = %d\n",
osd_dev2name(osd), name, rc);
RETURN(0);
scrub->os_lf_scanned++;
- child = osd_ios_lookup_one_len(name, parent, namelen);
+ child = osd_ios_lookup_one_len(dev, name, parent, namelen);
if (IS_ERR(child)) {
CDEBUG(D_LFSCK, "%s: cannot lookup child '%.*s': rc = %d\n",
osd_name(dev), namelen, name, (int)PTR_ERR(child));
if (name[0] == '.')
RETURN(0);
- child = osd_ios_lookup_one_len(name, fill_buf->oifb_dentry, namelen);
+ child = osd_ios_lookup_one_len(dev, name, fill_buf->oifb_dentry,
+ namelen);
if (IS_ERR(child))
RETURN(PTR_ERR(child));
if (map->olm_name == NULL)
RETURN(0);
- child = osd_ios_lookup_one_len(name, fill_buf->oifb_dentry, namelen);
+ child = osd_ios_lookup_one_len(dev, name, fill_buf->oifb_dentry,
+ namelen);
if (IS_ERR(child))
RETURN(PTR_ERR(child));
{
struct osd_ios_filldir_buf *fill_buf =
(struct osd_ios_filldir_buf *)buf;
+ struct osd_device *dev = fill_buf->oifb_dev;
struct dentry *child;
struct lu_fid tfid;
int rc = 0;
if (name[0] != '[')
RETURN(0);
- child = osd_ios_lookup_one_len(name, fill_buf->oifb_dentry, namelen);
+ child = osd_ios_lookup_one_len(dev, name, fill_buf->oifb_dentry,
+ namelen);
if (IS_ERR(child))
RETURN(PTR_ERR(child));
if (map->olm_name == NULL)
RETURN(0);
- child = osd_ios_lookup_one_len(name, fill_buf->oifb_dentry, namelen);
+ child = osd_ios_lookup_one_len(dev, name, fill_buf->oifb_dentry,
+ namelen);
if (IS_ERR(child))
RETURN(PTR_ERR(child));
else if (!child->d_inode)
* OI mapping crashed or lost also, then we have to give up under
* double failure cases. */
scrub->os_convert_igif = 1;
- child = osd_ios_lookup_one_len(dot_lustre_name, dentry,
+ child = osd_ios_lookup_one_len(dev, dot_lustre_name, dentry,
strlen(dot_lustre_name));
if (IS_ERR(child)) {
if (PTR_ERR(child) != -ENOENT)
RETURN(rc);
}
- child = osd_ios_lookup_one_len(ADMIN_USR, dentry, strlen(ADMIN_USR));
+ child = osd_ios_lookup_one_len(dev, ADMIN_USR, dentry,
+ strlen(ADMIN_USR));
if (IS_ERR(child)) {
rc = PTR_ERR(child);
} else {
if (rc != 0 && rc != -ENOENT)
GOTO(out, rc);
- child = osd_ios_lookup_one_len(ADMIN_GRP, dentry, strlen(ADMIN_GRP));
+ child = osd_ios_lookup_one_len(dev, ADMIN_GRP, dentry,
+ strlen(ADMIN_GRP));
if (IS_ERR(child))
GOTO(out, rc = PTR_ERR(child));
continue;
}
- child = osd_ios_lookup_one_len(map->olm_name,
+ child = osd_ios_lookup_one_len(dev, map->olm_name,
osd_sb(dev)->s_root,
map->olm_namelen);
if (PTR_ERR(child) == -ENOENT ||