Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

fs: cosmetic fixes to lru handling

1. inode_bit_waitqueue() was somehow placed between __inode_add_lru() and
inode_add_lru(). move it up
2. assert ->i_lock is held in __inode_add_lru instead of just claiming it is
needed
3. s/__inode_add_lru/__inode_lru_list_add/ for consistency with itself
(inode_lru_list_del()) and similar routines for sb and io list
management
4. push list presence check into inode_lru_list_del(), just like sb and
io list

Signed-off-by: Mateusz Guzik <mjguzik@gmail.com>
Link: https://patch.msgid.link/20251029131428.654761-2-mjguzik@gmail.com
Reviewed-by: Jan Kara <jack@suse.cz>
Signed-off-by: Christian Brauner <brauner@kernel.org>

authored by

Mateusz Guzik and committed by
Christian Brauner
4c6b4087 a27628f4

+35 -33
+1 -1
fs/fs-writeback.c
··· 1452 1452 1453 1453 inode_state_clear(inode, I_SYNC); 1454 1454 /* If inode is clean an unused, put it into LRU now... */ 1455 - inode_add_lru(inode); 1455 + inode_lru_list_add(inode); 1456 1456 /* Called with inode->i_lock which ensures memory ordering. */ 1457 1457 inode_wake_up_bit(inode, __I_SYNC); 1458 1458 }
+26 -24
fs/inode.c
··· 530 530 } 531 531 EXPORT_SYMBOL(ihold); 532 532 533 - static void __inode_add_lru(struct inode *inode, bool rotate) 534 - { 535 - if (inode_state_read(inode) & (I_DIRTY_ALL | I_SYNC | I_FREEING | I_WILL_FREE)) 536 - return; 537 - if (icount_read(inode)) 538 - return; 539 - if (!(inode->i_sb->s_flags & SB_ACTIVE)) 540 - return; 541 - if (!mapping_shrinkable(&inode->i_data)) 542 - return; 543 - 544 - if (list_lru_add_obj(&inode->i_sb->s_inode_lru, &inode->i_lru)) 545 - this_cpu_inc(nr_unused); 546 - else if (rotate) 547 - inode_state_set(inode, I_REFERENCED); 548 - } 549 - 550 533 struct wait_queue_head *inode_bit_waitqueue(struct wait_bit_queue_entry *wqe, 551 534 struct inode *inode, u32 bit) 552 535 { ··· 567 584 } 568 585 EXPORT_SYMBOL(wait_on_new_inode); 569 586 587 + static void __inode_lru_list_add(struct inode *inode, bool rotate) 588 + { 589 + lockdep_assert_held(&inode->i_lock); 590 + 591 + if (inode_state_read(inode) & (I_DIRTY_ALL | I_SYNC | I_FREEING | I_WILL_FREE)) 592 + return; 593 + if (icount_read(inode)) 594 + return; 595 + if (!(inode->i_sb->s_flags & SB_ACTIVE)) 596 + return; 597 + if (!mapping_shrinkable(&inode->i_data)) 598 + return; 599 + 600 + if (list_lru_add_obj(&inode->i_sb->s_inode_lru, &inode->i_lru)) 601 + this_cpu_inc(nr_unused); 602 + else if (rotate) 603 + inode_state_set(inode, I_REFERENCED); 604 + } 605 + 570 606 /* 571 607 * Add inode to LRU if needed (inode is unused and clean). 572 - * 573 - * Needs inode->i_lock held. 574 608 */ 575 - void inode_add_lru(struct inode *inode) 609 + void inode_lru_list_add(struct inode *inode) 576 610 { 577 - __inode_add_lru(inode, false); 611 + __inode_lru_list_add(inode, false); 578 612 } 579 613 580 614 static void inode_lru_list_del(struct inode *inode) 581 615 { 616 + if (list_empty(&inode->i_lru)) 617 + return; 618 + 582 619 if (list_lru_del_obj(&inode->i_sb->s_inode_lru, &inode->i_lru)) 583 620 this_cpu_dec(nr_unused); 584 621 } ··· 1923 1920 if (!drop && 1924 1921 !(inode_state_read(inode) & I_DONTCACHE) && 1925 1922 (sb->s_flags & SB_ACTIVE)) { 1926 - __inode_add_lru(inode, true); 1923 + __inode_lru_list_add(inode, true); 1927 1924 spin_unlock(&inode->i_lock); 1928 1925 return; 1929 1926 } ··· 1947 1944 inode_state_replace(inode, I_WILL_FREE, I_FREEING); 1948 1945 } 1949 1946 1950 - if (!list_empty(&inode->i_lru)) 1951 - inode_lru_list_del(inode); 1947 + inode_lru_list_del(inode); 1952 1948 spin_unlock(&inode->i_lock); 1953 1949 1954 1950 evict(inode);
+1 -1
include/linux/fs.h
··· 3502 3502 } 3503 3503 3504 3504 extern void inode_sb_list_add(struct inode *inode); 3505 - extern void inode_add_lru(struct inode *inode); 3505 + extern void inode_lru_list_add(struct inode *inode); 3506 3506 3507 3507 extern int sb_set_blocksize(struct super_block *, int); 3508 3508 extern int sb_min_blocksize(struct super_block *, int);
+2 -2
mm/filemap.c
··· 256 256 __filemap_remove_folio(folio, NULL); 257 257 xa_unlock_irq(&mapping->i_pages); 258 258 if (mapping_shrinkable(mapping)) 259 - inode_add_lru(mapping->host); 259 + inode_lru_list_add(mapping->host); 260 260 spin_unlock(&mapping->host->i_lock); 261 261 262 262 filemap_free_folio(mapping, folio); ··· 335 335 page_cache_delete_batch(mapping, fbatch); 336 336 xa_unlock_irq(&mapping->i_pages); 337 337 if (mapping_shrinkable(mapping)) 338 - inode_add_lru(mapping->host); 338 + inode_lru_list_add(mapping->host); 339 339 spin_unlock(&mapping->host->i_lock); 340 340 341 341 for (i = 0; i < folio_batch_count(fbatch); i++)
+3 -3
mm/truncate.c
··· 46 46 47 47 xas_unlock_irq(&xas); 48 48 if (mapping_shrinkable(mapping)) 49 - inode_add_lru(mapping->host); 49 + inode_lru_list_add(mapping->host); 50 50 spin_unlock(&mapping->host->i_lock); 51 51 } 52 52 ··· 111 111 112 112 xas_unlock_irq(&xas); 113 113 if (mapping_shrinkable(mapping)) 114 - inode_add_lru(mapping->host); 114 + inode_lru_list_add(mapping->host); 115 115 spin_unlock(&mapping->host->i_lock); 116 116 out: 117 117 folio_batch_remove_exceptionals(fbatch); ··· 622 622 __filemap_remove_folio(folio, NULL); 623 623 xa_unlock_irq(&mapping->i_pages); 624 624 if (mapping_shrinkable(mapping)) 625 - inode_add_lru(mapping->host); 625 + inode_lru_list_add(mapping->host); 626 626 spin_unlock(&mapping->host->i_lock); 627 627 628 628 filemap_free_folio(mapping, folio);
+1 -1
mm/vmscan.c
··· 811 811 __filemap_remove_folio(folio, shadow); 812 812 xa_unlock_irq(&mapping->i_pages); 813 813 if (mapping_shrinkable(mapping)) 814 - inode_add_lru(mapping->host); 814 + inode_lru_list_add(mapping->host); 815 815 spin_unlock(&mapping->host->i_lock); 816 816 817 817 if (free_folio)
+1 -1
mm/workingset.c
··· 755 755 xa_unlock_irq(&mapping->i_pages); 756 756 if (mapping->host != NULL) { 757 757 if (mapping_shrinkable(mapping)) 758 - inode_add_lru(mapping->host); 758 + inode_lru_list_add(mapping->host); 759 759 spin_unlock(&mapping->host->i_lock); 760 760 } 761 761 ret = LRU_REMOVED_RETRY;