Whamcloud - gitweb
LU-13814 clio: add cp_inode to page allocation 08/52208/19
authorPatrick Farrell <pfarrell@whamcloud.com>
Sun, 24 Sep 2023 21:19:34 +0000 (17:19 -0400)
committerPatrick Farrell <pfarrell@whamcloud.com>
Tue, 26 Sep 2023 18:58:30 +0000 (14:58 -0400)
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.

Test-Parameters: fortestonly
Test-Parameters: forjanitoronly
Signed-off-by: Patrick Farrell <pfarrell@whamcloud.com>
Change-Id: I509f6cfbae8e5a6ec6b07c8253d68f6dd2794e59

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

index d613b5a..cd33305 100644 (file)
@@ -2236,12 +2236,8 @@ struct cl_page *cl_page_find        (const struct lu_env *env,
                                     struct cl_io *io,
                                      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_io *io,
-                                    struct cl_object *o, pgoff_t ind,
-                                    struct page *vmpage,
-                                    enum cl_page_type type);
 void            cl_page_get         (struct cl_page *page);
 void            cl_page_put         (const struct lu_env *env,
                                      struct cl_page *page);
index 2abc902..39335da 100644 (file)
@@ -603,7 +603,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, io, obj, vmpage->index, vmpage,
+               page = cl_page_find(env, io, obj, vmpage->index, vmpage, inode,
                                    CPT_CACHEABLE);
                if (IS_ERR(page)) {
                        ClearPageUptodate(vmpage);
index 0079307..5344d9e 100644 (file)
@@ -2079,8 +2079,8 @@ static 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, io, clob, vmpage->index,
-                                     vmpage, CPT_CACHEABLE);
+               clpage = cl_page_find(env, io, clob, vmpage->index, vmpage,
+                                     inode, CPT_CACHEABLE);
                if (IS_ERR(clpage))
                        GOTO(pagefini, rc = PTR_ERR(clpage));
 
index 163c232..17d4576 100644 (file)
@@ -249,7 +249,8 @@ static int ll_read_ahead_page(const struct lu_env *env, struct cl_io *io,
                GOTO(out, rc = -EBUSY);
        }
 
-       cp = cl_page_find(env, io, clob, vmpage->index, vmpage, CPT_CACHEABLE);
+       cp = cl_page_find(env, io, clob, vmpage->index, vmpage, inode,
+                         CPT_CACHEABLE);
        if (IS_ERR(cp)) {
                which = RA_STAT_FAILED_GRAB_PAGE;
                msg   = "cl_page_find failed";
@@ -1484,8 +1485,8 @@ int ll_writepage(struct page *vmpage, struct writeback_control *wbc)
        io->ci_ignore_layout = 1;
         result = cl_io_init(env, io, CIT_MISC, clob);
         if (result == 0) {
-                page = cl_page_find(env, io, clob, vmpage->index,
-                                    vmpage, CPT_CACHEABLE);
+               page = cl_page_find(env, io, clob, vmpage->index, vmpage, inode,
+                                   CPT_CACHEABLE);
                if (!IS_ERR(page)) {
                        lu_ref_add(&page->cp_reference, "writepage",
                                   current);
@@ -1921,7 +1922,6 @@ int ll_readpage(struct file *file, struct page *vmpage)
        }
 
        if (io == NULL) { /* fast read */
-               struct inode *inode = file_inode(file);
                struct ll_file_data *fd = file->private_data;
                struct ll_readahead_state *ras = &fd->fd_ras;
                struct lu_env  *local_env = NULL;
@@ -2034,7 +2034,7 @@ int ll_readpage(struct file *file, struct page *vmpage)
        }
 
        LASSERT(io->ci_state == CIS_IO_GOING);
-       page = cl_page_find(env, io, clob, vmpage->index, vmpage,
+       page = cl_page_find(env, io, clob, vmpage->index, vmpage, inode,
                            CPT_CACHEABLE);
        if (!IS_ERR(page)) {
                LASSERT(page->cp_type == CPT_CACHEABLE);
index c1a538c..ff4b1e0 100644 (file)
@@ -328,7 +328,7 @@ ll_direct_rw_pages(const struct lu_env *env, struct cl_io *io, size_t size,
                size_t to = min(from + size, PAGE_SIZE);
 
                page = cl_page_find(env, io, obj, offset >> PAGE_SHIFT,
-                                   cdp->cdp_pages[i], CPT_TRANSIENT);
+                                   cdp->cdp_pages[i], inode, CPT_TRANSIENT);
                if (IS_ERR(page))
                        GOTO(out, rc = PTR_ERR(page));
 
@@ -805,7 +805,7 @@ again:
                goto again;
        }
 
-       page = cl_page_find(env, io, clob, vmpage->index, vmpage,
+       page = cl_page_find(env, io, clob, vmpage->index, vmpage, inode,
                            CPT_CACHEABLE);
        if (IS_ERR(page))
                GOTO(out, result = PTR_ERR(page));
index 6f69f23..b30bc71 100644 (file)
@@ -1566,7 +1566,7 @@ static int vvp_io_fault_start(const struct lu_env *env,
                }
        }
 
-       page = cl_page_find(env, io, obj, fio->ft_index, vmpage,
+       page = cl_page_find(env, io, obj, fio->ft_index, vmpage, inode,
                            CPT_CACHEABLE);
        if (IS_ERR(page))
                GOTO(out, result = PTR_ERR(page));
index 2bc2909..5291398 100644 (file)
@@ -371,9 +371,11 @@ check:
        return cl_page;
 }
 
-struct cl_page *cl_page_alloc(const struct lu_env *env, struct cl_io *io,
-                             struct cl_object *o, pgoff_t ind,
-                             struct page *vmpage, enum cl_page_type type)
+static struct cl_page *cl_page_alloc(const struct lu_env *env, struct cl_io *io,
+                                    struct cl_object *o,
+                                    pgoff_t ind, struct page *vmpage,
+                                    struct inode *inode,
+                                    enum cl_page_type type)
 {
        struct cl_page *cl_page;
        struct cl_object *head;
@@ -400,13 +402,7 @@ struct cl_page *cl_page_alloc(const struct lu_env *env, struct cl_io *io,
                if (cl_page->cp_type != CPT_TRANSIENT)
                        cl_page->cp_state = CPS_CACHED;
                cl_page->cp_type = type;
-               if (type == CPT_TRANSIENT)
-                       /* ref to correct inode will be added
-                        * in ll_direct_rw_pages
-                        */
-                       cl_page->cp_inode = NULL;
-               else
-                       cl_page->cp_inode = page2inode(vmpage);
+               cl_page->cp_inode = inode;
                INIT_LIST_HEAD(&cl_page->cp_batch);
                lu_ref_init(&cl_page->cp_reference);
                head = o;
@@ -448,6 +444,7 @@ struct cl_page *cl_page_alloc(const struct lu_env *env, struct cl_io *io,
 struct cl_page *cl_page_find(const struct lu_env *env, struct cl_io *io,
                             struct cl_object *o,
                             pgoff_t idx, struct page *vmpage,
+                            struct inode *inode,
                             enum cl_page_type type)
 {
        struct cl_page          *page = NULL;
@@ -484,8 +481,8 @@ struct cl_page *cl_page_find(const struct lu_env *env, struct cl_io *io,
                }
         }
 
-        /* allocate and initialize cl_page */
-        page = cl_page_alloc(env, io, o, idx, vmpage, type);
+       /* allocate and initialize cl_page */
+       page = cl_page_alloc(env, io, o, idx, vmpage, inode, type);
        RETURN(page);
 }
 EXPORT_SYMBOL(cl_page_find);