From: Patrick Farrell Date: Tue, 16 Jul 2019 16:28:25 +0000 (-0400) Subject: LU-12462 osc: Do not assert for first extent X-Git-Tag: 2.12.57~114 X-Git-Url: https://git.whamcloud.com/?a=commitdiff_plain;h=refs%2Fchanges%2F25%2F35525%2F3;p=fs%2Flustre-release.git LU-12462 osc: Do not assert for first extent In the discard case, the OSC fsync/writeback code asserts that each OSC extent is fully covered by the fsync request. This is not valid for the DOM case, because OSC extent alignment requirements can create OSC extents which start before the OST region of the layout (ie, they cross in to the DOM region). This is OK because the layout prevents them from ever being used for i/o, but this same behavior means that the OSC fsync start/end is aligned with the layout, and so does not necessarily cover that first extent. The simplest solution is just to not assert on the first extent. (There is no way at the OSC layer to recognize the DOM case.) Signed-off-by: Patrick Farrell Change-Id: If66f8d81fb9dd4546a5647a10f6ca551e2cf98e3 Reviewed-on: https://review.whamcloud.com/35525 Tested-by: jenkins Tested-by: Maloo Reviewed-by: Mike Pershin Reviewed-by: Andriy Skulysh Reviewed-by: Oleg Drokin --- diff --git a/lustre/osc/osc_cache.c b/lustre/osc/osc_cache.c index ef3b2c0..041abf5 100644 --- a/lustre/osc/osc_cache.c +++ b/lustre/osc/osc_cache.c @@ -3038,9 +3038,16 @@ int osc_cache_writeback_range(const struct lu_env *env, struct osc_object *obj, unplug = true; } else { /* the only discarder is lock cancelling, so - * [start, end] must contain this extent */ - EASSERT(ext->oe_start >= start && - ext->oe_end <= end, ext); + * [start, end] must contain this extent. + * However, with DOM, osc extent alignment may + * cause the first extent to start before the + * OST portion of the layout. This is never + * accessed for i/o, but the unused portion + * will not be covered by the sync request, + * so we cannot assert in that case. */ + EASSERT(ergo(!(ext == first_extent(obj)), + ext->oe_start >= start && + ext->oe_end <= end), ext); osc_extent_state_set(ext, OES_LOCKING); ext->oe_owner = current; list_move_tail(&ext->oe_link,