}
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;
}
if (res == OK) {
setState(State::kMounted);
} else {
- setState(State::kUnmounted);
+ setState(State::kUnmountable);
}
return res;
}
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;
}
};
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; }