On 2019/9/2 下午3:54, Nikolay Borisov wrote: > > > On 2.09.19 г. 7:57 ч., Qu Wenruo wrote: >> For orphan inodes, kernel won't update its nbytes and size since it's a >> waste of time. >> >> So lowmem check can report false alert on some orphan inodes. >> >> Fix it by checking if the inode is an orphan before >> complaining/repairing its nbytes. >> >> Signed-off-by: Qu Wenruo <wqu@xxxxxxxx> > > Is this the same fix as : > https://patchwork.kernel.org/patch/11086471/ from josef, but for lowmem > mode? Yep. Thanks, Qu > >> --- >> check/mode-lowmem.c | 14 +++++++++----- >> 1 file changed, 9 insertions(+), 5 deletions(-) >> >> diff --git a/check/mode-lowmem.c b/check/mode-lowmem.c >> index da6b6fd86ae3..5f7f101daab1 100644 >> --- a/check/mode-lowmem.c >> +++ b/check/mode-lowmem.c >> @@ -2519,6 +2519,7 @@ static int check_inode_item(struct btrfs_root *root, struct btrfs_path *path) >> return err; >> } >> >> + is_orphan = has_orphan_item(root, inode_id); >> ii = btrfs_item_ptr(node, slot, struct btrfs_inode_item); >> isize = btrfs_inode_size(node, ii); >> nbytes = btrfs_inode_nbytes(node, ii); >> @@ -2672,19 +2673,22 @@ out: >> "root %llu INODE[%llu] nlink(%llu) not equal to inode_refs(%llu)", >> root->objectid, inode_id, nlink, refs); >> } >> - } else if (!nlink) { >> - is_orphan = has_orphan_item(root, inode_id); >> - if (!is_orphan && repair) >> + } else if (!nlink && !is_orphan) { >> + if (repair) >> ret = repair_inode_orphan_item_lowmem(root, >> path, inode_id); >> - if (!is_orphan && (!repair || ret)) { >> + if (!repair || ret) { >> err |= ORPHAN_ITEM; >> error("root %llu INODE[%llu] is orphan item", >> root->objectid, inode_id); >> } >> } >> >> - if (nbytes != extent_size) { >> + /* >> + * For orhpan inode, updating nbytes/size is just a waste of >> + * time, so skip such repair and don't report them as error. >> + */ >> + if (nbytes != extent_size && !is_orphan) { >> if (repair) { >> ret = repair_inode_nbytes_lowmem(root, path, >> inode_id, extent_size); >>
