staging: lustre: lov: adjust page bufsize after layout change
authorJinshan Xiong <jinshan.xiong@intel.com>
Sun, 18 Sep 2016 20:37:16 +0000 (16:37 -0400)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Mon, 19 Sep 2016 07:37:45 +0000 (09:37 +0200)
Otherwise, the coh_page_bufsize keeps increasing when the file's
layout keeps changing in lov_init_raid0().

Signed-off-by: Jinshan Xiong <jinshan.xiong@intel.com>
Intel-bug-id: https://jira.hpdd.intel.com/browse/LU-5459
Reviewed-on: http://review.whamcloud.com/11394
Reviewed-by: frank zago <fzago@cray.com>
Reviewed-by: Bobi Jam <bobijam@gmail.com>
Reviewed-by: John L. Hammond <john.hammond@intel.com>
Reviewed-by: Oleg Drokin <oleg.drokin@intel.com>
Signed-off-by: James Simmons <jsimmons@infradead.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
drivers/staging/lustre/lustre/lov/lov_object.c

index 2a52d0c527990925d724e8074fda65a2ad822621..4f766e090ccf8739ac913dc141f84d45ce4a59e4 100644 (file)
@@ -195,6 +195,10 @@ static int lov_page_slice_fixup(struct lov_object *lov,
        struct cl_object_header *hdr = cl_object_header(&lov->lo_cl);
        struct cl_object *o;
 
+       if (!stripe)
+               return hdr->coh_page_bufsize - lov->lo_cl.co_slice_off -
+                      cfs_size_round(sizeof(struct lov_page));
+
        cl_object_for_each(o, stripe)
                o->co_slice_off += hdr->coh_page_bufsize;
 
@@ -720,6 +724,10 @@ static int lov_layout_change(const struct lu_env *unused,
                LASSERT(atomic_read(&lov->lo_active_ios) == 0);
 
                lov->lo_type = LLT_EMPTY;
+               /* page bufsize fixup */
+               cl_object_header(&lov->lo_cl)->coh_page_bufsize -=
+                       lov_page_slice_fixup(lov, NULL);
+
                result = new_ops->llo_init(env,
                                        lu2lov_dev(lov->lo_cl.co_lu.lo_dev),
                                        lov, conf, state);