From: Jinshan Xiong Date: Sun, 30 Mar 2014 02:14:05 +0000 (-0700) Subject: LU-3254 llite: Update layout_gen only if layout change succeed X-Git-Tag: 2.5.58~3 X-Git-Url: https://git.whamcloud.com/?p=fs%2Flustre-release.git;a=commitdiff_plain;h=0603cc1a773dbe72f520e856743ef40fd7dfa1af;ds=sidebyside LU-3254 llite: Update layout_gen only if layout change succeed Move layout generation update to ll_layout_conf() so that it will change layout at LLITE only if layout update has succeeded. Signed-off-by: Jinshan Xiong Change-Id: I407d617be184b1c888d6b16b11f7e33bf10add80 Reviewed-on: http://review.whamcloud.com/9858 Tested-by: Jenkins Tested-by: Maloo Reviewed-by: Lai Siyao Reviewed-by: Bobi Jam Reviewed-by: Oleg Drokin --- diff --git a/lustre/llite/file.c b/lustre/llite/file.c index cc3ecaa..e0019c3 100644 --- a/lustre/llite/file.c +++ b/lustre/llite/file.c @@ -3718,11 +3718,24 @@ int ll_layout_conf(struct inode *inode, const struct cl_object_conf *conf) LASSERT(lock != NULL); LASSERT(ldlm_has_layout(lock)); if (result == 0) { + struct lustre_md *md = conf->u.coc_md; + __u32 gen = LL_LAYOUT_GEN_EMPTY; + /* it can only be allowed to match after layout is * applied to inode otherwise false layout would be * seen. Applying layout shoud happen before dropping * the intent lock. */ ldlm_lock_allow_match(lock); + + lli->lli_has_smd = lsm_has_objects(md->lsm); + if (md->lsm != NULL) + gen = md->lsm->lsm_layout_gen; + + CDEBUG(D_VFSTRACE, + DFID ": layout version change: %u -> %u\n", + PFID(&lli->lli_fid), ll_layout_version_get(lli), + gen); + ll_layout_version_set(lli, gen); } } RETURN(result); diff --git a/lustre/llite/vvp_io.c b/lustre/llite/vvp_io.c index 9a464f2..e95edcf 100644 --- a/lustre/llite/vvp_io.c +++ b/lustre/llite/vvp_io.c @@ -792,7 +792,7 @@ static int vvp_io_write_start(const struct lu_env *env, ENTRY; if (!can_populate_pages(env, io, inode)) - return 0; + RETURN(0); if (cl_io_is_append(io)) { /* diff --git a/lustre/llite/vvp_object.c b/lustre/llite/vvp_object.c index 35262e1..498d3b2 100644 --- a/lustre/llite/vvp_object.c +++ b/lustre/llite/vvp_object.c @@ -144,26 +144,6 @@ static int vvp_conf_set(const struct lu_env *env, struct cl_object *obj, * a price themselves. */ unmap_mapping_range(conf->coc_inode->i_mapping, 0, OBD_OBJECT_EOF, 0); - - return 0; - } - - if (conf->coc_opc != OBJECT_CONF_SET) - return 0; - - if (conf->u.coc_md != NULL && conf->u.coc_md->lsm != NULL) { - CDEBUG(D_VFSTRACE, DFID ": layout version change: %u -> %u\n", - PFID(&lli->lli_fid), lli->lli_layout_gen, - conf->u.coc_md->lsm->lsm_layout_gen); - - lli->lli_has_smd = lsm_has_objects(conf->u.coc_md->lsm); - ll_layout_version_set(lli, conf->u.coc_md->lsm->lsm_layout_gen); - } else { - CDEBUG(D_VFSTRACE, DFID ": layout nuked: %u.\n", - PFID(&lli->lli_fid), lli->lli_layout_gen); - - lli->lli_has_smd = false; - ll_layout_version_set(lli, LL_LAYOUT_GEN_EMPTY); } return 0; }