Re: VFS not completely factored

James Manning (jmm@computer.org)
Tue, 15 Feb 2000 08:41:14 -0500


--ikeVEW9yuYc//A+q
Content-Type: text/plain; charset=us-ascii

[ Monday, February 14, 2000 ] breed@almaden.ibm.com wrote:
> On a related issue, if there was a char generic_data[] member in the inode
> union that had a defined size (probably the size of the largest structure),
> people (like me) writing filesystems that aren't ready to be put into the
> sources yet could put data right in the union and know that it will fit
> without having to resort to using generic_ip and allocating an info block
> to store inode specific info. (Narly sentence huh?)

That would seem to place a restriction on the size of your inode data,
something generic_ip frees you from (at not a high cost imho). I'd
go ahead and advocate everyone having to go through the indirection
and rip out the entire union for a void *inode_info first (helping a
good bit towards freeing vfs from specific fs's). Then do the same
for the super_block struct and you seem to be well on your way to the
factored vfs, as you'll be rid of fs-specific includes in linux/fs.h
(attached). Whether the indirection and sacrificed cache line is worth
it is the call of another.

fs.h | 99 +------------------------------------------------------------------ 1 files changed, 2 insertions, 97 deletions

James

--ikeVEW9yuYc//A+q
Content-Type: text/plain; charset=us-ascii
Content-Disposition: attachment; filename="fs.patch"

--- linux-2.3.45/include/linux/fs.h.orig Tue Feb 15 08:34:09 2000
+++ linux-2.3.45/include/linux/fs.h Tue Feb 15 08:36:02 2000
@@ -251,32 +251,6 @@

#define touch_buffer(bh) set_bit(PG_referenced, &bh->b_page->flags)

-
-#include <linux/pipe_fs_i.h>
-#include <linux/minix_fs_i.h>
-#include <linux/ext2_fs_i.h>
-#include <linux/hpfs_fs_i.h>
-#include <linux/ntfs_fs_i.h>
-#include <linux/msdos_fs_i.h>
-#include <linux/umsdos_fs_i.h>
-#include <linux/iso_fs_i.h>
-#include <linux/nfs_fs_i.h>
-#include <linux/sysv_fs_i.h>
-#include <linux/affs_fs_i.h>
-#include <linux/ufs_fs_i.h>
-#include <linux/efs_fs_i.h>
-#include <linux/coda_fs_i.h>
-#include <linux/romfs_fs_i.h>
-#include <linux/smb_fs_i.h>
-#include <linux/hfs_fs_i.h>
-#include <linux/adfs_fs_i.h>
-#include <linux/qnx4_fs_i.h>
-#include <linux/bfs_fs_i.h>
-#include <linux/udf_fs_i.h>
-#include <linux/ncp_fs_i.h>
-#include <linux/proc_fs_i.h>
-#include <linux/usbdev_fs_i.h>
-
/*
* Attribute flags. These should be or-ed together to figure out what
* has been changed!
@@ -402,33 +376,7 @@
atomic_t i_writecount;
unsigned int i_attr_flags;
__u32 i_generation;
- union {
- struct minix_inode_info minix_i;
- struct ext2_inode_info ext2_i;
- struct hpfs_inode_info hpfs_i;
- struct ntfs_inode_info ntfs_i;
- struct msdos_inode_info msdos_i;
- struct umsdos_inode_info umsdos_i;
- struct iso_inode_info isofs_i;
- struct nfs_inode_info nfs_i;
- struct sysv_inode_info sysv_i;
- struct affs_inode_info affs_i;
- struct ufs_inode_info ufs_i;
- struct efs_inode_info efs_i;
- struct romfs_inode_info romfs_i;
- struct coda_inode_info coda_i;
- struct smb_inode_info smbfs_i;
- struct hfs_inode_info hfs_i;
- struct adfs_inode_info adfs_i;
- struct qnx4_inode_info qnx4_i;
- struct bfs_inode_info bfs_i;
- struct udf_inode_info udf_i;
- struct ncp_inode_info ncpfs_i;
- struct proc_inode_info proc_i;
- struct socket socket_i;
- struct usbdev_inode_info usbdev_i;
- void *generic_ip;
- } u;
+ void *inode_info;
};

/* Inode state bits.. */
@@ -539,27 +487,6 @@

extern int fasync_helper(int, struct file *, int, struct fasync_struct **);

-#include <linux/minix_fs_sb.h>
-#include <linux/ext2_fs_sb.h>
-#include <linux/hpfs_fs_sb.h>
-#include <linux/ntfs_fs_sb.h>
-#include <linux/msdos_fs_sb.h>
-#include <linux/iso_fs_sb.h>
-#include <linux/nfs_fs_sb.h>
-#include <linux/sysv_fs_sb.h>
-#include <linux/affs_fs_sb.h>
-#include <linux/ufs_fs_sb.h>
-#include <linux/efs_fs_sb.h>
-#include <linux/romfs_fs_sb.h>
-#include <linux/smb_fs_sb.h>
-#include <linux/hfs_fs_sb.h>
-#include <linux/adfs_fs_sb.h>
-#include <linux/qnx4_fs_sb.h>
-#include <linux/bfs_fs_sb.h>
-#include <linux/udf_fs_sb.h>
-#include <linux/ncp_fs_sb.h>
-#include <linux/usbdev_fs_sb.h>
-
extern struct list_head super_blocks;

#define sb_entry(list) list_entry((list), struct super_block, s_list)
@@ -586,29 +513,7 @@

struct block_device *s_bdev;

- union {
- struct minix_sb_info minix_sb;
- struct ext2_sb_info ext2_sb;
- struct hpfs_sb_info hpfs_sb;
- struct ntfs_sb_info ntfs_sb;
- struct msdos_sb_info msdos_sb;
- struct isofs_sb_info isofs_sb;
- struct nfs_sb_info nfs_sb;
- struct sysv_sb_info sysv_sb;
- struct affs_sb_info affs_sb;
- struct ufs_sb_info ufs_sb;
- struct efs_sb_info efs_sb;
- struct romfs_sb_info romfs_sb;
- struct smb_sb_info smbfs_sb;
- struct hfs_sb_info hfs_sb;
- struct adfs_sb_info adfs_sb;
- struct qnx4_sb_info qnx4_sb;
- struct bfs_sb_info bfs_sb;
- struct udf_sb_info udf_sb;
- struct ncp_sb_info ncpfs_sb;
- struct usbdev_sb_info usbdevfs_sb;
- void *generic_sbp;
- } u;
+ void *sb_info;
/*
* The next field is for VFS *only*. No filesystems have any business
* even looking at it. You had been warned.

--ikeVEW9yuYc//A+q--

-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.rutgers.edu
Please read the FAQ at http://www.tux.org/lkml/