DF-4478 / fix.diff
--- a/sys/dev/raid/vinum/vinumioctl.c +++ b/sys/dev/raid/vinum/vinumioctl.c @@ -226,7 +226,10 @@ } case VINUM_SETSTATE: - setstate((struct vinum_ioctl_msg *) data); /* set an object state */ + if ((error = lock_config()) == 0) { /* DF-4478 */ + setstate((struct vinum_ioctl_msg *) data); /* set an object state */ + unlock_config(); + } break; /* @@ -234,7 +237,10 @@ * anything else. */ case VINUM_SETSTATE_FORCE: - setstate_by_force((struct vinum_ioctl_msg *) data); /* set an object state */ + if ((error = lock_config()) == 0) { /* DF-4478 */ + setstate_by_force((struct vinum_ioctl_msg *) data); + unlock_config(); + } break; #ifdef VINUMDEBUG @@ -270,17 +276,26 @@ break; case VINUM_RESETSTATS: - resetstats((struct vinum_ioctl_msg *) data); /* reset object stats */ + if ((error = lock_config()) == 0) { /* DF-4478 */ + resetstats((struct vinum_ioctl_msg *) data); + unlock_config(); + } /* reset object stats */ break; /* attach an object to a superordinate object */ case VINUM_ATTACH: - attachobject((struct vinum_ioctl_msg *) data); + if ((error = lock_config()) == 0) { /* DF-4478 */ + attachobject((struct vinum_ioctl_msg *) data); + unlock_config(); + } break; /* detach an object from a superordinate object */ case VINUM_DETACH: - detachobject((struct vinum_ioctl_msg *) data); + if ((error = lock_config()) == 0) { /* DF-4478 */ + detachobject((struct vinum_ioctl_msg *) data); + unlock_config(); + } break; /* rename an object */ |