Illumos #2703: add mechanism to report ZFS send progress
[zfs.git] / module / zfs / vdev_disk.c
index eee03d0..ffb2980 100644 (file)
@@ -224,7 +224,8 @@ vdev_disk_rrpart(const char *path, int mode, vdev_disk_t *vd)
 }
 
 static int
-vdev_disk_open(vdev_t *v, uint64_t *psize, uint64_t *ashift)
+vdev_disk_open(vdev_t *v, uint64_t *psize, uint64_t *max_psize,
+    uint64_t *ashift)
 {
        struct block_device *bdev = ERR_PTR(-ENXIO);
        vdev_disk_t *vd;
@@ -236,7 +237,7 @@ vdev_disk_open(vdev_t *v, uint64_t *psize, uint64_t *ashift)
                return EINVAL;
        }
 
-       vd = kmem_zalloc(sizeof(vdev_disk_t), KM_SLEEP);
+       vd = kmem_zalloc(sizeof(vdev_disk_t), KM_PUSHPAGE);
        if (vd == NULL)
                return ENOMEM;
 
@@ -288,6 +289,9 @@ vdev_disk_open(vdev_t *v, uint64_t *psize, uint64_t *ashift)
        /* Physical volume size in bytes */
        *psize = bdev_capacity(bdev);
 
+       /* TODO: report possible expansion size */
+       *max_psize = *psize;
+
        /* Based on the minimum sector size set the block size */
        *ashift = highbit(MAX(block_size, SPA_MINBLOCKSIZE)) - 1;
 
@@ -320,7 +324,7 @@ vdev_disk_dio_alloc(int bio_count)
        int i;
 
        dr = kmem_zalloc(sizeof(dio_request_t) +
-                        sizeof(struct bio *) * bio_count, KM_SLEEP);
+                        sizeof(struct bio *) * bio_count, KM_PUSHPAGE);
        if (dr) {
                init_completion(&dr->dr_comp);
                atomic_set(&dr->dr_ref, 0);
@@ -789,7 +793,7 @@ vdev_disk_read_rootlabel(char *devpath, char *devid, nvlist_t **config)
        }
 
        size = P2ALIGN_TYPED(s, sizeof(vdev_label_t), uint64_t);
-       label = vmem_alloc(sizeof(vdev_label_t), KM_SLEEP);
+       label = vmem_alloc(sizeof(vdev_label_t), KM_PUSHPAGE);
 
        for (i = 0; i < VDEV_LABELS; i++) {
                uint64_t offset, state, txg = 0;