Subject: Re: CVS commit: src/sys/miscfs/kernfs
To: Christos Zoulas <christos@zoulas.com>
From: Manuel Bouyer <bouyer@antioche.eu.org>
List: source-changes
Date: 06/23/2006 21:44:05
On Fri, Jun 23, 2006 at 03:31:06PM -0400, Christos Zoulas wrote:
> On Jun 23, 9:07pm, bouyer@antioche.eu.org (Manuel Bouyer) wrote:
> -- Subject: Re: CVS commit: src/sys/miscfs/kernfs
>
> | On Fri, Jun 23, 2006 at 02:54:12PM -0400, Christos Zoulas wrote:
> | > On Jun 23, 8:16pm, bouyer@antioche.eu.org (Manuel Bouyer) wrote:
> | > -- Subject: Re: CVS commit: src/sys/miscfs/kernfs
> | >
> | > | > 1. If you don't kernfs_alloctype (which obviously xen does so it works)
> | > | > the splay tree will be empty so the read method will not be found.
> | > |
> | > | Yes, that's what I found. All the ops using kernfs_try_fileop() are broken.
> | > | I can confirm that write are broken too, and the write code has been there
> | > | for years.
> | >
> | > I also don't understand the assignment in the first loop:
> | >
> | > dkf[i].kf_type = nextfreetype;
> |
> | This is kernfs_alloctype(). Each time we allocate a new kernfs type,
> | a new fileop structure is added to the splay tree for this type.
>
> So all the built-in types have the same kf_type?
No, but they are all below KFSlasttype (nextfreetype is statically
initialized with KFSlasttype)
>
> for (i = 0; i < sizeof(kernfs_default_fileops) /
> sizeof(kernfs_default_fileops[0]); i++) {
> dkf[i].kf_type = nextfreetype;
> SPLAY_INSERT(kfsfileoptree, &kfsfileoptree, &dkf[i]);
> }
>
> Nextfreetype did not get incremented here.
No, it's incremented later. All the fileops are for the same type.
> And here we could move the assignment out of the loop?
>
> for (i = 0; i < nkf; i++) {
> skf.kf_type = nextfreetype;
> skf.kf_fileop = kf[i].kf_fileop;
> if ((fkf = SPLAY_FIND(kfsfileoptree, &kfsfileoptree, &skf)))
> fkf->kf_genop = kf[i].kf_genop;
> }
We could but it's not as easy: for each element in kf[] we'll have to find
the corresponding one in dkf[]. The SPLAY_FIND() here does it for us.
>
> What about if we did not find any that matched? Do we still increment
> nextfreetype?
Yes, we still added an entry in the splay, this type is allocated and has
kernfs VOPS
--
Manuel Bouyer <bouyer@antioche.eu.org>
NetBSD: 26 ans d'experience feront toujours la difference
--