Am I allowed to assign the value 0 to an inode in a file system driver? I seem
to be having problems with a file that is being assigned this inode value
(its a FAT based filesystem so the inode values are totally artificial).
Adrian McMenamin
On Sat, May 10, 2003 at 09:18:20PM +0100, Adrian McMenamin wrote:
> Am I allowed to assign the value 0 to an inode in a file system driver? I seem
> to be having problems with a file that is being assigned this inode value
> (its a FAT based filesystem so the inode values are totally artificial).
Yes, you are. However, glibc thinks that inode 0 is special and won't
show it.
Example: mount an NTFS filesystem with -o show_sys_files and do ls on
the mountpoint. You won't see the file $MFT, but it is there when you
copy it: cp /mountpoint/\$MFT /tmp .
Yes, this is a bug in glibc.
Erik
--
Erik Mouw
[email protected] [email protected]
Erik Mouw <[email protected]> writes:
|> On Sat, May 10, 2003 at 09:18:20PM +0100, Adrian McMenamin wrote:
|> > Am I allowed to assign the value 0 to an inode in a file system driver? I seem
|> > to be having problems with a file that is being assigned this inode value
|> > (its a FAT based filesystem so the inode values are totally artificial).
|>
|> Yes, you are. However, glibc thinks that inode 0 is special and won't
|> show it.
BS. This has nothing at all to do with glibc.
Andreas.
--
Andreas Schwab, SuSE Labs, [email protected]
SuSE Linux AG, Deutschherrnstr. 15-19, D-90429 N?rnberg
Key fingerprint = 58CA 54C7 6D53 942B 1756 01D3 44D5 214B 8276 4ED5
"And now for something completely different."
Andreas Schwab writes:
> Erik Mouw <[email protected]> writes:
>
> |> On Sat, May 10, 2003 at 09:18:20PM +0100, Adrian McMenamin wrote:
> |> > Am I allowed to assign the value 0 to an inode in a file system driver? I seem
> |> > to be having problems with a file that is being assigned this inode value
> |> > (its a FAT based filesystem so the inode values are totally artificial).
> |>
> |> Yes, you are. However, glibc thinks that inode 0 is special and won't
> |> show it.
>
> BS. This has nothing at all to do with glibc.
from glibc-2.2.4/sysdeps/unix/readdir.c:
/* Skip deleted files. */
} while (dp->d_ino == 0);
In other words, readdir(3) will not return dirent for inode with ino 0.
>
> Andreas.
>
Nikita.
Nikita Danilov <[email protected]> writes:
|> Andreas Schwab writes:
|> > Erik Mouw <[email protected]> writes:
|> >
|> > |> On Sat, May 10, 2003 at 09:18:20PM +0100, Adrian McMenamin wrote:
|> > |> > Am I allowed to assign the value 0 to an inode in a file system driver? I seem
|> > |> > to be having problems with a file that is being assigned this inode value
|> > |> > (its a FAT based filesystem so the inode values are totally artificial).
|> > |>
|> > |> Yes, you are. However, glibc thinks that inode 0 is special and won't
|> > |> show it.
|> >
|> > BS. This has nothing at all to do with glibc.
|>
|> from glibc-2.2.4/sysdeps/unix/readdir.c:
|>
|> /* Skip deleted files. */
|> } while (dp->d_ino == 0);
|>
|> In other words, readdir(3) will not return dirent for inode with ino 0.
I stand corrected. I was thinking of getdirentries, which does not have
this problem. But this is traditional Unix behaviour.
Andreas.
--
Andreas Schwab, SuSE Labs, [email protected]
SuSE Linux AG, Deutschherrnstr. 15-19, D-90429 N?rnberg
Key fingerprint = 58CA 54C7 6D53 942B 1756 01D3 44D5 214B 8276 4ED5
"And now for something completely different."
On Tuesday 13 May 2003 15:56, Andreas Schwab wrote:
> Nikita Danilov <[email protected]> writes:
> |> Andreas Schwab writes:
> |> > Erik Mouw <[email protected]> writes:
> |> > |> On Sat, May 10, 2003 at 09:18:20PM +0100, Adrian McMenamin wrote:
> |> > |> > Am I allowed to assign the value 0 to an inode in a file system
> |> > |> > driver? I seem to be having problems with a file that is being
> |> > |> > assigned this inode value (its a FAT based filesystem so the
> |> > |> > inode values are totally artificial).
> |> > |>
> |> > |> Yes, you are. However, glibc thinks that inode 0 is special and
> |> > |> won't show it.
> |> >
> |> > BS. This has nothing at all to do with glibc.
> |>
> |> from glibc-2.2.4/sysdeps/unix/readdir.c:
> |>
> |> /* Skip deleted files. */
> |> } while (dp->d_ino == 0);
> |>
> |> In other words, readdir(3) will not return dirent for inode with ino 0.
>
> I stand corrected. I was thinking of getdirentries, which does not have
> this problem. But this is traditional Unix behaviour.
>
> Andreas.
Thanks. At least I know why my driver is failing now.
Adrian
On Tuesday 13 May 2003 15:56, Andreas Schwab wrote:
> Nikita Danilov <[email protected]> writes:
> |> In other words, readdir(3) will not return dirent for inode with ino 0.
>
> I stand corrected. I was thinking of getdirentries, which does not have
> this problem. But this is traditional Unix behaviour.
>
OK. I've worked round this in my driver. It will now list the file, and does
so with inode 0 (I have not tinkered with anything outside my driver, so this
won't have any impact on any other fs). Is this A Bad Thing?
Adrian