- Add file system type number (vfc_typenum) in the list. This is useful

for debugging when changing vfs.typenumhash configuration.
- Refactor fmt_flags().

MFC after:	1 week
This commit is contained in:
Hiroki Sato 2013-06-09 16:33:32 +00:00
parent 641cb9ccd9
commit c0f826e652
2 changed files with 38 additions and 37 deletions

View File

@ -2,7 +2,7 @@
.\" Garrett A. Wollman, September 1994 .\" Garrett A. Wollman, September 1994
.\" This file is in the public domain. .\" This file is in the public domain.
.\" .\"
.Dd March 16, 1995 .Dd June 9, 2013
.Dt LSVFS 1 .Dt LSVFS 1
.Os .Os
.Sh NAME .Sh NAME
@ -36,6 +36,8 @@ and the
.Fl t .Fl t
option to option to
.Xr mount 8 .Xr mount 8
.It Num
the filesystem type number.
.It Refs .It Refs
the number of references to this VFS; i.e., the number of currently the number of references to this VFS; i.e., the number of currently
mounted file systems of this type mounted file systems of this type
@ -44,6 +46,7 @@ flag bits.
.El .El
.Sh SEE ALSO .Sh SEE ALSO
.Xr mount 2 , .Xr mount 2 ,
.Xr getvfsbyname 3 ,
.Xr mount 8 .Xr mount 8
.Sh HISTORY .Sh HISTORY
A A

View File

@ -17,9 +17,24 @@ __FBSDID("$FreeBSD$");
#include <stdlib.h> #include <stdlib.h>
#include <string.h> #include <string.h>
#define FMT "%-32.32s %5d %s\n" #define FMT "%-32.32s 0x%08x %5d %s\n"
#define HDRFMT "%-32.32s %5.5s %s\n" #define HDRFMT "%-32.32s %10s %5.5s %s\n"
#define DASHES "-------------------------------- ----- ---------------\n" #define DASHES "-------------------------------- " \
"---------- ----- ---------------\n"
static struct flaglist {
int flag;
const char str[32]; /* must be longer than the longest one. */
} fl[] = {
{ .flag = VFCF_STATIC, .str = "static", },
{ .flag = VFCF_NETWORK, .str = "network", },
{ .flag = VFCF_READONLY, .str = "read-only", },
{ .flag = VFCF_SYNTHETIC, .str = "synthetic", },
{ .flag = VFCF_LOOPBACK, .str = "loopback", },
{ .flag = VFCF_UNICODE, .str = "unicode", },
{ .flag = VFCF_JAIL, .str = "jail", },
{ .flag = VFCF_DELEGADMIN, .str = "delegated-administration", },
};
static const char *fmt_flags(int); static const char *fmt_flags(int);
@ -31,13 +46,14 @@ main(int argc, char **argv)
size_t buflen; size_t buflen;
argc--, argv++; argc--, argv++;
printf(HDRFMT, "Filesystem", "Refs", "Flags"); printf(HDRFMT, "Filesystem", "Num", "Refs", "Flags");
fputs(DASHES, stdout); fputs(DASHES, stdout);
if(argc) { if(argc) {
for(; argc; argc--, argv++) { for(; argc; argc--, argv++) {
if (getvfsbyname(*argv, &vfc) == 0) { if (getvfsbyname(*argv, &vfc) == 0) {
printf(FMT, vfc.vfc_name, vfc.vfc_refcount, fmt_flags(vfc.vfc_flags)); printf(FMT, vfc.vfc_name, vfc.vfc_typenum, vfc.vfc_refcount,
fmt_flags(vfc.vfc_flags));
} else { } else {
warnx("VFS %s unknown or not loaded", *argv); warnx("VFS %s unknown or not loaded", *argv);
rv++; rv++;
@ -54,8 +70,8 @@ main(int argc, char **argv)
cnt = buflen / sizeof(struct xvfsconf); cnt = buflen / sizeof(struct xvfsconf);
for (i = 0; i < cnt; i++) { for (i = 0; i < cnt; i++) {
printf(FMT, xvfsp[i].vfc_name, xvfsp[i].vfc_refcount, printf(FMT, xvfsp[i].vfc_name, xvfsp[i].vfc_typenum,
fmt_flags(xvfsp[i].vfc_flags)); xvfsp[i].vfc_refcount, fmt_flags(xvfsp[i].vfc_flags));
} }
free(xvfsp); free(xvfsp);
} }
@ -66,34 +82,16 @@ main(int argc, char **argv)
static const char * static const char *
fmt_flags(int flags) fmt_flags(int flags)
{ {
/* static char buf[sizeof(struct flaglist) * sizeof(fl)];
* NB: if you add new flags, don't forget to add them here vvvvvv too. int i;
*/
static char buf[sizeof
"static, network, read-only, synthetic, loopback, unicode, jail"];
size_t len;
buf[0] = '\0'; buf[0] = '\0';
for (i = 0; i < (int)nitems(fl); i++)
if(flags & VFCF_STATIC) if (flags & fl[i].flag) {
strlcat(buf, "static, ", sizeof(buf)); strlcat(buf, fl[i].str, sizeof(buf));
if(flags & VFCF_NETWORK) strlcat(buf, ", ", sizeof(buf));
strlcat(buf, "network, ", sizeof(buf)); }
if(flags & VFCF_READONLY) if (buf[0] != '\0')
strlcat(buf, "read-only, ", sizeof(buf)); buf[strlen(buf) - 2] = '\0';
if(flags & VFCF_SYNTHETIC) return (buf);
strlcat(buf, "synthetic, ", sizeof(buf));
if(flags & VFCF_LOOPBACK)
strlcat(buf, "loopback, ", sizeof(buf));
if(flags & VFCF_UNICODE)
strlcat(buf, "unicode, ", sizeof(buf));
if(flags & VFCF_JAIL)
strlcat(buf, "jail, ", sizeof(buf));
if(flags & VFCF_DELEGADMIN)
strlcat(buf, "delegated-administration, ", sizeof(buf));
len = strlen(buf);
if (len > 2 && buf[len - 2] == ',')
buf[len - 2] = '\0';
return buf;
} }