On Sat, Dec 05, 2020 at 04:32:44PM +0800, Li GuiFu via Linux-erofs wrote: ...
> > > @@ -957,6 +974,10 @@ struct erofs_inode *erofs_mkfs_build_tree(struct > > erofs_inode *dir) > > ret = PTR_ERR(d); > > goto err_closedir; > > } > > + > > + /* to count i_nlink for directories */ > > + d->type = (dp->d_type == DT_DIR ? > > + EROFS_FT_DIR : EROFS_FT_UNKNOWN); > > } > > > It's confused that d->type was set to EROFS_FT_UNKNOWN when not a dir > It's not clearness whether the program goes wrong or get the wrong data > Actually it's a correct procedure It's just set temporarily, since only dirs are useful when counting subdirs, so only needs to differ dirs and non-dirs here. (Previously d->type is unused at this time.) ... > > - d->type = erofs_type_by_mode[d->inode->i_mode >> S_SHIFT]; > > + ftype = erofs_mode_to_ftype(d->inode->i_mode); > > + DBG_BUGON(d->type != EROFS_FT_UNKNOWN && d->type != ftype); > > + d->type = ftype; The real on-disk d->type will be set here rather than the above. Thanks, Gao Xiang