Print this page
7938 Port ZOL #3712 disable LBA weighting on files and SSDs

*** 21,30 **** --- 21,31 ---- /* * Copyright (c) 2005, 2010, Oracle and/or its affiliates. All rights reserved. * Copyright (c) 2012, 2015 by Delphix. All rights reserved. * Copyright 2016 Nexenta Systems, Inc. All rights reserved. * Copyright (c) 2013 Joyent, Inc. All rights reserved. + * Copyright (c) 2017 James S Blachly, MD <james.blachly@gmail.com> */ #include <sys/zfs_context.h> #include <sys/spa_impl.h> #include <sys/refcount.h>
*** 269,278 **** --- 270,281 ---- dev_t dev; int otyp; boolean_t validate_devid = B_FALSE; ddi_devid_t devid; uint64_t capacity = 0, blksz = 0, pbsize; + int device_solid_state; + char *vendorp; /* will point to inquiry-vendor-id */ /* * We must have a pathname, and it must be absolute. */ if (vd->vdev_path == NULL || vd->vdev_path[0] != '/') {
*** 541,550 **** --- 544,575 ---- (void) ldi_ioctl(dvd->vd_lh, DKIOCSETWCE, (intptr_t)&wce, FKIOCTL, kcred, NULL); } /* + * Inform the ZIO pipeline if we are non-rotational: + * 1. Check if device is SSD + * 2. If not SSD, check if device is Virtio + */ + device_solid_state = ldi_prop_get_int(dvd->vd_lh, LDI_DEV_T_ANY, + "device-solid-state", 0); + vd->vdev_nonrot = (device_solid_state ? B_TRUE : B_FALSE); + + if (device_solid_state == 0 && + ldi_prop_exists(dvd->vd_lh, LDI_DEV_T_ANY, "inquiry-vendor-id")) { + ldi_prop_lookup_string(dvd->vd_lh, LDI_DEV_T_ANY, + "inquiry-vendor-id", &vendorp); + if (strncmp(vendorp, "Virtio", 6) == 0) + vd->vdev_nonrot = B_TRUE; + ddi_prop_free(vendorp); + } + + cmn_err(CE_NOTE, "[vdev_disk_open] %s :: device-solid-state " + "== %d :: vd->vdev_nonrot == %d\n", vd->vdev_path, + device_solid_state, (int) vd->vdev_nonrot); + + /* * Clear the nowritecache bit, so that on a vdev_reopen() we will * try again. */ vd->vdev_nowritecache = B_FALSE;