Whamcloud - gitweb
LU-13814 clio: add cp_inode to page allocation
authorPatrick Farrell <pfarrell@whamcloud.com>
Fri, 29 Sep 2023 20:19:06 +0000 (21:19 +0100)
committerAndreas Dilger <adilger@whamcloud.com>
Fri, 6 Oct 2023 23:20:06 +0000 (23:20 +0000)
cp_inode can be set correctly during page allocation,
rather than after.  This is a prelude to moving cp_inode to
the osc_transfer_page, but that's better done in a separate
patch.

Lustre-change: https://review.whamcloud.com/52208
Lustre-commit: TBD (from f2afaf4eb10d70c36ad6bdbc2def66bee4fcdc23)
Signed-off-by: Patrick Farrell <pfarrell@whamcloud.com>
Signed-off-by: Artem Blagodarenko <ablagodarenko@ddn.com>
Change-Id: I509f6cfbae8e5a6ec6b07c8253d68f6dd2794e59
Reviewed-on: https://review.whamcloud.com/c/ex/lustre-release/+/52557
Tested-by: jenkins <devops@whamcloud.com>
Tested-by: Maloo <maloo@whamcloud.com>
Reviewed-by: Andreas Dilger <adilger@whamcloud.com>
lustre/include/cl_object.h
lustre/llite/file.c
lustre/llite/llite_lib.c
lustre/llite/rw.c
lustre/llite/rw26.c
lustre/llite/vvp_io.c
lustre/obdclass/cl_page.c
lustre/obdecho/echo_client.c

index 1475adf..47f2288 100644 (file)
@@ -2297,10 +2297,12 @@ static inline int cl_object_refc(struct cl_object *clob)
 struct cl_page *cl_page_find        (const struct lu_env *env,
                                      struct cl_object *obj,
                                      pgoff_t idx, struct page *vmpage,
+                                    struct inode *inode,
                                      enum cl_page_type type);
 struct cl_page *cl_page_alloc       (const struct lu_env *env,
                                     struct cl_object *o, pgoff_t ind,
                                     struct page *vmpage,
+                                    struct inode *inode,
                                     enum cl_page_type type);
 void            cl_page_get         (struct cl_page *page);
 void            cl_page_put         (const struct lu_env *env,
index f276f1b..6427128 100644 (file)
@@ -609,7 +609,7 @@ void ll_dom_finish_open(struct inode *inode, struct ptlrpc_request *req)
                        break;
                }
                /* attach VM page to CL page cache */
