Merge changes I00a897dd,I802e1c04
* changes:
Remove appfuse mount point directory after unmounting.
Use MNT_DETACH when unmounting appfuse mount.
diff --git a/CommandListener.cpp b/CommandListener.cpp
index a312af2..e80bdce 100644
--- a/CommandListener.cpp
+++ b/CommandListener.cpp
@@ -749,7 +749,17 @@
if (command == "mount") {
_exit(mountInNamespace(uid, device_fd, path));
} else if (command == "unmount") {
- android::vold::ForceUnmount(path);
+ // If it's just after all FD opened on mount point are closed, umount2 can fail with
+ // EBUSY. To avoid the case, specify MNT_DETACH.
+ if (umount2(path.c_str(), UMOUNT_NOFOLLOW | MNT_DETACH) != 0 &&
+ errno != EINVAL && errno != ENOENT) {
+ PLOG(ERROR) << "Failed to unmount directory.";
+ _exit(-errno);
+ }
+ if (rmdir(path.c_str()) != 0) {
+ PLOG(ERROR) << "Failed to remove the mount directory.";
+ _exit(-errno);
+ }
_exit(android::OK);
} else {
LOG(ERROR) << "Unknown appfuse command " << command;