diff --git a/DirectVolume.cpp b/DirectVolume.cpp index 02c83d1..0960724 100644 --- a/DirectVolume.cpp +++ b/DirectVolume.cpp @@ -65,6 +65,14 @@ dev_t DirectVolume::getDiskDevice() { return MKDEV(mDiskMajor, mDiskMinor); } +dev_t DirectVolume::getShareDevice() { + if (mPartIdx != -1) { + return MKDEV(mDiskMajor, mPartIdx); + } else { + return MKDEV(mDiskMajor, mDiskMinor); + } +} + void DirectVolume::handleVolumeShared() { setState(Volume::State_Shared); } diff --git a/DirectVolume.h b/DirectVolume.h index 2a78236..bf50891 100644 --- a/DirectVolume.h +++ b/DirectVolume.h @@ -45,6 +45,7 @@ public: int handleBlockEvent(NetlinkEvent *evt); dev_t getDiskDevice(); + dev_t getShareDevice(); void handleVolumeShared(); void handleVolumeUnshared(); diff --git a/Volume.cpp b/Volume.cpp index 190b64b..1577ba9 100644 --- a/Volume.cpp +++ b/Volume.cpp @@ -144,6 +144,10 @@ dev_t Volume::getDiskDevice() { return MKDEV(0, 0); }; +dev_t Volume::getShareDevice() { + return getDiskDevice(); +} + void Volume::handleVolumeShared() { } @@ -220,7 +224,9 @@ int Volume::formatVol() { if (initializeMbr(devicePath)) { SLOGE("Failed to initialize MBR (%s)", strerror(errno)); - goto err; +// goto err; +// don't treat this as a fatal error +// lets continue on and format the partition } sprintf(devicePath, "/dev/block/vold/%d:%d", diff --git a/Volume.h b/Volume.h index 383c2e4..f81afff 100644 --- a/Volume.h +++ b/Volume.h @@ -71,6 +71,7 @@ public: virtual int handleBlockEvent(NetlinkEvent *evt); virtual dev_t getDiskDevice(); + virtual dev_t getShareDevice(); virtual void handleVolumeShared(); virtual void handleVolumeUnshared(); diff --git a/VolumeManager.cpp b/VolumeManager.cpp index 1466cb6..b53e7b1 100644 --- a/VolumeManager.cpp +++ b/VolumeManager.cpp @@ -1036,7 +1036,7 @@ int VolumeManager::shareVolume(const char *label, const char *method) { return -1; } - dev_t d = v->getDiskDevice(); + dev_t d = v->getShareDevice(); if ((MAJOR(d) == 0) && (MINOR(d) == 0)) { // This volume does not support raw disk access errno = EINVAL;