i have pushed this patch that helped with our problem. https://review.source.android.com/#change,16460, let me know if it helps..
Im not sure what you mean with "no partitions".. you have not partitioned the sdcard? <https://review.source.android.com/#change,16460> 2010/8/12 邱建波 <[email protected]> > hi axelhaslam : > > We have a problem with mount too .That is MMC can't mount auto while it > no partitions. > when SDcard Inserted ,the state changed and stoped with state "Pending" > > Have you had this problem? > > 2010/7/16 axel haslam <[email protected]> > >> We have a problem with froyo in which the MMC does not get >> automatically mounted upon insertion. >> >> This is what i could understand from the code: >> in DirectVolume.cpp on the function handleDiskAdded, if the number of >> partitions is not 0, the volume state gets set to "State_Pending" , >> and the VolumeDiskInserted broadcast is sent.This triggers the onEvent >> method on MountService, which starts a new thread that sends the >> command "volume mount" >> >> the "volume mount" command, gets handled in Volume.cpp function >> mountVol() which checks if the state is "State_Idle" if not, returns >> BUSY, which in turn gets translated to code 405 "OpFailedStorageBusy" >> which is what we see on MountService. This happens because we have >> just set the state to "State_Pending". >> >> If we force "State_Idle" on handleDiskAdded, instead of going into >> state_Pending, it fixes our problem. >> >> A possible fix for this is setting a flag in the onEvent method on >> MountService when the disk is inserted, and starting the thread that >> sends the mount command when we receive the state-change to idle, and >> the >> flag is set. >> >> In short, we should try to mount when the state has changed to idle, >> and >> not on insertion. >> >> Here is the patch for this: >> >> index 6ceeb95..0adaf19 >> --- a/services/java/com/android/server/MountService.java >> +++ b/services/java/com/android/server/MountService.java >> @@ -136,6 +136,8 @@ class MountService extends IMountService.Stub >> private static final int RETRY_UNMOUNT_DELAY = 30; // in ms >> private static final int MAX_UNMOUNT_RETRIES = 4; >> >> + /*used to send the mount command after state is idle.*/ >> + boolean insertionMountPending = false; >> class UnmountCallBack { >> String path; >> int retries; >> @@ -495,6 +497,26 @@ class MountService extends IMountService.Stub >> * Format: "NNN Volume <label> <path> state changed >> * from <old_#> (<old_str>) to <new_#> (<new_str>)" >> */ >> + if ((Integer.parseInt(cooked[10]) == VolumeState.Idle) && >> + insertionMountPending == true) { >> + /* If the state moves to idle after a insertion >> + * try to mount the device "Insertion mount" >> + */ >> + final String path = cooked[3]; >> + insertionMountPending = false; >> + new Thread() { >> + public void run() { >> + try { >> + int rc; >> + if ((rc = doMountVolume(path)) != >> StorageResultCode.OperationSucceeded) { >> + Slog.w(TAG, String.format("Insertion >> mount failed (%d)", rc)); >> + } >> + } catch (Exception ex) { >> + Slog.w(TAG, "Failed to mount media on >> insertion", ex); >> + } >> + } >> + }.start(); >> + } >> notifyVolumeStateChange( >> cooked[2], cooked[3], >> Integer.parseInt(cooked[7]), >> Integer.parseInt(cooked[10])); >> @@ -526,18 +548,11 @@ class MountService extends IMountService.Stub >> } >> >> if (code == VoldResponseCode.VolumeDiskInserted) { >> - new Thread() { >> - public void run() { >> - try { >> - int rc; >> - if ((rc = doMountVolume(path)) != >> StorageResultCode.OperationSucceeded) { >> - Slog.w(TAG, String.format("Insertion >> mount failed (%d)", rc)); >> - } >> - } catch (Exception ex) { >> - Slog.w(TAG, "Failed to mount media on >> insertion", ex); >> - } >> - } >> - }.start(); >> + /* Instead of tring to mount here, wait for >> + * the state to be Idle before atempting the >> + * insertion mount, else "insertion mount" may fail. >> + */ >> + insertionMountPending = true; >> } else if (code == VoldResponseCode.VolumeDiskRemoved) { >> /* >> * This event gets trumped if we're already in >> BAD_REMOVAL state >> >> -- >> >> unsubscribe: >> [email protected]<android-porting%[email protected]> >> website: http://groups.google.com/group/android-porting >> > > > > -- > ------ > > Jianbo Qiu (邱建波) > > Mobile: 13681184653 > > MSN:[email protected] <msn%[email protected]> > > ------ > -- unsubscribe: [email protected] website: http://groups.google.com/group/android-porting
