Pawel Jakub Dawidek <p...@freebsd.org> wrote: > Author: pjd > Date: Tue Aug 31 10:41:53 2010 > New Revision: 212050 > URL: http://svn.freebsd.org/changeset/base/212050 > > Log: > When upgrading a pool which contain root file system, give user a hint that > he should update boot code. > > MFC after: 2 weeks > > Modified: > head/cddl/contrib/opensolaris/cmd/zpool/zpool_main.c > > Modified: head/cddl/contrib/opensolaris/cmd/zpool/zpool_main.c > ============================================================================== > --- head/cddl/contrib/opensolaris/cmd/zpool/zpool_main.c Tue Aug 31 > 09:38:43 2010 (r212049) > +++ head/cddl/contrib/opensolaris/cmd/zpool/zpool_main.c Tue Aug 31 > 10:41:53 2010 (r212050) > @@ -3333,12 +3333,39 @@ typedef struct upgrade_cbdata { > int cb_all; > int cb_first; > int cb_newer; > + char cb_poolname[ZPOOL_MAXNAMELEN]; > int cb_argc; > uint64_t cb_version; > char **cb_argv; > } upgrade_cbdata_t; > > static int > +is_root_pool(zpool_handle_t *zhp) > +{ > + static struct statfs sfs; > + static char *poolname = NULL; > + static boolean_t stated = B_FALSE;
Why are those variables static? They all seem to be (re)initialized before first-use in the function. > + char *slash; > + > + while (!stated) { > + stated = B_TRUE; > + if (statfs("/", &sfs) == -1) { > + (void) fprintf(stderr, > + "Unable to stat root file system: %s.\n", > + strerror(errno)); > + break; > + } > + if (strcmp(sfs.f_fstypename, "zfs") != 0) > + break; > + poolname = sfs.f_mntfromname; > + if ((slash = strchr(poolname, '/')) != NULL) > + *slash = '\0'; > + break; > + } > + return (poolname != NULL && strcmp(poolname, zpool_get_name(zhp)) == 0); > +} This while "loop" doesn't seem to loop at all, is this intended? Fabian
signature.asc
Description: PGP signature