X-Git-Url: https://git.camperquake.de/gitweb.cgi?a=blobdiff_plain;f=module%2Fzfs%2Fzio.c;h=ccefaf8ac1cb82eb541bac20c60c1a07dc5d22e3;hb=refs%2Fheads%2Frertzinger%2Ffeature-zpool-get--p;hp=8cf0408501a0b28dbd57d78655530adcbee80ff0;hpb=294f68063b49c06d3118d51016811063e69cf97a;p=zfs.git diff --git a/module/zfs/zio.c b/module/zfs/zio.c index 8cf0408..ccefaf8 100644 --- a/module/zfs/zio.c +++ b/module/zfs/zio.c @@ -79,9 +79,6 @@ kmem_cache_t *zio_data_buf_cache[SPA_MAXBLOCKSIZE >> SPA_MINBLOCKSHIFT]; int zio_bulk_flags = 0; int zio_delay_max = ZIO_DELAY_MAX; -#ifdef _KERNEL -extern vmem_t *zio_alloc_arena; -#endif extern int zfs_mg_alloc_failures; /* @@ -151,9 +148,6 @@ zio_init(void) size_t c; vmem_t *data_alloc_arena = NULL; -#ifdef _KERNEL - data_alloc_arena = zio_alloc_arena; -#endif zio_cache = kmem_cache_create("zio_cache", sizeof (zio_t), 0, zio_cons, zio_dest, NULL, NULL, NULL, KMC_KMEM); zio_link_cache = kmem_cache_create("zio_link_cache", @@ -1248,7 +1242,7 @@ zio_interrupt(zio_t *zio) * vdev-level caching or aggregation; (5) the I/O is deferred * due to vdev-level queueing; (6) the I/O is handed off to * another thread. In all cases, the pipeline stops whenever - * there's no CPU work; it never burns a thread in cv_wait(). + * there's no CPU work; it never burns a thread in cv_wait_io(). * * There's no locking on io_stage because there's no legitimate way * for multiple threads to be attempting to process the same I/O. @@ -1315,12 +1309,14 @@ __zio_execute(zio_t *zio) /* * If we executing in the context of the tx_sync_thread, * or we are performing pool initialization outside of a - * zio_taskq[ZIO_TASKQ_ISSUE] context. Then issue the zio - * async to minimize stack usage for these deep call paths. + * zio_taskq[ZIO_TASKQ_ISSUE|ZIO_TASKQ_ISSUE_HIGH] context. + * Then issue the zio asynchronously to minimize stack usage + * for these deep call paths. */ if ((dp && curthread == dp->dp_tx.tx_sync_thread) || (dp && spa_is_initializing(dp->dp_spa) && - !zio_taskq_member(zio, ZIO_TASKQ_ISSUE))) { + !zio_taskq_member(zio, ZIO_TASKQ_ISSUE) && + !zio_taskq_member(zio, ZIO_TASKQ_ISSUE_HIGH))) { zio_taskq_dispatch(zio, ZIO_TASKQ_ISSUE, cut); return; } @@ -1448,6 +1444,9 @@ zio_suspend(spa_t *spa, zio_t *zio) "failure and the failure mode property for this pool " "is set to panic.", spa_name(spa)); + cmn_err(CE_WARN, "Pool '%s' has encountered an uncorrectable I/O " + "failure and has been suspended.\n", spa_name(spa)); + zfs_ereport_post(FM_EREPORT_ZFS_IO_FAILURE, spa, NULL, NULL, 0, 0); mutex_enter(&spa->spa_suspend_lock);