Messages in this thread |  | | From | (Linus Torvalds) | Subject | Re: Getting FS access events | Date | 15 May 2001 14:12:44 -0700 |
| |
In article <Pine.GSO.4.21.0105151628340.21081-100000@weyl.math.psu.edu>, Alexander Viro <viro@math.psu.edu> wrote: >> >> How would you know what datatype it is? A union? Making "struct >> block_device *" a "struct inode *" in a nonmounted filesystem? In a >> devfs? (Seriously. Being able to do these kinds of data-structural >> equivalence is IMO the nice thing about devfs & co...) > >void *.
No. It used to be that way, and it was a horrible mess.
We _need_ to know that it's an inode, because the generic mapping functions basically need to do things like
mark_inode_dirty_pages(mapping->host);
which in turn needs the host to be an inode (otherwise you don't know how and where to write the dang things back again).
There's no question that you can avoid it being an inode by virtualizing more of it, and adding more virtual functions to the mapping operations (right now the only one you'd HAVE to add is the "mark_page_dirty()" operation), but the fact is that code gets really ugly by doing things like that.
It was an absolute pleasure to remove all the casts of "mapping->host". With "void *" it needed to be cast to the right type (and you had to be able to _prove_ that you knew what the right type was). With "inode *", the type is statically known, and you don't actually lose anything (at worst, you'd have a virtual inode and then do an extra layer of indirection there).
I really don't think we want to go back to "void *".
Linus - To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
|  |