X-Git-Url: https://git.camperquake.de/gitweb.cgi?a=blobdiff_plain;f=module%2Fzfs%2Fvdev_disk.c;h=2869716155f634fa41a02dd0a9851976fb0b0efb;hb=refs%2Fheads%2Frertzinger%2Ffeature-zpool-get--p;hp=4e38c7860da85a29b14d24acc1533b5b983fb2e1;hpb=0d8103d9561bd2314da320dd5d43f9d5e044b64d;p=zfs.git diff --git a/module/zfs/vdev_disk.c b/module/zfs/vdev_disk.c index 4e38c78..2869716 100644 --- a/module/zfs/vdev_disk.c +++ b/module/zfs/vdev_disk.c @@ -34,6 +34,7 @@ #include char *zfs_vdev_scheduler = VDEV_SCHEDULER; +static void *zfs_vdev_holder = VDEV_HOLDER; /* * Virtual device vector for disks. @@ -203,7 +204,7 @@ vdev_disk_rrpart(const char *path, int mode, vdev_disk_t *vd) struct gendisk *disk; int error, partno; - bdev = vdev_bdev_open(path, vdev_bdev_mode(mode), vd); + bdev = vdev_bdev_open(path, vdev_bdev_mode(mode), zfs_vdev_holder); if (IS_ERR(bdev)) return bdev; @@ -267,13 +268,13 @@ vdev_disk_open(vdev_t *v, uint64_t *psize, uint64_t *max_psize, * Devices are always opened by the path provided at configuration * time. This means that if the provided path is a udev by-id path * then drives may be recabled without an issue. If the provided - * path is a udev by-path path then the physical location information + * path is a udev by-path path, then the physical location information * will be preserved. This can be critical for more complicated * configurations where drives are located in specific physical * locations to maximize the systems tolerence to component failure. - * Alternately you can provide your own udev rule to flexibly map + * Alternatively, you can provide your own udev rule to flexibly map * the drives as you see fit. It is not advised that you use the - * /dev/[hd]d devices which may be reorder due to probing order. + * /dev/[hd]d devices which may be reordered due to probing order. * Devices in the wrong locations will be detected by the higher * level vdev validation. */ @@ -281,7 +282,8 @@ vdev_disk_open(vdev_t *v, uint64_t *psize, uint64_t *max_psize, if (v->vdev_wholedisk && v->vdev_expanding) bdev = vdev_disk_rrpart(v->vdev_path, mode, vd); if (IS_ERR(bdev)) - bdev = vdev_bdev_open(v->vdev_path, vdev_bdev_mode(mode), vd); + bdev = vdev_bdev_open(v->vdev_path, + vdev_bdev_mode(mode), zfs_vdev_holder); if (IS_ERR(bdev)) { kmem_free(vd, sizeof(vdev_disk_t)); return -PTR_ERR(bdev); @@ -294,20 +296,6 @@ skip_open: /* Determine the physical block size */ block_size = vdev_bdev_block_size(vd->vd_bdev); - /* We think the wholedisk property should always be set when this - * function is called. ASSERT here so if any legitimate cases exist - * where it's not set, we'll find them during debugging. If we never - * hit the ASSERT, this and the following conditional statement can be - * removed. */ - ASSERT3S(v->vdev_wholedisk, !=, -1ULL); - - /* The wholedisk property was initialized to -1 in vdev_alloc() if it - * was unspecified. In that case, check if this is a whole device. - * When bdev->bd_contains == bdev we have a whole device and not simply - * a partition. */ - if (v->vdev_wholedisk == -1ULL) - v->vdev_wholedisk = (bdev->bd_contains == bdev); - /* Clear the nowritecache bit, causes vdev_reopen() to try again. */ v->vdev_nowritecache = B_FALSE; @@ -419,8 +407,7 @@ vdev_disk_dio_put(dio_request_t *dr) vdev_disk_dio_free(dr); if (zio) { - zio->io_delay = jiffies_to_msecs( - jiffies_64 - zio->io_delay); + zio->io_delay = jiffies_64 - zio->io_delay; zio->io_error = error; ASSERT3S(zio->io_error, >=, 0); if (zio->io_error) @@ -621,7 +608,7 @@ BIO_END_IO_PROTO(vdev_disk_io_flush_completion, bio, size, rc) { zio_t *zio = bio->bi_private; - zio->io_delay = jiffies_to_msecs(jiffies_64 - zio->io_delay); + zio->io_delay = jiffies_64 - zio->io_delay; zio->io_error = -rc; if (rc && (rc == -EOPNOTSUPP)) zio->io_vd->vdev_nowritecache = B_TRUE; @@ -645,7 +632,7 @@ vdev_disk_io_flush(struct block_device *bdev, zio_t *zio) if (!q) return ENXIO; - bio = bio_alloc(GFP_KERNEL, 0); + bio = bio_alloc(GFP_NOIO, 0); if (!bio) return ENOMEM; @@ -797,7 +784,7 @@ vdev_disk_read_rootlabel(char *devpath, char *devid, nvlist_t **config) uint64_t s, size; int i; - bdev = vdev_bdev_open(devpath, vdev_bdev_mode(FREAD), NULL); + bdev = vdev_bdev_open(devpath, vdev_bdev_mode(FREAD), zfs_vdev_holder); if (IS_ERR(bdev)) return -PTR_ERR(bdev);