btrfs: use offset_in_page instead of open-coding it
authorJohannes Thumshirn <jthumshirn@suse.de>
Wed, 5 Dec 2018 14:23:03 +0000 (15:23 +0100)
committerDavid Sterba <dsterba@suse.com>
Mon, 17 Dec 2018 13:51:45 +0000 (14:51 +0100)
Constructs like 'var & (PAGE_SIZE - 1)' or 'var & ~PAGE_MASK' can denote an
offset into a page.

So replace them by the offset_in_page() macro instead of open-coding it if
they're not used as an alignment check.

Reviewed-by: Nikolay Borisov <nborisov@suse.com>
Signed-off-by: Johannes Thumshirn <jthumshirn@suse.de>
Reviewed-by: David Sterba <dsterba@suse.com>
Signed-off-by: David Sterba <dsterba@suse.com>
fs/btrfs/check-integrity.c
fs/btrfs/compression.c
fs/btrfs/extent_io.c
fs/btrfs/file.c
fs/btrfs/inode.c
fs/btrfs/send.c
fs/btrfs/volumes.c

index 781cae168d2a0e8306ac36024c15e28685eca349..d319c3020c09fdfffca1ff598e0a129fc46631bb 100644 (file)
@@ -1202,24 +1202,24 @@ static void btrfsic_read_from_block_data(
        void *dstv, u32 offset, size_t len)
 {
        size_t cur;
-       size_t offset_in_page;
+       size_t pgoff;
        char *kaddr;
        char *dst = (char *)dstv;
-       size_t start_offset = block_ctx->start & ((u64)PAGE_SIZE - 1);
+       size_t start_offset = offset_in_page(block_ctx->start);
        unsigned long i = (start_offset + offset) >> PAGE_SHIFT;
 
        WARN_ON(offset + len > block_ctx->len);
-       offset_in_page = (start_offset + offset) & (PAGE_SIZE - 1);
+       pgoff = offset_in_page(start_offset + offset);
 
        while (len > 0) {
-               cur = min(len, ((size_t)PAGE_SIZE - offset_in_page));
+               cur = min(len, ((size_t)PAGE_SIZE - pgoff));
                BUG_ON(i >= DIV_ROUND_UP(block_ctx->len, PAGE_SIZE));
                kaddr = block_ctx->datav[i];
-               memcpy(dst, kaddr + offset_in_page, cur);
+               memcpy(dst, kaddr + pgoff, cur);
 
                dst += cur;
                len -= cur;
-               offset_in_page = 0;
+               pgoff = 0;
                i++;
        }
 }
