Whamcloud - gitweb
git://git.whamcloud.com
/
fs
/
lustre-release.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
LU-14688 mdt: changelog purge deletes plain llog
[fs/lustre-release.git]
/
lustre
/
obdclass
/
llog_osd.c
diff --git
a/lustre/obdclass/llog_osd.c
b/lustre/obdclass/llog_osd.c
index
6021396
..
683b622
100644
(file)
--- a/
lustre/obdclass/llog_osd.c
+++ b/
lustre/obdclass/llog_osd.c
@@
-903,9
+903,18
@@
static int llog_osd_next_block(const struct lu_env *env,
LASSERT(loghandle);
LASSERT(loghandle->lgh_ctxt);
LASSERT(loghandle);
LASSERT(loghandle->lgh_ctxt);
+ if (OBD_FAIL_PRECHECK(OBD_FAIL_MDS_CHANGELOG_DEL) &&
+ cfs_fail_val == ((unsigned long)loghandle & 0xFFFFFFFF)) {
+ OBD_RACE(OBD_FAIL_MDS_CHANGELOG_DEL);
+ msleep(MSEC_PER_SEC >> 2);
+ }
+
o = loghandle->lgh_obj;
LASSERT(o);
o = loghandle->lgh_obj;
LASSERT(o);
- LASSERT(llog_osd_exist(loghandle));
+ dt_read_lock(env, o, 0);
+ if (!llog_osd_exist(loghandle))
+ GOTO(out, rc = -ESTALE); //object was destroyed
+
dt = lu2dt_dev(o->do_lu.lo_dev);
LASSERT(dt);
dt = lu2dt_dev(o->do_lu.lo_dev);
LASSERT(dt);
@@
-1050,6
+1059,7
@@
retry:
}
GOTO(out, rc = -EIO);
out:
}
GOTO(out, rc = -EIO);
out:
+ dt_read_unlock(env, o);
return rc;
}
return rc;
}
@@
-1094,7
+1104,10
@@
static int llog_osd_prev_block(const struct lu_env *env,
o = loghandle->lgh_obj;
LASSERT(o);
o = loghandle->lgh_obj;
LASSERT(o);
- LASSERT(llog_osd_exist(loghandle));
+ dt_read_lock(env, o, 0);
+ if (!llog_osd_exist(loghandle))
+ GOTO(out, rc = -ESTALE);
+
dt = lu2dt_dev(o->do_lu.lo_dev);
LASSERT(dt);
dt = lu2dt_dev(o->do_lu.lo_dev);
LASSERT(dt);
@@
-1177,6
+1190,7
@@
static int llog_osd_prev_block(const struct lu_env *env,
}
GOTO(out, rc = -EIO);
out:
}
GOTO(out, rc = -EIO);
out:
+ dt_read_unlock(env, o);
return rc;
}
return rc;
}