Skip site navigation (1)Skip section navigation (2)
Date:      Tue, 18 Sep 2001 15:09:33 +0300
From:      Maxim Sobolev <sobomax@FreeBSD.org>
To:        chris@calldei.com
Cc:        phk@critter.freebsd.dk, brent@rcfile.org, current@FreeBSD.org, hackers@FreeBSD.org, marcel@FreeBSD.org
Subject:   Re: Junior Kernel Hacker task: improve vnode->v_tag
Message-ID:  <3BA7397D.A82C213@FreeBSD.org>
References:  <20010908030110.E548@holly.calldei.com> <200109081154.OAA95138@www.abc.com.ua> <20010908150620.F548@holly.calldei.com>

next in thread | previous in thread | raw e-mail | index | archive | help
This is a multi-part message in MIME format.
--------------EB2B6B9ED6329EFA77147776
Content-Type: text/plain; charset=x-user-defined
Content-Transfer-Encoding: 7bit

Chris Costello wrote:

> On Saturday, September 08, 2001, Maxim Sobolev wrote:
> > I don't like idea to hardcode the same string ("procfs"), with the
> > same meaning in several places across kernel. As for your proposition
> > to use f_fstypename to set v_tag, it is even more bogus because
> > value of the f_fstypename is supplied from the user level, so
> > potentially it could be anything and we can't make any reasonable
> > assumptions about mapping between its value and type of the filesystem
> > in question.
>
>    How do you figure?  The contents if `f_fstypename' must match
> a configured file system exactly, so it could _not_ be anything.
> To quote sys/kern/vfs_syscalls.c:mount():

Oh, yes, you are correct obviously (don't know what I was thinking about). In this
case, it looks like v_tag is redundant, because f_fstypename could be used instead
in a few places where v_tag is abused (the same applies to the statfs.f_type
because essentually it is the same thing as v_tag). Poul, what do you think about
it? In the meantime, I found another place in the kernel where VT_* macros are
[ab]used - it is Linuxlator, attached please find patches to fix it - please
review.

-Maxim

--------------EB2B6B9ED6329EFA77147776
Content-Type: text/plain; charset=x-user-defined;
 name="linux_stats.c.diff"
Content-Transfer-Encoding: 7bit
Content-Disposition: inline;
 filename="linux_stats.c.diff"

Index: linux_stats.c
===================================================================
RCS file: /home/ncvs/src/sys/compat/linux/linux_stats.c,v
retrieving revision 1.37
diff -d -u -r1.37 linux_stats.c
--- linux_stats.c	2001/09/12 08:36:57	1.37
+++ linux_stats.c	2001/09/18 11:52:02
@@ -187,10 +187,6 @@
 	l_int		f_spare[6];
 };
 
-#ifndef VT_NWFS
-#define	VT_NWFS	VT_TFS	/* XXX - bug compat. with sys/fs/nwfs/nwfs_node.h */
-#endif
-
 #define	LINUX_CODA_SUPER_MAGIC	0x73757245L
 #define	LINUX_EXT2_SUPER_MAGIC	0xEF53L
 #define	LINUX_HPFS_SUPER_MAGIC	0xf995e849L
@@ -202,34 +198,30 @@
 #define	LINUX_PROC_SUPER_MAGIC	0x9fa0L
 #define	LINUX_UFS_SUPER_MAGIC	0x00011954L	/* XXX - UFS_MAGIC in Linux */
 
-/*
- * ext2fs uses the VT_UFS tag. A mounted ext2 filesystem will therefore
- * be seen as an ufs filesystem.
- */
 static long
-bsd_to_linux_ftype(int tag)
+bsd_to_linux_ftype(const char *fstypename)
 {
 
-	switch (tag) {
-	case VT_CODA:
+	if (strcmp(fstypename, "coda") == 0)
 		return (LINUX_CODA_SUPER_MAGIC);
-	case VT_HPFS:
+	else if (strcmp(fstypename, "hpfs") == 0)
 		return (LINUX_HPFS_SUPER_MAGIC);
-	case VT_ISOFS:
+	else if (strcmp(fstypename, "cd9660") == 0)
 		return (LINUX_ISOFS_SUPER_MAGIC);
-	case VT_MSDOSFS:
+	else if (strcmp(fstypename, "msdosfs") == 0)
 		return (LINUX_MSDOS_SUPER_MAGIC);
-	case VT_NFS:
+	else if (strcmp(fstypename, "nfs") == 0)
 		return (LINUX_NFS_SUPER_MAGIC);
-	case VT_NTFS:
+	else if (strcmp(fstypename, "ntfs") == 0)
 		return (LINUX_NTFS_SUPER_MAGIC);
-	case VT_NWFS:
+	else if (strcmp(fstypename, "nwfs") == 0)
 		return (LINUX_NCP_SUPER_MAGIC);
-	case VT_PROCFS:
+	else if (strcmp(fstypename, "procfs") == 0)
 		return (LINUX_PROC_SUPER_MAGIC);
-	case VT_UFS:
+	else if (strcmp(fstypename, "ufs") == 0)
 		return (LINUX_UFS_SUPER_MAGIC);
-	}
+	else if (strcmp(fstypename, "ext2fs") == 0)
+		return (LINUX_EXT2_SUPER_MAGIC);
 
 	return (0L);
 }
@@ -265,7 +257,7 @@
 	if (error)
 		return error;
 	bsd_statfs->f_flags = mp->mnt_flag & MNT_VISFLAGMASK;
-	linux_statfs.f_type = bsd_to_linux_ftype(bsd_statfs->f_type);
+	linux_statfs.f_type = bsd_to_linux_ftype(bsd_statfs->f_fstypename);
 	linux_statfs.f_bsize = bsd_statfs->f_bsize;
 	linux_statfs.f_blocks = bsd_statfs->f_blocks;
 	linux_statfs.f_bfree = bsd_statfs->f_bfree;
@@ -301,7 +293,7 @@
 	if (error)
 		return error;
 	bsd_statfs->f_flags = mp->mnt_flag & MNT_VISFLAGMASK;
-	linux_statfs.f_type = bsd_to_linux_ftype(bsd_statfs->f_type);
+	linux_statfs.f_type = bsd_to_linux_ftype(bsd_statfs->f_fstypename);
 	linux_statfs.f_bsize = bsd_statfs->f_bsize;
 	linux_statfs.f_blocks = bsd_statfs->f_blocks;
 	linux_statfs.f_bfree = bsd_statfs->f_bfree;

--------------EB2B6B9ED6329EFA77147776--


To Unsubscribe: send mail to majordomo@FreeBSD.org
with "unsubscribe freebsd-hackers" in the body of the message




Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?3BA7397D.A82C213>