On Mon, Mar 25, 2019 at 12:27:24PM +0800, Qu Wenruo wrote:
> 
> 
> On 2019/3/20 下午2:37, Qu Wenruo wrote:
> > There is a report in kernel bugzilla about mismatch file type in dir
> > item and inode item.
> >
> > This inspires us to check inode mode in inode item.
> >
> > This patch will check the following members:
> > - inode key objectid
> >   Should be ROOT_DIR_DIR or [256, (u64)-256] or FREE_INO.
> >
> > - inode key offset
> >   Should be 0
> >
> > - inode item generation
> > - inode item transid
> >   No newer than sb generation + 1.
> >   The +1 is for log tree.
> >
> > - inode item mode
> >   No unknown bits.
> >   No invalid S_IF* bit.
> >   NOTE: S_IFMT check is not enough, need to check every know type.
> >
> > - inode item nlink
> >   Dir should have no more link than 1.
> >
> > - inode item flags
> >
> > Signed-off-by: Qu Wenruo <w...@suse.com>
> > Reviewed-by: Nikolay Borisov <nbori...@suse.com>
> 
> There is some bug report of kernel producing free space cache inode with
> mode 0, which is invalid and can be detected by this patch.
> 
> Although the patch itself is good, I'm afraid we need to address the
> invalid inode mode created by old kernel in btrfs-progs at least before
> merging this patch into upstream.

Can this be addressed on the kernel side? Like detecting the invalid
mode, print a warning and the fix on the next write. The progs can
detect and fix that too of course.

So I'll keep the patch working as-is, we can relax the error to a
warning if we're out of time or find out that it needs to be that way
due to backward compatibilit reasons.

Reply via email to