0001
0002
0003
0004
0005
0006
0007
0008
0009
0010
0011 #include <linux/kernel.h>
0012 #include <linux/backing-dev.h>
0013 #include <linux/dax.h>
0014 #include <linux/gfp.h>
0015 #include <linux/mm.h>
0016 #include <linux/swap.h>
0017 #include <linux/export.h>
0018 #include <linux/pagemap.h>
0019 #include <linux/highmem.h>
0020 #include <linux/pagevec.h>
0021 #include <linux/task_io_accounting_ops.h>
0022 #include <linux/buffer_head.h> /* grr. try_to_release_page */
0023 #include <linux/shmem_fs.h>
0024 #include <linux/rmap.h>
0025 #include "internal.h"
0026
0027
0028
0029
0030
0031
0032 static inline void __clear_shadow_entry(struct address_space *mapping,
0033 pgoff_t index, void *entry)
0034 {
0035 XA_STATE(xas, &mapping->i_pages, index);
0036
0037 xas_set_update(&xas, workingset_update_node);
0038 if (xas_load(&xas) != entry)
0039 return;
0040 xas_store(&xas, NULL);
0041 }
0042
0043 static void clear_shadow_entry(struct address_space *mapping, pgoff_t index,
0044 void *entry)
0045 {
0046 spin_lock(&mapping->host->i_lock);
0047 xa_lock_irq(&mapping->i_pages);
0048 __clear_shadow_entry(mapping, index, entry);
0049 xa_unlock_irq(&mapping->i_pages);
0050 if (mapping_shrinkable(mapping))
0051 inode_add_lru(mapping->host);
0052 spin_unlock(&mapping->host->i_lock);
0053 }
0054
0055
0056
0057
0058
0059
0060 static void truncate_folio_batch_exceptionals(struct address_space *mapping,
0061 struct folio_batch *fbatch, pgoff_t *indices)
0062 {
0063 int i, j;
0064 bool dax;
0065
0066
0067 if (shmem_mapping(mapping))
0068 return;
0069
0070 for (j = 0; j < folio_batch_count(fbatch); j++)
0071 if (xa_is_value(fbatch->folios[j]))
0072 break;
0073
0074 if (j == folio_batch_count(fbatch))
0075 return;
0076
0077 dax = dax_mapping(mapping);
0078 if (!dax) {
0079 spin_lock(&mapping->host->i_lock);
0080 xa_lock_irq(&mapping->i_pages);
0081 }
0082
0083 for (i = j; i < folio_batch_count(fbatch); i++) {
0084 struct folio *folio = fbatch->folios[i];
0085 pgoff_t index = indices[i];
0086
0087 if (!xa_is_value(folio)) {
0088 fbatch->folios[j++] = folio;
0089 continue;
0090 }
0091
0092 if (unlikely(dax)) {
0093 dax_delete_mapping_entry(mapping, index);
0094 continue;
0095 }
0096
0097 __clear_shadow_entry(mapping, index, folio);
0098 }
0099
0100 if (!dax) {
0101 xa_unlock_irq(&mapping->i_pages);
0102 if (mapping_shrinkable(mapping))
0103 inode_add_lru(mapping->host);
0104 spin_unlock(&mapping->host->i_lock);
0105 }
0106 fbatch->nr = j;
0107 }
0108
0109
0110
0111
0112
0113 static int invalidate_exceptional_entry(struct address_space *mapping,
0114 pgoff_t index, void *entry)
0115 {
0116
0117 if (shmem_mapping(mapping) || dax_mapping(mapping))
0118 return 1;
0119 clear_shadow_entry(mapping, index, entry);
0120 return 1;
0121 }
0122
0123
0124
0125
0126
0127 static int invalidate_exceptional_entry2(struct address_space *mapping,
0128 pgoff_t index, void *entry)
0129 {
0130
0131 if (shmem_mapping(mapping))
0132 return 1;
0133 if (dax_mapping(mapping))
0134 return dax_invalidate_mapping_entry_sync(mapping, index);
0135 clear_shadow_entry(mapping, index, entry);
0136 return 1;
0137 }
0138
0139
0140
0141
0142
0143
0144
0145
0146
0147
0148
0149
0150
0151
0152
0153
0154 void folio_invalidate(struct folio *folio, size_t offset, size_t length)
0155 {
0156 const struct address_space_operations *aops = folio->mapping->a_ops;
0157
0158 if (aops->invalidate_folio)
0159 aops->invalidate_folio(folio, offset, length);
0160 }
0161 EXPORT_SYMBOL_GPL(folio_invalidate);
0162
0163
0164
0165
0166
0167
0168
0169
0170
0171
0172
0173 static void truncate_cleanup_folio(struct folio *folio)
0174 {
0175 if (folio_mapped(folio))
0176 unmap_mapping_folio(folio);
0177
0178 if (folio_has_private(folio))
0179 folio_invalidate(folio, 0, folio_size(folio));
0180
0181
0182
0183
0184
0185
0186 folio_cancel_dirty(folio);
0187 folio_clear_mappedtodisk(folio);
0188 }
0189
0190 int truncate_inode_folio(struct address_space *mapping, struct folio *folio)
0191 {
0192 if (folio->mapping != mapping)
0193 return -EIO;
0194
0195 truncate_cleanup_folio(folio);
0196 filemap_remove_folio(folio);
0197 return 0;
0198 }
0199
0200
0201
0202
0203
0204
0205
0206
0207
0208
0209
0210
0211 bool truncate_inode_partial_folio(struct folio *folio, loff_t start, loff_t end)
0212 {
0213 loff_t pos = folio_pos(folio);
0214 unsigned int offset, length;
0215
0216 if (pos < start)
0217 offset = start - pos;
0218 else
0219 offset = 0;
0220 length = folio_size(folio);
0221 if (pos + length <= (u64)end)
0222 length = length - offset;
0223 else
0224 length = end + 1 - pos - offset;
0225
0226 folio_wait_writeback(folio);
0227 if (length == folio_size(folio)) {
0228 truncate_inode_folio(folio->mapping, folio);
0229 return true;
0230 }
0231
0232
0233
0234
0235
0236
0237 folio_zero_range(folio, offset, length);
0238
0239 if (folio_has_private(folio))
0240 folio_invalidate(folio, offset, length);
0241 if (!folio_test_large(folio))
0242 return true;
0243 if (split_huge_page(&folio->page) == 0)
0244 return true;
0245 if (folio_test_dirty(folio))
0246 return false;
0247 truncate_inode_folio(folio->mapping, folio);
0248 return true;
0249 }
0250
0251
0252
0253
0254 int generic_error_remove_page(struct address_space *mapping, struct page *page)
0255 {
0256 VM_BUG_ON_PAGE(PageTail(page), page);
0257
0258 if (!mapping)
0259 return -EINVAL;
0260
0261
0262
0263
0264 if (!S_ISREG(mapping->host->i_mode))
0265 return -EIO;
0266 return truncate_inode_folio(mapping, page_folio(page));
0267 }
0268 EXPORT_SYMBOL(generic_error_remove_page);
0269
0270 static long mapping_evict_folio(struct address_space *mapping,
0271 struct folio *folio)
0272 {
0273 if (folio_test_dirty(folio) || folio_test_writeback(folio))
0274 return 0;
0275
0276 if (folio_ref_count(folio) >
0277 folio_nr_pages(folio) + folio_has_private(folio) + 1)
0278 return 0;
0279 if (folio_has_private(folio) && !filemap_release_folio(folio, 0))
0280 return 0;
0281
0282 return remove_mapping(mapping, folio);
0283 }
0284
0285
0286
0287
0288
0289
0290
0291
0292
0293
0294
0295 long invalidate_inode_page(struct page *page)
0296 {
0297 struct folio *folio = page_folio(page);
0298 struct address_space *mapping = folio_mapping(folio);
0299
0300
0301 if (!mapping)
0302 return 0;
0303 return mapping_evict_folio(mapping, folio);
0304 }
0305
0306
0307
0308
0309
0310
0311
0312
0313
0314
0315
0316
0317
0318
0319
0320
0321
0322
0323
0324
0325
0326
0327
0328
0329
0330 void truncate_inode_pages_range(struct address_space *mapping,
0331 loff_t lstart, loff_t lend)
0332 {
0333 pgoff_t start;
0334 pgoff_t end;
0335 struct folio_batch fbatch;
0336 pgoff_t indices[PAGEVEC_SIZE];
0337 pgoff_t index;
0338 int i;
0339 struct folio *folio;
0340 bool same_folio;
0341
0342 if (mapping_empty(mapping))
0343 return;
0344
0345
0346
0347
0348
0349
0350
0351 start = (lstart + PAGE_SIZE - 1) >> PAGE_SHIFT;
0352 if (lend == -1)
0353
0354
0355
0356
0357
0358 end = -1;
0359 else
0360 end = (lend + 1) >> PAGE_SHIFT;
0361
0362 folio_batch_init(&fbatch);
0363 index = start;
0364 while (index < end && find_lock_entries(mapping, index, end - 1,
0365 &fbatch, indices)) {
0366 index = indices[folio_batch_count(&fbatch) - 1] + 1;
0367 truncate_folio_batch_exceptionals(mapping, &fbatch, indices);
0368 for (i = 0; i < folio_batch_count(&fbatch); i++)
0369 truncate_cleanup_folio(fbatch.folios[i]);
0370 delete_from_page_cache_batch(mapping, &fbatch);
0371 for (i = 0; i < folio_batch_count(&fbatch); i++)
0372 folio_unlock(fbatch.folios[i]);
0373 folio_batch_release(&fbatch);
0374 cond_resched();
0375 }
0376
0377 same_folio = (lstart >> PAGE_SHIFT) == (lend >> PAGE_SHIFT);
0378 folio = __filemap_get_folio(mapping, lstart >> PAGE_SHIFT, FGP_LOCK, 0);
0379 if (folio) {
0380 same_folio = lend < folio_pos(folio) + folio_size(folio);
0381 if (!truncate_inode_partial_folio(folio, lstart, lend)) {
0382 start = folio->index + folio_nr_pages(folio);
0383 if (same_folio)
0384 end = folio->index;
0385 }
0386 folio_unlock(folio);
0387 folio_put(folio);
0388 folio = NULL;
0389 }
0390
0391 if (!same_folio)
0392 folio = __filemap_get_folio(mapping, lend >> PAGE_SHIFT,
0393 FGP_LOCK, 0);
0394 if (folio) {
0395 if (!truncate_inode_partial_folio(folio, lstart, lend))
0396 end = folio->index;
0397 folio_unlock(folio);
0398 folio_put(folio);
0399 }
0400
0401 index = start;
0402 while (index < end) {
0403 cond_resched();
0404 if (!find_get_entries(mapping, index, end - 1, &fbatch,
0405 indices)) {
0406
0407 if (index == start)
0408 break;
0409
0410 index = start;
0411 continue;
0412 }
0413
0414 for (i = 0; i < folio_batch_count(&fbatch); i++) {
0415 struct folio *folio = fbatch.folios[i];
0416
0417
0418 index = indices[i];
0419
0420 if (xa_is_value(folio))
0421 continue;
0422
0423 folio_lock(folio);
0424 VM_BUG_ON_FOLIO(!folio_contains(folio, index), folio);
0425 folio_wait_writeback(folio);
0426 truncate_inode_folio(mapping, folio);
0427 folio_unlock(folio);
0428 index = folio_index(folio) + folio_nr_pages(folio) - 1;
0429 }
0430 truncate_folio_batch_exceptionals(mapping, &fbatch, indices);
0431 folio_batch_release(&fbatch);
0432 index++;
0433 }
0434 }
0435 EXPORT_SYMBOL(truncate_inode_pages_range);
0436
0437
0438
0439
0440
0441
0442
0443
0444
0445
0446
0447
0448
0449
0450 void truncate_inode_pages(struct address_space *mapping, loff_t lstart)
0451 {
0452 truncate_inode_pages_range(mapping, lstart, (loff_t)-1);
0453 }
0454 EXPORT_SYMBOL(truncate_inode_pages);
0455
0456
0457
0458
0459
0460
0461
0462
0463
0464
0465 void truncate_inode_pages_final(struct address_space *mapping)
0466 {
0467
0468
0469
0470
0471
0472
0473
0474 mapping_set_exiting(mapping);
0475
0476 if (!mapping_empty(mapping)) {
0477
0478
0479
0480
0481
0482
0483 xa_lock_irq(&mapping->i_pages);
0484 xa_unlock_irq(&mapping->i_pages);
0485 }
0486
0487 truncate_inode_pages(mapping, 0);
0488 }
0489 EXPORT_SYMBOL(truncate_inode_pages_final);
0490
0491
0492
0493
0494
0495
0496
0497
0498
0499
0500
0501
0502 unsigned long invalidate_mapping_pagevec(struct address_space *mapping,
0503 pgoff_t start, pgoff_t end, unsigned long *nr_pagevec)
0504 {
0505 pgoff_t indices[PAGEVEC_SIZE];
0506 struct folio_batch fbatch;
0507 pgoff_t index = start;
0508 unsigned long ret;
0509 unsigned long count = 0;
0510 int i;
0511
0512 folio_batch_init(&fbatch);
0513 while (find_lock_entries(mapping, index, end, &fbatch, indices)) {
0514 for (i = 0; i < folio_batch_count(&fbatch); i++) {
0515 struct folio *folio = fbatch.folios[i];
0516
0517
0518 index = indices[i];
0519
0520 if (xa_is_value(folio)) {
0521 count += invalidate_exceptional_entry(mapping,
0522 index,
0523 folio);
0524 continue;
0525 }
0526 index += folio_nr_pages(folio) - 1;
0527
0528 ret = mapping_evict_folio(mapping, folio);
0529 folio_unlock(folio);
0530
0531
0532
0533
0534 if (!ret) {
0535 deactivate_file_folio(folio);
0536
0537 if (nr_pagevec)
0538 (*nr_pagevec)++;
0539 }
0540 count += ret;
0541 }
0542 folio_batch_remove_exceptionals(&fbatch);
0543 folio_batch_release(&fbatch);
0544 cond_resched();
0545 index++;
0546 }
0547 return count;
0548 }
0549
0550
0551
0552
0553
0554
0555
0556
0557
0558
0559
0560
0561
0562
0563
0564 unsigned long invalidate_mapping_pages(struct address_space *mapping,
0565 pgoff_t start, pgoff_t end)
0566 {
0567 return invalidate_mapping_pagevec(mapping, start, end, NULL);
0568 }
0569 EXPORT_SYMBOL(invalidate_mapping_pages);
0570
0571
0572
0573
0574
0575
0576
0577
0578 static int invalidate_complete_folio2(struct address_space *mapping,
0579 struct folio *folio)
0580 {
0581 if (folio->mapping != mapping)
0582 return 0;
0583
0584 if (folio_has_private(folio) &&
0585 !filemap_release_folio(folio, GFP_KERNEL))
0586 return 0;
0587
0588 spin_lock(&mapping->host->i_lock);
0589 xa_lock_irq(&mapping->i_pages);
0590 if (folio_test_dirty(folio))
0591 goto failed;
0592
0593 BUG_ON(folio_has_private(folio));
0594 __filemap_remove_folio(folio, NULL);
0595 xa_unlock_irq(&mapping->i_pages);
0596 if (mapping_shrinkable(mapping))
0597 inode_add_lru(mapping->host);
0598 spin_unlock(&mapping->host->i_lock);
0599
0600 filemap_free_folio(mapping, folio);
0601 return 1;
0602 failed:
0603 xa_unlock_irq(&mapping->i_pages);
0604 spin_unlock(&mapping->host->i_lock);
0605 return 0;
0606 }
0607
0608 static int folio_launder(struct address_space *mapping, struct folio *folio)
0609 {
0610 if (!folio_test_dirty(folio))
0611 return 0;
0612 if (folio->mapping != mapping || mapping->a_ops->launder_folio == NULL)
0613 return 0;
0614 return mapping->a_ops->launder_folio(folio);
0615 }
0616
0617
0618
0619
0620
0621
0622
0623
0624
0625
0626
0627
0628 int invalidate_inode_pages2_range(struct address_space *mapping,
0629 pgoff_t start, pgoff_t end)
0630 {
0631 pgoff_t indices[PAGEVEC_SIZE];
0632 struct folio_batch fbatch;
0633 pgoff_t index;
0634 int i;
0635 int ret = 0;
0636 int ret2 = 0;
0637 int did_range_unmap = 0;
0638
0639 if (mapping_empty(mapping))
0640 return 0;
0641
0642 folio_batch_init(&fbatch);
0643 index = start;
0644 while (find_get_entries(mapping, index, end, &fbatch, indices)) {
0645 for (i = 0; i < folio_batch_count(&fbatch); i++) {
0646 struct folio *folio = fbatch.folios[i];
0647
0648
0649 index = indices[i];
0650
0651 if (xa_is_value(folio)) {
0652 if (!invalidate_exceptional_entry2(mapping,
0653 index, folio))
0654 ret = -EBUSY;
0655 continue;
0656 }
0657
0658 if (!did_range_unmap && folio_mapped(folio)) {
0659
0660
0661
0662
0663 unmap_mapping_pages(mapping, index,
0664 (1 + end - index), false);
0665 did_range_unmap = 1;
0666 }
0667
0668 folio_lock(folio);
0669 VM_BUG_ON_FOLIO(!folio_contains(folio, index), folio);
0670 if (folio->mapping != mapping) {
0671 folio_unlock(folio);
0672 continue;
0673 }
0674 folio_wait_writeback(folio);
0675
0676 if (folio_mapped(folio))
0677 unmap_mapping_folio(folio);
0678 BUG_ON(folio_mapped(folio));
0679
0680 ret2 = folio_launder(mapping, folio);
0681 if (ret2 == 0) {
0682 if (!invalidate_complete_folio2(mapping, folio))
0683 ret2 = -EBUSY;
0684 }
0685 if (ret2 < 0)
0686 ret = ret2;
0687 folio_unlock(folio);
0688 }
0689 folio_batch_remove_exceptionals(&fbatch);
0690 folio_batch_release(&fbatch);
0691 cond_resched();
0692 index++;
0693 }
0694
0695
0696
0697
0698
0699
0700
0701 if (dax_mapping(mapping)) {
0702 unmap_mapping_pages(mapping, start, end - start + 1, false);
0703 }
0704 return ret;
0705 }
0706 EXPORT_SYMBOL_GPL(invalidate_inode_pages2_range);
0707
0708
0709
0710
0711
0712
0713
0714
0715
0716
0717 int invalidate_inode_pages2(struct address_space *mapping)
0718 {
0719 return invalidate_inode_pages2_range(mapping, 0, -1);
0720 }
0721 EXPORT_SYMBOL_GPL(invalidate_inode_pages2);
0722
0723
0724
0725
0726
0727
0728
0729
0730
0731
0732
0733
0734
0735
0736
0737
0738 void truncate_pagecache(struct inode *inode, loff_t newsize)
0739 {
0740 struct address_space *mapping = inode->i_mapping;
0741 loff_t holebegin = round_up(newsize, PAGE_SIZE);
0742
0743
0744
0745
0746
0747
0748
0749
0750
0751
0752 unmap_mapping_range(mapping, holebegin, 0, 1);
0753 truncate_inode_pages(mapping, newsize);
0754 unmap_mapping_range(mapping, holebegin, 0, 1);
0755 }
0756 EXPORT_SYMBOL(truncate_pagecache);
0757
0758
0759
0760
0761
0762
0763
0764
0765
0766
0767
0768
0769
0770
0771 void truncate_setsize(struct inode *inode, loff_t newsize)
0772 {
0773 loff_t oldsize = inode->i_size;
0774
0775 i_size_write(inode, newsize);
0776 if (newsize > oldsize)
0777 pagecache_isize_extended(inode, oldsize, newsize);
0778 truncate_pagecache(inode, newsize);
0779 }
0780 EXPORT_SYMBOL(truncate_setsize);
0781
0782
0783
0784
0785
0786
0787
0788
0789
0790
0791
0792
0793
0794
0795
0796
0797
0798
0799
0800
0801 void pagecache_isize_extended(struct inode *inode, loff_t from, loff_t to)
0802 {
0803 int bsize = i_blocksize(inode);
0804 loff_t rounded_from;
0805 struct page *page;
0806 pgoff_t index;
0807
0808 WARN_ON(to > inode->i_size);
0809
0810 if (from >= to || bsize == PAGE_SIZE)
0811 return;
0812
0813 rounded_from = round_up(from, bsize);
0814 if (to <= rounded_from || !(rounded_from & (PAGE_SIZE - 1)))
0815 return;
0816
0817 index = from >> PAGE_SHIFT;
0818 page = find_lock_page(inode->i_mapping, index);
0819
0820 if (!page)
0821 return;
0822
0823
0824
0825
0826 if (page_mkclean(page))
0827 set_page_dirty(page);
0828 unlock_page(page);
0829 put_page(page);
0830 }
0831 EXPORT_SYMBOL(pagecache_isize_extended);
0832
0833
0834
0835
0836
0837
0838
0839
0840
0841
0842
0843
0844
0845
0846 void truncate_pagecache_range(struct inode *inode, loff_t lstart, loff_t lend)
0847 {
0848 struct address_space *mapping = inode->i_mapping;
0849 loff_t unmap_start = round_up(lstart, PAGE_SIZE);
0850 loff_t unmap_end = round_down(1 + lend, PAGE_SIZE) - 1;
0851
0852
0853
0854
0855
0856
0857
0858
0859
0860
0861
0862
0863
0864 if ((u64)unmap_end > (u64)unmap_start)
0865 unmap_mapping_range(mapping, unmap_start,
0866 1 + unmap_end - unmap_start, 0);
0867 truncate_inode_pages_range(mapping, lstart, lend);
0868 }
0869 EXPORT_SYMBOL(truncate_pagecache_range);