if ((dev = name_to_dev(TRUE /*allow_mountpt*/, fullpath)) == NO_DEV)
return(err_code);
- if ((r = unmount(dev, label)) != OK) return(r);
+ if ((r = unmount(dev, label)) != OK) { verbose2=0; verbose_e = NONE; return(r); }
+ verbose2 = 0;
+ verbose_e = NONE;
/* Return the label of the mounted file system, so that the caller
* can shut down the corresponding server process.
/* Did we find the vmnt (i.e., was dev a mounted device)? */
if(!vmp) return(EINVAL);
- lock_bsf();
-
- if ((r = lock_vmnt(vmp, VMNT_EXCL)) != OK) {
- unlock_bsf();
- return(r);
- }
+ verbose2=1;
+ verbose_e = vmp->m_fs_e;
+ if ((r = lock_vmnt(vmp, VMNT_EXCL)) != OK) return(r);
/* See if the mounted device is busy. Only 1 vnode using it should be
* open -- the root vnode -- and that inode only 1 time. */
if (count > 1 || locks > 1) {
unlock_vmnt(vmp);
- unlock_bsf();
return(EBUSY); /* can't umount a busy file system */
}
vmp->m_dev = NO_DEV;
vmp->m_fs_e = NONE;
+ unlock_vmnt(vmp);
+
/* The root FS will handle block I/O requests for this device now. */
+ lock_bsf();
update_bspec(dev, ROOT_FS_E, 1 /* send new driver endpoint */);
-
- unlock_vmnt(vmp);
unlock_bsf();
+
return(OK);
}