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>