-               page = cl_page_find(env, obj, vmpage->index, vmpage,
+               page = cl_page_find(env, obj, vmpage->index, vmpage, inode,
                                    CPT_CACHEABLE);
                if (IS_ERR(page)) {
                        ClearPageUptodate(vmpage);
index ef668ec..22127bc 100644 (file)
@@ -1962,7 +1962,7 @@ int ll_io_zero_page(struct inode *inode, pgoff_t index, pgoff_t offset,
        if (!PageDirty(vmpage)) {
                /* associate cl_page */
                clpage = cl_page_find(env, clob, vmpage->index,
-                                     vmpage, CPT_CACHEABLE);
+                                     vmpage, inode, CPT_CACHEABLE);
                if (IS_ERR(clpage))
                        GOTO(pagefini, rc = PTR_ERR(clpage));
 
index 7e37afa..44d2ef6 100644 (file)
@@ -242,7 +242,8 @@ static int ll_read_ahead_page(const struct lu_env *env, struct cl_io *io,
                GOTO(out, rc = -EBUSY);
        }
 
-       page = cl_page_find(env, clob, vmpage->index, vmpage, CPT_CACHEABLE);
+       page = cl_page_find(env, clob, vmpage->index, vmpage, inode,
+                           CPT_CACHEABLE);
        if (IS_ERR(page)) {
                which = RA_STAT_FAILED_GRAB_PAGE;
                msg   = "cl_page_find failed";
@@ -1498,7 +1499,7 @@ int ll_writepage(struct page *vmpage, struct writeback_control *wbc)
         result = cl_io_init(env, io, CIT_MISC, clob);
         if (result == 0) {
                 page = cl_page_find(env, clob, vmpage->index,
-                                    vmpage, CPT_CACHEABLE);
+                                    vmpage, inode, CPT_CACHEABLE);
                if (!IS_ERR(page)) {
                        lu_ref_add(&page->cp_reference, "writepage",
                                   current);
@@ -2047,7 +2048,8 @@ int ll_readpage(struct file *file, struct page *vmpage)
        }
 
        LASSERT(io->ci_state == CIS_IO_GOING);
-       page = cl_page_find(env, clob, vmpage->index, vmpage, CPT_CACHEABLE);
+       page = cl_page_find(env, clob, vmpage->index, vmpage, inode,
+                           CPT_CACHEABLE);
        if (!IS_ERR(page)) {
                LASSERT(page->cp_type == CPT_CACHEABLE);
                if (likely(!PageUptodate(vmpage))) {
index cd2d9b5..3230592 100644 (file)
@@ -382,7 +382,7 @@ ll_direct_rw_pages(const struct lu_env *env, struct cl_io *io, size_t size,
        for (i = 0; i < pv->ldp_count; i++) {
                LASSERT(!(offset & (PAGE_SIZE - 1)));
                page = cl_page_find(env, obj, cl_index(obj, offset),
-                                   pv->ldp_pages[i], CPT_TRANSIENT);
+                                   pv->ldp_pages[i], inode, CPT_TRANSIENT);
                if (IS_ERR(page)) {
                        rc = PTR_ERR(page);
                        break;
@@ -821,7 +821,8 @@ again:
                goto again;
        }
 
-       page = cl_page_find(env, clob, vmpage->index, vmpage, CPT_CACHEABLE);
+       page = cl_page_find(env, clob, vmpage->index, vmpage, inode,
+                           CPT_CACHEABLE);
        if (IS_ERR(page))
                GOTO(out, result = PTR_ERR(page));
 
index 0f88a40..2abddac 100644 (file)
@@ -1631,7 +1631,8 @@ static int vvp_io_fault_start(const struct lu_env *env,
                }
        }
 
-       page = cl_page_find(env, obj, fio->ft_index, vmpage, CPT_CACHEABLE);
+       page = cl_page_find(env, obj, fio->ft_index, vmpage, inode,
+                           CPT_CACHEABLE);
        if (IS_ERR(page))
                GOTO(out, result = PTR_ERR(page));
 
index af52311..b179fc4 100644 (file)
@@ -269,6 +269,7 @@ check:
 
 struct cl_page *cl_page_alloc(const struct lu_env *env, struct cl_object *o,
                              pgoff_t ind, struct page *vmpage,
+                             struct inode *inode,
                              enum cl_page_type type)
 {
        struct cl_page *cl_page;
@@ -295,6 +296,7 @@ struct cl_page *cl_page_alloc(const struct lu_env *env, struct cl_object *o,
                cl_page->cp_vmpage = vmpage;
                cl_page->cp_state = CPS_CACHED;
                cl_page->cp_type = type;
+               cl_page->cp_inode = inode;
                if (type == CPT_TRANSIENT)
                        /* ref to correct inode will be added
                         * in ll_direct_rw_pages
@@ -344,6 +346,7 @@ struct cl_page *cl_page_alloc(const struct lu_env *env, struct cl_object *o,
 struct cl_page *cl_page_find(const struct lu_env *env,
                             struct cl_object *o,
                             pgoff_t idx, struct page *vmpage,
+                            struct inode *inode,
                             enum cl_page_type type)
 {
        struct cl_page          *page = NULL;
@@ -381,7 +384,7 @@ struct cl_page *cl_page_find(const struct lu_env *env,
         }
 
         /* allocate and initialize cl_page */
-        page = cl_page_alloc(env, o, idx, vmpage, type);
+        page = cl_page_alloc(env, o, idx, vmpage, inode, type);
        RETURN(page);
 }
 EXPORT_SYMBOL(cl_page_find);
index 8c1f824..86beda5 100644 (file)
@@ -1378,8 +1378,9 @@ static int cl_echo_object_brw(struct echo_object *eco, int rw, u64 offset,
 
        for (i = 0; i < npages; i++) {
                LASSERT(pages[i]);
+               /* TDB: need pass inode here */
                clp = cl_page_find(env, obj, cl_index(obj, offset),
-                                  pages[i], CPT_TRANSIENT);
+                                  pages[i], NULL, CPT_TRANSIENT);
                if (IS_ERR(clp)) {
                        rc = PTR_ERR(clp);
                        break;