Date: Mon, 19 Feb 2018 17:57:15 +0000 From: rb@gid.co.uk To: Willem Jan Withagen <wjw@digiware.nl> Cc: FreeBSD Hackers <freebsd-hackers@freebsd.org> Subject: Re: Using fstatfs on a ZFS disk Message-ID: <456B0CAA-367F-478A-BB61-153942C3EB7A@gid.co.uk> In-Reply-To: <f03f94db-e5a8-b57f-ec9a-2d434dff7425@digiware.nl> References: <ffcfabf1-8cf1-4182-413e-73b7117d66d7@digiware.nl> <1C4DBFA3-5E79-4503-840C-0C548741363B@gid.co.uk> <f03f94db-e5a8-b57f-ec9a-2d434dff7425@digiware.nl>
next in thread | previous in thread | raw e-mail | index | archive | help
Hi, > On 19 Feb 2018, at 15:50, Willem Jan Withagen <wjw@digiware.nl> wrote: >=20 > On 19-2-2018 16:00, Bob Bishop wrote: >> Hi, >>> On 19 Feb 2018, at 14:48, Willem Jan Withagen <wjw@digiware.nl> = wrote: >>>=20 >>> Hi, >>>=20 >>> I'm trying to find the values of the returned f_type for ZFS >>> in the fstatfs call when a file is on ZFS.... >>>=20 >>> But I have not yet found the definitions of the ENUMS that >>> would fill that value... Let alone the value for ZFS. >> I chased this particular wild goose myself recently. It=E2=80=99s = FS_... in /usr/include/sys/disklabel,h that you want. >=20 > Hi Bob, >=20 > I grepped on MAGIC and FS, but the combo did not deliver anything = useful. So this is already more that I found. > I did get: > /usr/include/ufs/ffs/fs.h:#define FS_UFS1_MAGIC 0x011954 /* = UFS1 fast filesystem magic number */ > /usr/include/ufs/ffs/fs.h:#define FS_UFS2_MAGIC 0x19540119 /* = UFS2 fast filesystem magic number */ > /usr/include/ufs/ffs/fs.h:#define FS_BAD_MAGIC 0x19960408 /* = UFS incomplete newfs magic number */ Those I believe are magic numbers for UFS superblocks...=20 > So I was looking for something like: FS_ZFS_MAGIC ... so you won=E2=80=99t find that. > disklabel.h contains: > #ifdef FSTYPENAMES > static const char *fstypenames[] =3D { >=20 > And further search: > /usr/include/sys/disk/bsd.h:#define FS_ZFS 27 /* Sun's ZFS */ >=20 > Running: > #include "stdio.h" >=20 > #include <sys/param.h> > #include <sys/mount.h> >=20 > int main() { > struct statfs fstr; > char * str; >=20 > str =3D "/tmp"; > statfs(str, &fstr); > printf("%s, ftype: 0x%x.\n", str, fstr.f_type); > } > results in: > /tmp, ftype: 0xde. >=20 > Now 0xde !=3D 27, so the question is, where is this 0xde specified. > And more important is this f_type constant over all FreeBSD ZFS = filesystems? You got me. And a quick look at sys/kern/vfs_syscalls.c doesn=E2=80=99t = help except to imply that the type is set when the filesystem is = mounted. I have no idea where 0xde comes from. > --WjW >=20 >>> struct statfs { >>> uint32_t f_version; /* structure version number */ >>> uint32_t f_type; /* type of filesystem */ >>> uint64_t f_flags; /* copy of mount exported flags = */ >>> ...... >>> } >>>=20 >>> Any hints where to look would be welcomed. >>>=20 >>> Thanx, >>> --WjW >>> _______________________________________________ >>> freebsd-hackers@freebsd.org mailing list >>> https://lists.freebsd.org/mailman/listinfo/freebsd-hackers >>> To unsubscribe, send any mail to = "freebsd-hackers-unsubscribe@freebsd.org" >>>=20 >> -- >> Bob Bishop >> rb@gid.co.uk >=20 -- Bob Bishop t: +44 (0)118 940 1243 rb@gid.co.uk m: +44 (0)783 626 4518
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?456B0CAA-367F-478A-BB61-153942C3EB7A>