{
        atomic_t *mapped = &folio->_nr_pages_mapped;
        const int orig_nr_pages = nr_pages;
-       int first, nr = 0;
+       int first = 0, nr = 0;
 
        __folio_rmap_sanity_checks(folio, page, nr_pages, level);
 
                }
 
                do {
-                       first = atomic_inc_and_test(&page->_mapcount);
-                       if (first) {
-                               first = atomic_inc_return_relaxed(mapped);
-                               if (first < ENTIRELY_MAPPED)
-                                       nr++;
-                       }
+                       first += atomic_inc_and_test(&page->_mapcount);
                } while (page++, --nr_pages > 0);
+
+               if (first &&
+                   atomic_add_return_relaxed(first, mapped) < ENTIRELY_MAPPED)
+                       nr = first;
+
                atomic_add(orig_nr_pages, &folio->_large_mapcount);
                break;
        case RMAP_LEVEL_PMD:
                enum rmap_level level)
 {
        atomic_t *mapped = &folio->_nr_pages_mapped;
-       int last, nr = 0, nr_pmdmapped = 0;
+       int last = 0, nr = 0, nr_pmdmapped = 0;
        bool partially_mapped = false;
 
        __folio_rmap_sanity_checks(folio, page, nr_pages, level);
 
                atomic_sub(nr_pages, &folio->_large_mapcount);
                do {
-                       last = atomic_add_negative(-1, &page->_mapcount);
-                       if (last) {
-                               last = atomic_dec_return_relaxed(mapped);
-                               if (last < ENTIRELY_MAPPED)
-                                       nr++;
-                       }
+                       last += atomic_add_negative(-1, &page->_mapcount);
                } while (page++, --nr_pages > 0);
 
+               if (last &&
+                   atomic_sub_return_relaxed(last, mapped) < ENTIRELY_MAPPED)
+                       nr = last;
+
                partially_mapped = nr && atomic_read(mapped);
                break;
        case RMAP_LEVEL_PMD: