cleanup_phase = 2;
if (dentry->d_inode == NULL) {
- CERROR("%s: trying to BRW to non-existent file "LPU64"\n",
- obd->obd_name, obj->ioo_id);
- GOTO(cleanup, rc = -ENOENT);
+ if (exp->exp_obd->obd_recovering) {
+ struct obdo *noa = oa;
+
+ if (oa == NULL) {
+ OBDO_ALLOC(noa);
+ if (noa == NULL)
+ GOTO(recreate_out, rc = -ENOMEM);
+ noa->o_id = obj->ioo_id;
+ noa->o_valid = OBD_MD_FLID;
+ }
+
+ if (filter_create(exp, noa, NULL, oti) == 0) {
+ f_dput(dentry);
+ dentry = filter_fid2dentry(exp->exp_obd, NULL,
+ obj->ioo_seq,
+ obj->ioo_id);
+ }
+ if (oa == NULL)
+ OBDO_FREE(noa);
+ }
+ recreate_out:
+ if (IS_ERR(dentry) || dentry->d_inode == NULL) {
+ CERROR("%s: BRW to missing obj "LPU64"/"LPU64":rc %d\n",
+ exp->exp_obd->obd_name,
+ obj->ioo_id, obj->ioo_seq,
+ IS_ERR(dentry) ? (int)PTR_ERR(dentry) : -ENOENT);
+ if (IS_ERR(dentry))
+ cleanup_phase = 1;
+ GOTO(cleanup, rc = -ENOENT);
+ }
}
if (oa->o_valid & (OBD_MD_FLUID | OBD_MD_FLGID) &&
lnb[i].page = pga[i].pg;
rnb[i].offset = pga[i].off;
rnb[i].len = pga[i].count;
+ lnb[i].flags = rnb[i].flags = pga[i].flag;
}
obdo_to_ioobj(oinfo->oi_oa, &ioo);