diff options
author | Andreas Gruenbacher <agruenba@redhat.com> | 2023-06-27 15:34:36 +0200 |
---|---|---|
committer | Andreas Gruenbacher <agruenba@redhat.com> | 2023-07-03 22:30:48 +0200 |
commit | d68d0c6c3fc781c8a130e6a4d0666dbbd69e917b (patch) | |
tree | f284d052d5c95e8dba1399f94db1283fcface860 | |
parent | b0c21c6d527491276b1f7c9580bd2bf08c081add (diff) |
gfs2: Use memcpy_{from,to}_page where appropriate
Replace kmap_local_page() + memcpy() + kunmap_local() sequences with
memcpy_{from,to}_page() where we are not doing anything else with the
mapped page.
Signed-off-by: Andreas Gruenbacher <agruenba@redhat.com>
-rw-r--r-- | fs/gfs2/aops.c | 5 | ||||
-rw-r--r-- | fs/gfs2/lops.c | 12 | ||||
-rw-r--r-- | fs/gfs2/quota.c | 5 |
3 files changed, 7 insertions, 15 deletions
diff --git a/fs/gfs2/aops.c b/fs/gfs2/aops.c index c45bac9b5408..b11ec198183b 100644 --- a/fs/gfs2/aops.c +++ b/fs/gfs2/aops.c @@ -488,7 +488,6 @@ int gfs2_internal_read(struct gfs2_inode *ip, char *buf, loff_t *pos, unsigned copied = 0; unsigned amt; struct page *page; - void *p; do { page = read_cache_page(mapping, index, gfs2_read_folio, NULL); @@ -497,12 +496,10 @@ int gfs2_internal_read(struct gfs2_inode *ip, char *buf, loff_t *pos, continue; return PTR_ERR(page); } - p = kmap_local_page(page); amt = size - copied; if (offset + size > PAGE_SIZE) amt = PAGE_SIZE - offset; - memcpy(buf + copied, p + offset, amt); - kunmap_local(p); + memcpy_from_page(buf + copied, page, offset, amt); put_page(page); copied += amt; index++; diff --git a/fs/gfs2/lops.c b/fs/gfs2/lops.c index 17641d90394b..251322b01631 100644 --- a/fs/gfs2/lops.c +++ b/fs/gfs2/lops.c @@ -697,14 +697,12 @@ static void gfs2_before_commit(struct gfs2_sbd *sdp, unsigned int limit, lock_buffer(bd2->bd_bh); if (buffer_escaped(bd2->bd_bh)) { - void *kaddr; + void *p; + page = mempool_alloc(gfs2_page_pool, GFP_NOIO); - ptr = page_address(page); - kaddr = kmap_local_page(bd2->bd_bh->b_page); - memcpy(ptr, kaddr + bh_offset(bd2->bd_bh), - bd2->bd_bh->b_size); - kunmap_local(kaddr); - *(__be32 *)ptr = 0; + p = page_address(page); + memcpy_from_page(p, page, bh_offset(bd2->bd_bh), bd2->bd_bh->b_size); + *(__be32 *)p = 0; clear_buffer_escaped(bd2->bd_bh); unlock_buffer(bd2->bd_bh); brelse(bd2->bd_bh); diff --git a/fs/gfs2/quota.c b/fs/gfs2/quota.c index 42a3f1e6b553..7765346e3617 100644 --- a/fs/gfs2/quota.c +++ b/fs/gfs2/quota.c @@ -712,7 +712,6 @@ static int gfs2_write_buf_to_page(struct gfs2_inode *ip, unsigned long index, struct address_space *mapping = inode->i_mapping; struct page *page; struct buffer_head *bh; - void *kaddr; u64 blk; unsigned bsize = sdp->sd_sb.sb_bsize, bnum = 0, boff = 0; unsigned to_write = bytes, pg_off = off; @@ -764,9 +763,7 @@ static int gfs2_write_buf_to_page(struct gfs2_inode *ip, unsigned long index, } /* Write to the page, now that we have setup the buffer(s) */ - kaddr = kmap_local_page(page); - memcpy(kaddr + off, buf, bytes); - kunmap_local(kaddr); + memcpy_to_page(page, off, buf, bytes); flush_dcache_page(page); unlock_page(page); put_page(page); |