Whamcloud - gitweb
LU-13799 llite: Remove unnecessary page get/put 93/44293/8
authorPatrick Farrell <pfarrell@whamcloud.com>
Fri, 30 Jul 2021 16:15:20 +0000 (12:15 -0400)
committerOleg Drokin <green@whamcloud.com>
Wed, 26 Jan 2022 05:14:47 +0000 (05:14 +0000)
Part of the aio cleanup code has the slightly strange
behavior of doing get on every page before calling page
cleanup, then doing a put after.

This was required because we call cl_page_list_del before
calling cl_page_delete, and cl_page_list_del was holding
the last reference on the page struct.

If we reverse the order, then we don't need the extra
get/put to keep the pages live.  This should save
significant CPU time in the ptlrpcd threads when finishing
i/o, since this removes a get/put on every page.

Signed-off-by: Patrick Farrell <pfarrell@whamcloud.com>
Change-Id: I3b1639061d775faa43c91e2d0a0f209f2d0df10c
Reviewed-on: https://review.whamcloud.com/44293
Reviewed-by: Andreas Dilger <adilger@whamcloud.com>
Reviewed-by: Yingjin Qian <qian@ddn.com>
Tested-by: jenkins <devops@whamcloud.com>
Tested-by: Maloo <maloo@whamcloud.com>
Reviewed-by: Oleg Drokin <green@whamcloud.com>
lustre/obdclass/cl_io.c

index b208760..00dce0a 100644 (file)
@@ -1225,10 +1225,8 @@ static void cl_aio_end(const struct lu_env *env, struct cl_sync_io *anchor)
        while (aio->cda_pages.pl_nr > 0) {
                struct cl_page *page = cl_page_list_first(&aio->cda_pages);
 
-               cl_page_get(page);
-               cl_page_list_del(env, &aio->cda_pages, page);
                cl_page_delete(env, page);
-               cl_page_put(env, page);
+               cl_page_list_del(env, &aio->cda_pages, page);
        }
 
        if (!aio->cda_no_aio_complete)