Using statfs.f_fstypename rather than statfs.f_type whilst performing fstype

comparsion as nullfs will copy f_type from underlayer FS.

PR:		bin/156258
Submitted by:	Marcin Wisnicki <mwisnicki+freebsd@gmail.com>
MFC after:	1 month
This commit is contained in:
avatar 2011-06-13 05:22:07 +00:00
parent 1fb84703f7
commit 9618d7033c

View File

@ -846,7 +846,8 @@ f_fstype(PLAN *plan, FTSENT *entry)
static dev_t curdev; /* need a guaranteed illegal dev value */
static int first = 1;
struct statfs sb;
static int val_type, val_flags;
static int val_flags;
static char fstype[sizeof(sb.f_fstypename)];
char *p, save[2] = {0,0};
if ((plan->flags & F_MTMASK) == F_MTUNKNOWN)
@ -888,13 +889,13 @@ f_fstype(PLAN *plan, FTSENT *entry)
* always copy both of them.
*/
val_flags = sb.f_flags;
val_type = sb.f_type;
strlcpy(fstype, sb.f_fstypename, sizeof(fstype));
}
switch (plan->flags & F_MTMASK) {
case F_MTFLAG:
return val_flags & plan->mt_data;
case F_MTTYPE:
return val_type == plan->mt_data;
return (strncmp(fstype, plan->c_data, sizeof(fstype)) == 0);
default:
abort();
}
@ -905,22 +906,11 @@ c_fstype(OPTION *option, char ***argvp)
{
char *fsname;
PLAN *new;
struct xvfsconf vfc;
fsname = nextarg(option, argvp);
ftsoptions &= ~FTS_NOSTAT;
new = palloc(option);
/*
* Check first for a filesystem name.
*/
if (getvfsbyname(fsname, &vfc) == 0) {
new->flags |= F_MTTYPE;
new->mt_data = vfc.vfc_typenum;
return new;
}
switch (*fsname) {
case 'l':
if (!strcmp(fsname, "local")) {
@ -938,12 +928,8 @@ c_fstype(OPTION *option, char ***argvp)
break;
}
/*
* We need to make filesystem checks for filesystems
* that exists but aren't in the kernel work.
*/
fprintf(stderr, "Warning: Unknown filesystem type %s\n", fsname);
new->flags |= F_MTUNKNOWN;
new->flags |= F_MTTYPE;
new->c_data = fsname;
return new;
}