null_blk: use non-deprecated lib functions
authorChaitanya Kulkarni <kch@nvidia.com>
Thu, 30 Mar 2023 18:49:25 +0000 (11:49 -0700)
committerJens Axboe <axboe@kernel.dk>
Sun, 2 Apr 2023 02:27:05 +0000 (20:27 -0600)
Use library helper memcpy_page() to copy source page into destination
instead of having duplicate code in copy_to_nullb() & copy_from_nullb().
In copy_from_nullb() also replace the memset call with zero_user().

Use library helper memset_page() to set the buffer to 0xFF instead of
having duplicate code.

This also removes deprecated API kmap_atomic() from copy_to_nullb()
copy_from_nullb() and nullb_fill_pattern(),
from :include/linux/highmem.h:
"kmap_atomic - Atomically map a page for temporary usage - Deprecated!"

Signed-off-by: Chaitanya Kulkarni <kch@nvidia.com>
Link: https://lore.kernel.org/r/20230330184926.64209-2-kch@nvidia.com
Signed-off-by: Jens Axboe <axboe@kernel.dk>
drivers/block/null_blk/main.c

index 4c601ca9552a07dd4ae9828c6703d1dc3d694b4c..87edb6d7179829ea4527feab7829ba8393ba1380 100644 (file)
@@ -1112,7 +1112,6 @@ static int copy_to_nullb(struct nullb *nullb, struct page *source,
        size_t temp, count = 0;
        unsigned int offset;
        struct nullb_page *t_page;
-       void *dst, *src;
 
        while (count < n) {
                temp = min_t(size_t, nullb->dev->blocksize, n - count);
@@ -1126,11 +1125,7 @@ static int copy_to_nullb(struct nullb *nullb, struct page *source,
                if (!t_page)
                        return -ENOSPC;
 
-               src = kmap_atomic(source);
-               dst = kmap_atomic(t_page->page);
-               memcpy(dst + offset, src + off + count, temp);
-               kunmap_atomic(dst);
-               kunmap_atomic(src);
+               memcpy_page(t_page->page, offset, source, off + count, temp);
 
                __set_bit(sector & SECTOR_MASK, t_page->bitmap);
 
@@ -1149,7 +1144,6 @@ static int copy_from_nullb(struct nullb *nullb, struct page *dest,
        size_t temp, count = 0;
        unsigned int offset;
        struct nullb_page *t_page;
-       void *dst, *src;
 
        while (count < n) {
                temp = min_t(size_t, nullb->dev->blocksize, n - count);
@@ -1158,16 +1152,11 @@ static int copy_from_nullb(struct nullb *nullb, struct page *dest,
                t_page = null_lookup_page(nullb, sector, false,
                        !null_cache_active(nullb));
 
-               dst = kmap_atomic(dest);
-               if (!t_page) {
-                       memset(dst + off + count, 0, temp);
-                       goto next;
-               }
-               src = kmap_atomic(t_page->page);
-               memcpy(dst + off + count, src + offset, temp);
-               kunmap_atomic(src);
-next:
-               kunmap_atomic(dst);
+               if (t_page)
+                       memcpy_page(dest, off + count, t_page->page, offset,
+                                   temp);
+               else
+                       zero_user(dest, off + count, temp);
 
                count += temp;
                sector += temp >> SECTOR_SHIFT;
@@ -1178,11 +1167,7 @@ next:
 static void nullb_fill_pattern(struct nullb *nullb, struct page *page,
                               unsigned int len, unsigned int off)
 {
-       void *dst;
-
-       dst = kmap_atomic(page);
-       memset(dst + off, 0xFF, len);
-       kunmap_atomic(dst);
+       memset_page(page, off, 0xff, len);
 }
 
 blk_status_t null_handle_discard(struct nullb_device *dev,