1317 freeze_txg = spa_last_synced_txg(spa) + TXG_SIZE;
1318 spa->spa_freeze_txg = freeze_txg;
1319 }
1320 spa_config_exit(spa, SCL_ALL, FTAG);
1321 if (freeze_txg != 0)
1322 txg_wait_synced(spa_get_dsl(spa), freeze_txg);
1323 }
1324
1325 void
1326 zfs_panic_recover(const char *fmt, ...)
1327 {
1328 va_list adx;
1329
1330 va_start(adx, fmt);
1331 vcmn_err(zfs_recover ? CE_WARN : CE_PANIC, fmt, adx);
1332 va_end(adx);
1333 }
1334
1335 /*
1336 * This is a stripped-down version of strtoull, suitable only for converting
1337 * lowercase hexidecimal numbers that don't overflow.
1338 */
1339 uint64_t
1340 strtonum(const char *str, char **nptr)
1341 {
1342 uint64_t val = 0;
1343 char c;
1344 int digit;
1345
1346 while ((c = *str) != '\0') {
1347 if (c >= '0' && c <= '9')
1348 digit = c - '0';
1349 else if (c >= 'a' && c <= 'f')
1350 digit = 10 + c - 'a';
1351 else
1352 break;
1353
1354 val *= 16;
1355 val += digit;
1356
1357 str++;
|
1317 freeze_txg = spa_last_synced_txg(spa) + TXG_SIZE;
1318 spa->spa_freeze_txg = freeze_txg;
1319 }
1320 spa_config_exit(spa, SCL_ALL, FTAG);
1321 if (freeze_txg != 0)
1322 txg_wait_synced(spa_get_dsl(spa), freeze_txg);
1323 }
1324
1325 void
1326 zfs_panic_recover(const char *fmt, ...)
1327 {
1328 va_list adx;
1329
1330 va_start(adx, fmt);
1331 vcmn_err(zfs_recover ? CE_WARN : CE_PANIC, fmt, adx);
1332 va_end(adx);
1333 }
1334
1335 /*
1336 * This is a stripped-down version of strtoull, suitable only for converting
1337 * lowercase hexadecimal numbers that don't overflow.
1338 */
1339 uint64_t
1340 strtonum(const char *str, char **nptr)
1341 {
1342 uint64_t val = 0;
1343 char c;
1344 int digit;
1345
1346 while ((c = *str) != '\0') {
1347 if (c >= '0' && c <= '9')
1348 digit = c - '0';
1349 else if (c >= 'a' && c <= 'f')
1350 digit = 10 + c - 'a';
1351 else
1352 break;
1353
1354 val *= 16;
1355 val += digit;
1356
1357 str++;
|