Add back "unmountable" volume state.
Also automatically unmount when format is requested.
Bug: 19993667
Change-Id: I2c81b7ccc9d69df61d7ae4df1e8224c02f260044
diff --git a/VolumeBase.cpp b/VolumeBase.cpp
index 292a4cd..2590ecf 100644
--- a/VolumeBase.cpp
+++ b/VolumeBase.cpp
@@ -145,8 +145,8 @@
}
status_t VolumeBase::mount() {
- if (mState != State::kUnmounted) {
- LOG(WARNING) << getId() << " mount requires state unmounted";
+ if ((mState != State::kUnmounted) && (mState != State::kUnmountable)) {
+ LOG(WARNING) << getId() << " mount requires state unmounted or unmountable";
return -EBUSY;
}
@@ -155,7 +155,7 @@
if (res == OK) {
setState(State::kMounted);
} else {
- setState(State::kUnmounted);
+ setState(State::kUnmountable);
}
return res;
@@ -183,8 +183,12 @@
}
status_t VolumeBase::format() {
- if (mState != State::kUnmounted) {
- LOG(WARNING) << getId() << " format requires state unmounted";
+ if (mState == State::kMounted) {
+ unmount();
+ }
+
+ if ((mState != State::kUnmounted) && (mState != State::kUnmountable)) {
+ LOG(WARNING) << getId() << " format requires state unmounted or unmountable";
return -EBUSY;
}
diff --git a/VolumeBase.h b/VolumeBase.h
index e3d91ff..465fc61 100644
--- a/VolumeBase.h
+++ b/VolumeBase.h
@@ -63,11 +63,18 @@
};
enum class State {
+ /* Next states: mounting, formatting */
kUnmounted = 0,
+ /* Next states: mounted, unmountable */
kMounting,
+ /* Next states: unmounting */
kMounted,
+ /* Next states: unmounted */
kFormatting,
+ /* Next states: unmounted */
kUnmounting,
+ /* Next states: mounting, formatting */
+ kUnmountable,
};
const std::string& getId() { return mId; }