Re: [PATCH 00/17] Parent Pointers V3

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Mon, Oct 23, 2017 at 11:40 AM, Dave Chinner <david@xxxxxxxxxxxxx> wrote:
> On Mon, Oct 23, 2017 at 09:48:24AM +0300, Amir Goldstein wrote:
>> On Mon, Oct 23, 2017 at 8:32 AM, Dave Chinner <david@xxxxxxxxxxxxx> wrote:
>> > On Mon, Oct 23, 2017 at 07:30:01AM +0300, Amir Goldstein wrote:
>> >> If there is no such reason I would like to propose to store parent
>> >> pointers of directory inodes with an xattr name that is diroffset agnostic,
>> >> namely:
>> >>
>> >> struct xfs_dir_parent_name_rec {
>> >>       __be64  p_ino;
>> >>       __be32  p_gen;
>> >> } __attribute__((packed));
>> >>
>> >> It makes sense for metadata consistency anyway, but the reason I am
>> >> proposing this is so xfs_fs_get_name() could be implemented at O(1).
>
> [...]
>
>> But you missed my question completely. I understand why diroffset
>> is needed for non-dir. But directories are not allowed to have 2 differnt
>> parents nor 2 entries in the parent dir, so I was asking if we can
>> special case parent pointer stored in *directory inodes*.
>
> I did answer it - not directly, but the answers are there.
>
>> Am I missing something?
>
> Because you are just looking at it from a "reverse lookup"
> perspective, I suspect you're not seeing the "detect and
> reconstruct" broken directory structure side of the picture.
>
> The directory offset is redundant information which needed to fully
> cross-check and, if necessary, reconstruct broken direcotry
> structures. E.g. if a directory is missing a block due to a bad
> sector, we can reconstruct that block exactly from the parent
> pointer information because we know exactly what inodes had dirents
> in the block that was lost, and we know exactly what order they
> appeared in the directory block...
>
> If we don't have that info for all child inodes (directory or
> regular file), we can't tell the difference between "lost/stale
> child that we should ignore" and "child that was referenced by the
> block we lost". So even directories need to have the diroffset in
> their parent pointer....
>

I see. Thanks for explaining that point.
In that case, I would like to re-phrase my proposal to store parent
diroffset in the value rather than in the key of xattr, i.e.:
        name={parent inode #, parent inode generation}
        value={dirent filename, dirent offset}
OR   value={dirent offset, dirent filename}

I guess you do see the value of my proposal to the "reverse lookup"
workload. The question is what is the cost (in code complexity/
maintainability) of special casing directory parent pointer format
and whether it is worth the benefits of "reverse lookup" performance.

Thanks,
Amir.
--
To unsubscribe from this list: send the line "unsubscribe linux-xfs" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html



[Index of Archives]     [XFS Filesystem Development (older mail)]     [Linux Filesystem Development]     [Linux Audio Users]     [Yosemite Trails]     [Linux Kernel]     [Linux RAID]     [Linux SCSI]


  Powered by Linux