Re: [PATCH] fat: ignore .. subdir and always add a link to dirs

From: Thadeu Lima de Souza Cascardo
Date: Wed Mar 13 2024 - 04:41:55 EST


On Wed, Mar 13, 2024 at 05:05:41PM +0900, OGAWA Hirofumi wrote:
> Thadeu Lima de Souza Cascardo <cascardo@xxxxxxxxxx> writes:
>
> >> You are forgetting to count about normal dirs other than "." and ".."?
> >>
> >
> > Yes, I was not counting those. The patch simply ignores ".." when counting dirs
> > (which is used only for determining the number of links), and always adds one
> > link. Then, when validating the inode, it also only requires that at least one
> > link exists instead of two.
>
> So you break the mkdir/rmdir link counting, isn't it?
>

It is off by one on those images with directories without ".." subdir.
Otherwise, everything else works fine. mkdir/rmdir inside such directories work
without any issues as rmdir that same directory.

If, on the other hand, we left everything as is and only skipped the
validation, such directories would be created with a link count of 0. Then,
doing a mkdir inside them would crash the kernel with a BUG as we cannot
increment the link count of an inode with 0 links.

So the idea of the fix here is that, independently of the existence of "..",
the link count will always be at least 1.

Cascardo.

> Thanks.
>
> > There is only one other instance of fat_subdirs being called and that's when
> > the root dir link count is determined. I left that one unchanged, as usually
> > "." and ".." does not exist there and we always add two links there.
> --
> OGAWA Hirofumi <hirofumi@xxxxxxxxxxxxxxxxxx>