From: Hongchao Zhang Date: Sat, 13 Jan 2018 10:08:29 +0000 (+0800) Subject: LU-8346 obdclass: protect key_set_version X-Git-Tag: 2.10.4-RC1~112 X-Git-Url: https://git.whamcloud.com/gitweb?a=commitdiff_plain;h=823e1549f109412db4a8cb31e648819660c5f7b8;p=fs%2Flustre-release.git LU-8346 obdclass: protect key_set_version In lu_context_refill, the key_set_version should be protected before comparing it to version stored in the lu_context. This patch is a supplement of the previous patch https://review.whamcloud.com/#/c/28405/, which adds protection for key_set_version from modification in lu_context_refill and lu_context_key_degister. Lustre-change: https://review.whamcloud.com/27448 Lustre-commit: 4538de675cc1ee05408fa912e71c65d9109d7027 Change-Id: I201f56214382a717cfc31ba573e06fec9fbedae4 Signed-off-by: Hongchao Zhang Reviewed-by: Patrick Farrell Reviewed-by: Fan Yong Signed-off-by: Minh Diep Reviewed-on: https://review.whamcloud.com/31017 Tested-by: Jenkins Tested-by: Maloo Reviewed-by: John L. Hammond --- diff --git a/lustre/obdclass/lu_object.c b/lustre/obdclass/lu_object.c index 751e3d1..f6a043b 100644 --- a/lustre/obdclass/lu_object.c +++ b/lustre/obdclass/lu_object.c @@ -1407,8 +1407,8 @@ void lu_context_key_degister(struct lu_context_key *key) lu_context_key_quiesce(key); - ++key_set_version; write_lock(&lu_keys_guard); + ++key_set_version; key_fini(&lu_shrink_env.le_ctx, key->lct_index); /** @@ -1778,7 +1778,14 @@ EXPORT_SYMBOL(lu_context_exit); */ int lu_context_refill(struct lu_context *ctx) { - return likely(ctx->lc_version == key_set_version) ? 0 : keys_fill(ctx); + read_lock(&lu_keys_guard); + if (likely(ctx->lc_version == key_set_version)) { + read_unlock(&lu_keys_guard); + return 0; + } + + read_unlock(&lu_keys_guard); + return keys_fill(ctx); } /**