diff options
author | George Wilson <george.wilson@delphix.com> | 2014-09-16 12:01:54 -0800 |
---|---|---|
committer | Christopher Siden <chris@delphix.com> | 2014-09-16 13:01:54 -0700 |
commit | 574e2414ac6a50c9d6097c2e4a98eb9263f90c44 (patch) | |
tree | 5d897c86241ad6fbd230380324ce60cabe7e4de5 /usr/src | |
parent | bf3e216c7efa56332b456f4cf19d208e21d63839 (diff) | |
download | illumos-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.c | 6 |
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: |