diff options
-rw-r--r-- | Volume.cpp | 5 | ||||
-rw-r--r-- | Volume.h | 4 | ||||
-rw-r--r-- | VolumeManager.cpp | 20 | ||||
-rw-r--r-- | VolumeManager.h | 1 |
4 files changed, 17 insertions, 13 deletions
@@ -123,6 +123,7 @@ Volume::Volume(VolumeManager *vm, const char *label, const char *mount_point) { mCurrentlyMountedKdev = -1; mPartIdx = -1; mRetryMount = false; + mLunNumber = -1; property_get("persist.sys.vold.switchexternal", switchable, "0"); if (!strcmp(switchable,"1")) { @@ -200,6 +201,10 @@ bool Volume::isPrimaryStorage() { return !strcmp(getMountpoint(), externalStorage); } +void Volume::setLunNumber(int lunNumber) { + mLunNumber = lunNumber; +} + void Volume::setState(int state) { char msg[255]; int oldState = mState; @@ -55,6 +55,7 @@ protected: int mPartIdx; int mOrigPartIdx; bool mRetryMount; + int mLunNumber; /* * The major/minor tuple of the currently mounted filesystem. @@ -74,6 +75,9 @@ public: int getState() { return mState; } bool isPrimaryStorage(); + int getLunNumber() { return mLunNumber; } + void setLunNumber(int lunNumber); + virtual int handleBlockEvent(NetlinkEvent *evt); virtual dev_t getDiskDevice(); virtual dev_t getShareDevice(); diff --git a/VolumeManager.cpp b/VolumeManager.cpp index ca30357..040e95c 100644 --- a/VolumeManager.cpp +++ b/VolumeManager.cpp @@ -66,6 +66,7 @@ VolumeManager::VolumeManager() { mUmsSharingCount = 0; mSavedDirtyRatio = -1; mVolManagerDisabled = 0; + mNextLunNumber = 0; // set dirty ratio to ro.vold.umsdirtyratio (default 0) when UMS is active char dirtyratio[PROPERTY_VALUE_MAX]; @@ -127,6 +128,7 @@ int VolumeManager::stop() { } int VolumeManager::addVolume(Volume *v) { + v->setLunNumber(mNextLunNumber++); mVolumes->push_back(v); return 0; } @@ -1269,12 +1271,8 @@ int VolumeManager::shareVolume(const char *label, const char *method) { sizeof(nodepath), "/dev/block/vold/%d:%d", MAJOR(d), MINOR(d)); - // TODO: Currently only two mounts are supported, defaulting - // /mnt/sdcard to lun0 and anything else to lun1. Fix this. - if (v->isPrimaryStorage()) { - lun_number = 0; - } else { - lun_number = SECOND_LUN_NUM; + if ((lun_number = v->getLunNumber()) == -1) { + return -1; } if ((fd = openLun(lun_number)) < 0) { @@ -1325,14 +1323,10 @@ int VolumeManager::unshareVolume(const char *label, const char *method) { return -1; } - int fd; - int lun_number; + int fd, lun_number; - // /mnt/sdcard to lun0 and anything else to lun1. Fix this. - if (v->isPrimaryStorage()) { - lun_number = 0; - } else { - lun_number = SECOND_LUN_NUM; + if ((lun_number = v->getLunNumber()) == -1) { + return -1; } if ((fd = openLun(lun_number)) < 0) { diff --git a/VolumeManager.h b/VolumeManager.h index e51fb70..334b81b 100644 --- a/VolumeManager.h +++ b/VolumeManager.h @@ -74,6 +74,7 @@ private: int mSavedDirtyRatio; int mUmsDirtyRatio; int mVolManagerDisabled; + int mNextLunNumber; public: virtual ~VolumeManager(); |