diff options
Diffstat (limited to 'sys/geom/geom_dev.c')
-rw-r--r-- | sys/geom/geom_dev.c | 9 |
1 files changed, 8 insertions, 1 deletions
diff --git a/sys/geom/geom_dev.c b/sys/geom/geom_dev.c index d74b92e..0f8cfcc 100644 --- a/sys/geom/geom_dev.c +++ b/sys/geom/geom_dev.c @@ -458,7 +458,7 @@ g_dev_ioctl(struct cdev *dev, u_long cmd, caddr_t data, int fflag, struct thread { struct g_consumer *cp; struct g_provider *pp; - off_t offset, length, chunk; + off_t offset, length, chunk, odd; int i, error; cp = dev->si_drv2; @@ -518,6 +518,13 @@ g_dev_ioctl(struct cdev *dev, u_long cmd, caddr_t data, int fflag, struct thread g_dev_del_max_sectors * cp->provider->sectorsize) { chunk = g_dev_del_max_sectors * cp->provider->sectorsize; + if (cp->provider->stripesize > 0) { + odd = (offset + chunk + + cp->provider->stripeoffset) % + cp->provider->stripesize; + if (chunk > odd) + chunk -= odd; + } } error = g_delete_data(cp, offset, chunk); length -= chunk; |