si->lowest_bit += nr_entries;
        if (end == si->highest_bit)
                WRITE_ONCE(si->highest_bit, si->highest_bit - nr_entries);
-       si->inuse_pages += nr_entries;
+       WRITE_ONCE(si->inuse_pages, si->inuse_pages + nr_entries);
        if (si->inuse_pages == si->pages) {
                si->lowest_bit = si->max;
                si->highest_bit = 0;
                        add_to_avail_list(si);
        }
        atomic_long_add(nr_entries, &nr_swap_pages);
-       si->inuse_pages -= nr_entries;
+       WRITE_ONCE(si->inuse_pages, si->inuse_pages - nr_entries);
        if (si->flags & SWP_BLKDEV)
                swap_slot_free_notify =
                        si->bdev->bd_disk->fops->swap_slot_free_notify;
        }
 
        bytes = si->pages << (PAGE_SHIFT - 10);
-       inuse = si->inuse_pages << (PAGE_SHIFT - 10);
+       inuse = READ_ONCE(si->inuse_pages) << (PAGE_SHIFT - 10);
 
        file = si->swap_file;
        len = seq_file_path(swap, file, " \t\n\\");
                struct swap_info_struct *si = swap_info[type];
 
                if ((si->flags & SWP_USED) && !(si->flags & SWP_WRITEOK))
-                       nr_to_be_unused += si->inuse_pages;
+                       nr_to_be_unused += READ_ONCE(si->inuse_pages);
        }
        val->freeswap = atomic_long_read(&nr_swap_pages) + nr_to_be_unused;
        val->totalswap = total_swap_pages + nr_to_be_unused;