On Wed, 5 Aug 2015 09:46:41 -0400 Dan Streetman <ddstreet@xxxxxxxx> wrote: > Add zpool_has_pool() function, indicating if the specified type of zpool > is available (i.e. zsmalloc or zbud). This allows checking if a pool is > available, without actually trying to allocate it, similar to > crypto_has_alg(). > > This is used by a following patch to zswap that enables the dynamic > runtime creation of zswap zpools. > > ... > > /** > + * zpool_has_pool() - Check if the pool driver is available > + * @type The type of the zpool to check (e.g. zbud, zsmalloc) > + * > + * This checks if the @type pool driver is available. > + * > + * Returns: true if @type pool is available, false if not > + */ > +bool zpool_has_pool(char *type) > +{ > + struct zpool_driver *driver = zpool_get_driver(type); > + > + if (!driver) { > + request_module("zpool-%s", type); > + driver = zpool_get_driver(type); > + } > + > + if (!driver) > + return false; > + > + zpool_put_driver(driver); > + return true; > +} This looks racy: after that zpool_put_driver() has completed, an rmmod will invalidate zpool_has_pool()'s return value. If there's some reason why this can't happen, can we please have a code comment which reveals that reason? -- To unsubscribe, send a message with 'unsubscribe linux-mm' in the body to majordomo@xxxxxxxxx. For more info on Linux MM, see: http://www.linux-mm.org/ . Don't email: <a href=mailto:"dont@xxxxxxxxx"> email@xxxxxxxxx </a>