diff options
author | Chunwei Chen <[email protected]> | 2016-07-06 17:06:17 -0700 |
---|---|---|
committer | Ned Bass <[email protected]> | 2016-09-05 16:07:09 -0700 |
commit | a77cea5f0f1e601d4590130220445afac85547b9 (patch) | |
tree | 25a189d79c58202271a9abf5d5da76a77f18c2e2 /module/zfs | |
parent | db3f5edcf1b7df869a064062359ffde83a0175ec (diff) |
Fix Large kmem_alloc in vdev_metaslab_init
This allocation can go way over 1MB, so we should use vmem_alloc
instead of kmem_alloc.
Large kmem_alloc(1430784, 0x1000), please file an issue...
Call Trace:
[<ffffffffa0324aff>] ? spl_kmem_zalloc+0xef/0x160 [spl]
[<ffffffffa17d0c8d>] ? vdev_metaslab_init+0x9d/0x1f0 [zfs]
[<ffffffffa17d46d0>] ? vdev_load+0xc0/0xd0 [zfs]
[<ffffffffa17d4643>] ? vdev_load+0x33/0xd0 [zfs]
[<ffffffffa17c0004>] ? spa_load+0xfc4/0x1b60 [zfs]
[<ffffffffa17c1838>] ? spa_tryimport+0x98/0x430 [zfs]
[<ffffffffa17f28b1>] ? zfs_ioc_pool_tryimport+0x41/0x80 [zfs]
[<ffffffffa17f5669>] ? zfsdev_ioctl+0x4a9/0x4e0 [zfs]
[<ffffffff811bacdf>] ? do_vfs_ioctl+0x2cf/0x4b0
[<ffffffff811baf41>] ? SyS_ioctl+0x81/0xa0
Signed-off-by: Chunwei Chen <[email protected]>
Signed-off-by: Brian Behlendorf <[email protected]>
Closes #4752
Diffstat (limited to 'module/zfs')
-rw-r--r-- | module/zfs/vdev.c | 6 |
1 files changed, 3 insertions, 3 deletions
diff --git a/module/zfs/vdev.c b/module/zfs/vdev.c index 7aff5455b..dffc621d1 100644 --- a/module/zfs/vdev.c +++ b/module/zfs/vdev.c @@ -877,11 +877,11 @@ vdev_metaslab_init(vdev_t *vd, uint64_t txg) ASSERT(oldc <= newc); - mspp = kmem_zalloc(newc * sizeof (*mspp), KM_SLEEP); + mspp = vmem_zalloc(newc * sizeof (*mspp), KM_SLEEP); if (oldc != 0) { bcopy(vd->vdev_ms, mspp, oldc * sizeof (*mspp)); - kmem_free(vd->vdev_ms, oldc * sizeof (*mspp)); + vmem_free(vd->vdev_ms, oldc * sizeof (*mspp)); } vd->vdev_ms = mspp; @@ -935,7 +935,7 @@ vdev_metaslab_fini(vdev_t *vd) if (msp != NULL) metaslab_fini(msp); } - kmem_free(vd->vdev_ms, count * sizeof (metaslab_t *)); + vmem_free(vd->vdev_ms, count * sizeof (metaslab_t *)); vd->vdev_ms = NULL; } |