summaryrefslogtreecommitdiff
path: root/usr/src
diff options
context:
space:
mode:
authorGeorge Wilson <george.wilson@delphix.com>2014-09-16 12:01:54 -0800
committerChristopher Siden <chris@delphix.com>2014-09-16 13:01:54 -0700
commit574e2414ac6a50c9d6097c2e4a98eb9263f90c44 (patch)
tree5d897c86241ad6fbd230380324ce60cabe7e4de5 /usr/src
parentbf3e216c7efa56332b456f4cf19d208e21d63839 (diff)
downloadillumos-gate-574e2414ac6a50c9d6097c2e4a98eb9263f90c44.tar.gz
5148 zvol's DKIOCFREE holds zfsdev_state_lock too long
Reviewed by: Matthew Ahrens <mahrens@delphix.com> Reviewed by: Paul Dagnelie <paul.dagnelie@delphix.com> Reviewed by: Sebastien Roy <sebastien.roy@delphix.com> Reviewed by: Josef 'Jeff' Sipek <jeffpc@josefsipek.net> Reviewed by: Dan McDonald <danmcd@omniti.com> Approved by: Richard Lowe <richlowe@richlowe.net>
Diffstat (limited to 'usr/src')
-rw-r--r--usr/src/uts/common/fs/zfs/zvol.c6
1 files changed, 3 insertions, 3 deletions
diff --git a/usr/src/uts/common/fs/zfs/zvol.c b/usr/src/uts/common/fs/zfs/zvol.c
index 5b511ffa02..d9a69470f9 100644
--- a/usr/src/uts/common/fs/zfs/zvol.c
+++ b/usr/src/uts/common/fs/zfs/zvol.c
@@ -1781,8 +1781,8 @@ zvol_ioctl(dev_t dev, int cmd, intptr_t arg, int flag, cred_t *cr, int *rvalp)
*/
if (df.df_start >= zv->zv_volsize)
break; /* No need to do anything... */
- if (df.df_start + df.df_length > zv->zv_volsize)
- df.df_length = DMU_OBJECT_END;
+
+ mutex_exit(&zfsdev_state_lock);
rl = zfs_range_lock(&zv->zv_znode, df.df_start, df.df_length,
RL_WRITER);
@@ -1821,7 +1821,7 @@ zvol_ioctl(dev_t dev, int cmd, intptr_t arg, int flag, cred_t *cr, int *rvalp)
dmu_objset_pool(zv->zv_objset), 0);
}
}
- break;
+ return (error);
}
default: