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 <w...@suse.com>

Is this the same fix as :
https://patchwork.kernel.org/patch/11086471/ from josef, but for lowmem
mode?

> ---
>  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);
> 

Reply via email to