index dba59ae914b8f7bedf8d2f09ad23ee32464a87ac..2ab5591449f295e1393062b8a85c1089dbe41a5d 100644 (file)
@@ -477,7 +477,7 @@ static noinline int add_ra_bio_pages(struct inode *inode,
 
                if (page->index == end_index) {
                        char *userpage;
-                       size_t zero_offset = isize & (PAGE_SIZE - 1);
+                       size_t zero_offset = offset_in_page(isize);
 
                        if (zero_offset) {
                                int zeros;
index eb820154521f7aae881d891d3ea29bd8fa808c26..60526332b877b813b54df84e6dd414fed336a78b 100644 (file)
@@ -2585,7 +2585,7 @@ readpage_ok:
                        unsigned off;
 
                        /* Zero out the end if this page straddles i_size */
-                       off = i_size & (PAGE_SIZE-1);
+                       off = offset_in_page(i_size);
                        if (page->index == end_index && off)
                                zero_user_segment(page, off, PAGE_SIZE);
                        SetPageUptodate(page);
@@ -2888,7 +2888,7 @@ static int __do_readpage(struct extent_io_tree *tree,
 
        if (page->index == last_byte >> PAGE_SHIFT) {
                char *userpage;
-               size_t zero_offset = last_byte & (PAGE_SIZE - 1);
+               size_t zero_offset = offset_in_page(last_byte);
 
                if (zero_offset) {
                        iosize = PAGE_SIZE - zero_offset;
@@ -3432,7 +3432,7 @@ static int __extent_writepage(struct page *page, struct writeback_control *wbc,
 
        ClearPageError(page);
 
-       pg_offset = i_size & (PAGE_SIZE - 1);
+       pg_offset = offset_in_page(i_size);
        if (page->index > end_index ||
           (page->index == end_index && !pg_offset)) {
                page->mapping->a_ops->invalidatepage(page, 0, PAGE_SIZE);
@@ -5307,7 +5307,7 @@ void read_extent_buffer(const struct extent_buffer *eb, void *dstv,
        struct page *page;
        char *kaddr;
        char *dst = (char *)dstv;
-       size_t start_offset = eb->start & ((u64)PAGE_SIZE - 1);
+       size_t start_offset = offset_in_page(eb->start);
        unsigned long i = (start_offset + start) >> PAGE_SHIFT;
 
        if (start + len > eb->len) {
@@ -5317,7 +5317,7 @@ void read_extent_buffer(const struct extent_buffer *eb, void *dstv,
                return;
        }
 
-       offset = (start_offset + start) & (PAGE_SIZE - 1);
+       offset = offset_in_page(start_offset + start);
 
        while (len > 0) {
                page = eb->pages[i];
@@ -5342,14 +5342,14 @@ int read_extent_buffer_to_user(const struct extent_buffer *eb,
        struct page *page;
        char *kaddr;
        char __user *dst = (char __user *)dstv;
-       size_t start_offset = eb->start & ((u64)PAGE_SIZE - 1);
+       size_t start_offset = offset_in_page(eb->start);
        unsigned long i = (start_offset + start) >> PAGE_SHIFT;
        int ret = 0;
 
        WARN_ON(start > eb->len);
        WARN_ON(start + len > eb->start + eb->len);
 
-       offset = (start_offset + start) & (PAGE_SIZE - 1);
+       offset = offset_in_page(start_offset + start);
 
        while (len > 0) {
                page = eb->pages[i];
@@ -5383,7 +5383,7 @@ int map_private_extent_buffer(const struct extent_buffer *eb,
        size_t offset;
        char *kaddr;
        struct page *p;
-       size_t start_offset = eb->start & ((u64)PAGE_SIZE - 1);
+       size_t start_offset = offset_in_page(eb->start);
        unsigned long i = (start_offset + start) >> PAGE_SHIFT;
        unsigned long end_i = (start_offset + start + min_len - 1) >>
                PAGE_SHIFT;
@@ -5420,14 +5420,14 @@ int memcmp_extent_buffer(const struct extent_buffer *eb, const void *ptrv,
        struct page *page;
        char *kaddr;
        char *ptr = (char *)ptrv;
-       size_t start_offset = eb->start & ((u64)PAGE_SIZE - 1);
+       size_t start_offset = offset_in_page(eb->start);
        unsigned long i = (start_offset + start) >> PAGE_SHIFT;
        int ret = 0;
 
        WARN_ON(start > eb->len);
        WARN_ON(start + len > eb->start + eb->len);
 
-       offset = (start_offset + start) & (PAGE_SIZE - 1);
+       offset = offset_in_page(start_offset + start);
 
        while (len > 0) {
                page = eb->pages[i];
@@ -5476,13 +5476,13 @@ void write_extent_buffer(struct extent_buffer *eb, const void *srcv,
        struct page *page;
        char *kaddr;
        char *src = (char *)srcv;
-       size_t start_offset = eb->start & ((u64)PAGE_SIZE - 1);
+       size_t start_offset = offset_in_page(eb->start);
        unsigned long i = (start_offset + start) >> PAGE_SHIFT;
 
        WARN_ON(start > eb->len);
        WARN_ON(start + len > eb->start + eb->len);
 
-       offset = (start_offset + start) & (PAGE_SIZE - 1);
+       offset = offset_in_page(start_offset + start);
 
        while (len > 0) {
                page = eb->pages[i];
@@ -5506,13 +5506,13 @@ void memzero_extent_buffer(struct extent_buffer *eb, unsigned long start,
        size_t offset;
        struct page *page;
        char *kaddr;
-       size_t start_offset = eb->start & ((u64)PAGE_SIZE - 1);
+       size_t start_offset = offset_in_page(eb->start);
        unsigned long i = (start_offset + start) >> PAGE_SHIFT;
 
        WARN_ON(start > eb->len);
        WARN_ON(start + len > eb->start + eb->len);
 
-       offset = (start_offset + start) & (PAGE_SIZE - 1);
+       offset = offset_in_page(start_offset + start);
 
        while (len > 0) {
                page = eb->pages[i];
@@ -5551,13 +5551,12 @@ void copy_extent_buffer(struct extent_buffer *dst, struct extent_buffer *src,
        size_t offset;
        struct page *page;
        char *kaddr;
-       size_t start_offset = dst->start & ((u64)PAGE_SIZE - 1);
+       size_t start_offset = offset_in_page(dst->start);
        unsigned long i = (start_offset + dst_offset) >> PAGE_SHIFT;
 
        WARN_ON(src->len != dst_len);
 
-       offset = (start_offset + dst_offset) &
-               (PAGE_SIZE - 1);
+       offset = offset_in_page(start_offset + dst_offset);
 
        while (len > 0) {
                page = dst->pages[i];
@@ -5593,7 +5592,7 @@ static inline void eb_bitmap_offset(struct extent_buffer *eb,
                                    unsigned long *page_index,
                                    size_t *page_offset)
 {
-       size_t start_offset = eb->start & ((u64)PAGE_SIZE - 1);
+       size_t start_offset = offset_in_page(eb->start);
        size_t byte_offset = BIT_BYTE(nr);
        size_t offset;
 
@@ -5605,7 +5604,7 @@ static inline void eb_bitmap_offset(struct extent_buffer *eb,
        offset = start_offset + start + byte_offset;
 
        *page_index = offset >> PAGE_SHIFT;
-       *page_offset = offset & (PAGE_SIZE - 1);
+       *page_offset = offset_in_page(offset);
 }
 
 /**
@@ -5747,7 +5746,7 @@ void memcpy_extent_buffer(struct extent_buffer *dst, unsigned long dst_offset,
        size_t cur;
        size_t dst_off_in_page;
        size_t src_off_in_page;
-       size_t start_offset = dst->start & ((u64)PAGE_SIZE - 1);
+       size_t start_offset = offset_in_page(dst->start);
        unsigned long dst_i;
        unsigned long src_i;
 
@@ -5765,10 +5764,8 @@ void memcpy_extent_buffer(struct extent_buffer *dst, unsigned long dst_offset,
        }
 
        while (len > 0) {
-               dst_off_in_page = (start_offset + dst_offset) &
-                       (PAGE_SIZE - 1);
-               src_off_in_page = (start_offset + src_offset) &
-                       (PAGE_SIZE - 1);
+               dst_off_in_page = offset_in_page(start_offset + dst_offset);
+               src_off_in_page = offset_in_page(start_offset + src_offset);
 
                dst_i = (start_offset + dst_offset) >> PAGE_SHIFT;
                src_i = (start_offset + src_offset) >> PAGE_SHIFT;
@@ -5796,7 +5793,7 @@ void memmove_extent_buffer(struct extent_buffer *dst, unsigned long dst_offset,
        size_t src_off_in_page;
        unsigned long dst_end = dst_offset + len - 1;
        unsigned long src_end = src_offset + len - 1;
-       size_t start_offset = dst->start & ((u64)PAGE_SIZE - 1);
+       size_t start_offset = offset_in_page(dst->start);
        unsigned long dst_i;
        unsigned long src_i;
 
@@ -5820,10 +5817,8 @@ void memmove_extent_buffer(struct extent_buffer *dst, unsigned long dst_offset,
                dst_i = (start_offset + dst_end) >> PAGE_SHIFT;
                src_i = (start_offset + src_end) >> PAGE_SHIFT;
 
-               dst_off_in_page = (start_offset + dst_end) &
-                       (PAGE_SIZE - 1);
-               src_off_in_page = (start_offset + src_end) &
-                       (PAGE_SIZE - 1);
+               dst_off_in_page = offset_in_page(start_offset + dst_end);
+               src_off_in_page = offset_in_page(start_offset + src_end);
 
                cur = min_t(unsigned long, len, src_off_in_page + 1);
                cur = min(cur, dst_off_in_page + 1);
index 3835bb8c146d1b094911d7b32a0db50fb72b37c6..81aae230d1a59fa3e0da3b12745e21209102fc44 100644 (file)
@@ -399,7 +399,7 @@ static noinline int btrfs_copy_from_user(loff_t pos, size_t write_bytes,
        size_t copied = 0;
        size_t total_copied = 0;
        int pg = 0;
-       int offset = pos & (PAGE_SIZE - 1);
+       int offset = offset_in_page(pos);
 
        while (write_bytes > 0) {
                size_t count = min_t(size_t,
@@ -1611,7 +1611,7 @@ static noinline ssize_t btrfs_buffered_write(struct kiocb *iocb,
                return -ENOMEM;
 
        while (iov_iter_count(i) > 0) {
-               size_t offset = pos & (PAGE_SIZE - 1);
+               size_t offset = offset_in_page(pos);
                size_t sector_offset;
                size_t write_bytes = min(iov_iter_count(i),
                                         nrptrs * (size_t)PAGE_SIZE -
index e1451a69432b3ae1d855d6dd1e42cfadc540ee50..2d8aacf072c00bc6248fe7f3a229d85b3cc028c6 100644 (file)
@@ -240,7 +240,7 @@ static int insert_inline_extent(struct btrfs_trans_handle *trans,
                                     start >> PAGE_SHIFT);
                btrfs_set_file_extent_compression(leaf, ei, 0);
                kaddr = kmap_atomic(page);
-               offset = start & (PAGE_SIZE - 1);
+               offset = offset_in_page(start);
                write_extent_buffer(leaf, kaddr + offset, ptr, size);
                kunmap_atomic(kaddr);
                put_page(page);
@@ -549,8 +549,7 @@ again:
                                           &total_compressed);
 
                if (!ret) {
-                       unsigned long offset = total_compressed &
-                               (PAGE_SIZE - 1);
+                       unsigned long offset = offset_in_page(total_compressed);
                        struct page *page = pages[nr_pages - 1];
                        char *kaddr;
 
@@ -8906,7 +8905,7 @@ again:
 
        /* page is wholly or partially inside EOF */
        if (page_start + PAGE_SIZE > size)
-               zero_start = size & ~PAGE_MASK;
+               zero_start = offset_in_page(size);
        else
                zero_start = PAGE_SIZE;
 
index 5be83b5a1b43121234c6d0edda9e1c0566f30132..9df4c0b0e78941cf6e02cc19c7b770c0654f3c5c 100644 (file)
@@ -4775,7 +4775,7 @@ static ssize_t fill_read_buf(struct send_ctx *sctx, u64 offset, u32 len)
        struct btrfs_key key;
        pgoff_t index = offset >> PAGE_SHIFT;
        pgoff_t last_index;
-       unsigned pg_offset = offset & ~PAGE_MASK;
+       unsigned pg_offset = offset_in_page(offset);
        ssize_t ret = 0;
 
        key.objectid = sctx->cur_ino;
index 367787670c9b2251203bbb8a7eac3cb0bdc499e5..9956c53f18f6f03e6a4ded91c25d90c5521a6f8d 100644 (file)
@@ -1436,7 +1436,7 @@ static int btrfs_read_disk_super(struct block_device *bdev, u64 bytenr,
        p = kmap(*page);
 
        /* align our pointer to the offset of the super block */
-       *disk_super = p + (bytenr & ~PAGE_MASK);
+       *disk_super = p + offset_in_page(bytenr);
 
        if (btrfs_super_bytenr(*disk_super) != bytenr ||
            btrfs_super_magic(*disk_super) != BTRFS_MAGIC) {