diff --git a/DirectVolume.cpp b/DirectVolume.cpp index 7e8ac68..fa3eb9a 100644 --- a/DirectVolume.cpp +++ b/DirectVolume.cpp @@ -220,6 +220,10 @@ void DirectVolume::handlePartitionAdded(const char *devpath, NetlinkEvent *evt) #endif if (getState() != Volume::State_Formatting) { setState(Volume::State_Idle); + if (mRetryMount == true) { + mRetryMount = false; + mountVol(); + } } } else { #ifdef PARTITION_DEBUG diff --git a/Volume.cpp b/Volume.cpp index 685cb35..45db27e 100644 --- a/Volume.cpp +++ b/Volume.cpp @@ -116,6 +116,7 @@ Volume::Volume(VolumeManager *vm, const char *label, const char *mount_point) { mState = Volume::State_Init; mCurrentlyMountedKdev = -1; mPartIdx = -1; + mRetryMount = false; } Volume::~Volume() { @@ -174,6 +175,10 @@ void Volume::setState(int state) { return; } + if ((oldState == Volume::State_Pending) && (state != Volume::State_Idle)) { + mRetryMount = false; + } + mState = state; SLOGD("Volume %s state changing %d (%s) -> %d (%s)", mLabel, @@ -309,6 +314,9 @@ int Volume::mountVol() { return -1; } else if (getState() != Volume::State_Idle) { errno = EBUSY; + if (getState() == Volume::State_Pending) { + mRetryMount = true; + } return -1; } diff --git a/Volume.h b/Volume.h index ad3dcd8..f57ff91 100644 --- a/Volume.h +++ b/Volume.h @@ -52,6 +52,7 @@ protected: VolumeManager *mVm; bool mDebug; int mPartIdx; + bool mRetryMount; /* * The major/minor tuple of the currently mounted filesystem.