folio_batch_remove_exceptionals(&fbatch);
                folio_batch_release(&fbatch);
                cond_resched();
 -              index++;
        }
  
+       /*
+        * When undoing a failed fallocate, we want none of the partial folio
+        * zeroing and splitting below, but shall want to truncate the whole
+        * folio when !uptodate indicates that it was added by this fallocate,
+        * even when [lstart, lend] covers only a part of the folio.
+        */
+       if (unfalloc)
+               goto whole_folios;
+ 
        same_folio = (lstart >> PAGE_SHIFT) == (lend >> PAGE_SHIFT);
        folio = shmem_get_partial_folio(inode, lstart >> PAGE_SHIFT);
        if (folio) {