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

f2fs: handle quota for orphan inodes

This is to detect dquot_initialize errors early from evict_inode
for orphan inodes.

Reviewed-by: Chao Yu <yuchao0@huawei.com>
Signed-off-by: Jaegeuk Kim <jaegeuk@kernel.org>

+16 -12
+16 -12
fs/f2fs/checkpoint.c
··· 569 569 struct node_info ni; 570 570 int err = acquire_orphan_inode(sbi); 571 571 572 - if (err) { 573 - set_sbi_flag(sbi, SBI_NEED_FSCK); 574 - f2fs_msg(sbi->sb, KERN_WARNING, 575 - "%s: orphan failed (ino=%x), run fsck to fix.", 576 - __func__, ino); 577 - return err; 578 - } 572 + if (err) 573 + goto err_out; 579 574 580 575 __add_ino_entry(sbi, ino, 0, ORPHAN_INO); 581 576 ··· 584 589 return PTR_ERR(inode); 585 590 } 586 591 592 + err = dquot_initialize(inode); 593 + if (err) 594 + goto err_out; 595 + 596 + dquot_initialize(inode); 587 597 clear_nlink(inode); 588 598 589 599 /* truncate all the data during iput */ ··· 598 598 599 599 /* ENOMEM was fully retried in f2fs_evict_inode. */ 600 600 if (ni.blk_addr != NULL_ADDR) { 601 - set_sbi_flag(sbi, SBI_NEED_FSCK); 602 - f2fs_msg(sbi->sb, KERN_WARNING, 603 - "%s: orphan failed (ino=%x) by kernel, retry mount.", 604 - __func__, ino); 605 - return -EIO; 601 + err = -EIO; 602 + goto err_out; 606 603 } 607 604 __remove_ino_entry(sbi, ino, ORPHAN_INO); 608 605 return 0; 606 + 607 + err_out: 608 + set_sbi_flag(sbi, SBI_NEED_FSCK); 609 + f2fs_msg(sbi->sb, KERN_WARNING, 610 + "%s: orphan failed (ino=%x), run fsck to fix.", 611 + __func__, ino); 612 + return err; 609 613 } 610 614 611 615 int recover_orphan_inodes(struct f2fs_sb_info *sbi)