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.