lkml.org 
[lkml]   [2020]   [May]   [17]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 06/10] iomap: use attach/detach_page_private
    Date
    Since the new pair function is introduced, we can call them to clean the
    code in iomap.

    Cc: Christoph Hellwig <hch@infradead.org>
    Cc: "Darrick J. Wong" <darrick.wong@oracle.com>
    Cc: linux-xfs@vger.kernel.org
    Signed-off-by: Guoqing Jiang <guoqing.jiang@cloud.ionos.com>
    ---
    No change since RFC V3.

    RFC V2 -> RFC V3
    1. rename clear_page_private to detach_page_private.

    RFC -> RFC V2
    1. change the name of new functions to attach/clear_page_private.
    2. call attach_page_private(newpage, clear_page_private(page)) to
    cleanup code further as suggested by Matthew Wilcox.
    3. don't return attach_page_private in iomap_page_create per the
    comment from Christoph Hellwig.

    fs/iomap/buffered-io.c | 19 ++++---------------
    1 file changed, 4 insertions(+), 15 deletions(-)

    diff --git a/fs/iomap/buffered-io.c b/fs/iomap/buffered-io.c
    index 890c8fcda4f3..a1ed7620fbac 100644
    --- a/fs/iomap/buffered-io.c
    +++ b/fs/iomap/buffered-io.c
    @@ -59,24 +59,19 @@ iomap_page_create(struct inode *inode, struct page *page)
    * migrate_page_move_mapping() assumes that pages with private data have
    * their count elevated by 1.
    */
    - get_page(page);
    - set_page_private(page, (unsigned long)iop);
    - SetPagePrivate(page);
    + attach_page_private(page, iop);
    return iop;
    }

    static void
    iomap_page_release(struct page *page)
    {
    - struct iomap_page *iop = to_iomap_page(page);
    + struct iomap_page *iop = detach_page_private(page);

    if (!iop)
    return;
    WARN_ON_ONCE(atomic_read(&iop->read_count));
    WARN_ON_ONCE(atomic_read(&iop->write_count));
    - ClearPagePrivate(page);
    - set_page_private(page, 0);
    - put_page(page);
    kfree(iop);
    }

    @@ -526,14 +521,8 @@ iomap_migrate_page(struct address_space *mapping, struct page *newpage,
    if (ret != MIGRATEPAGE_SUCCESS)
    return ret;

    - if (page_has_private(page)) {
    - ClearPagePrivate(page);
    - get_page(newpage);
    - set_page_private(newpage, page_private(page));
    - set_page_private(page, 0);
    - put_page(page);
    - SetPagePrivate(newpage);
    - }
    + if (page_has_private(page))
    + attach_page_private(newpage, detach_page_private(page));

    if (mode != MIGRATE_SYNC_NO_COPY)
    migrate_page_copy(newpage, page);
    --
    2.17.1
    \
     
     \ /
      Last update: 2020-05-17 23:48    [W:3.149 / U:0.416 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site