diff --git a/DirectVolume.cpp b/DirectVolume.cpp
index 6af4ccb..fd99f0c 100644
--- a/DirectVolume.cpp
+++ b/DirectVolume.cpp
@@ -124,11 +124,8 @@
 }
 
 void DirectVolume::handleDiskAdded(const char *devpath, NetlinkEvent *evt) {
-    int major, minor;
-    if (!getMajorMinorNum(evt, &major, &minor)) {
-        LOGE("Could not determine major:minor in handleDiskAdded");
-        return;
-    }
+    mDiskMajor = atoi(evt->findParam("MAJOR"));
+    mDiskMinor = atoi(evt->findParam("MINOR"));
 
     const char *tmp = evt->findParam("NPARTS");
     if (tmp) {
@@ -167,11 +164,8 @@
 }
 
 void DirectVolume::handlePartitionAdded(const char *devpath, NetlinkEvent *evt) {
-    int major, minor;
-    if (!getMajorMinorNum(evt, &major, &minor)) {
-        LOGE("Could not determine major:minor in handlePartitionAdded");
-        return;
-    }
+    int major = atoi(evt->findParam("MAJOR"));
+    int minor = atoi(evt->findParam("MINOR"));
 
     int part_num;
 
@@ -213,11 +207,8 @@
 }
 
 void DirectVolume::handleDiskChanged(const char *devpath, NetlinkEvent *evt) {
-    int major, minor;
-    if (!getMajorMinorNum(evt, &major, &minor)) {
-        LOGE("Could not determine major:minor in handleDiskChanged");
-        return;
-    }
+    int major = atoi(evt->findParam("MAJOR"));
+    int minor = atoi(evt->findParam("MINOR"));
 
     if ((major != mDiskMajor) || (minor != mDiskMinor)) {
         return;
@@ -249,22 +240,14 @@
 }
 
 void DirectVolume::handlePartitionChanged(const char *devpath, NetlinkEvent *evt) {
-    int major, minor;
-    if (!getMajorMinorNum(evt, &major, &minor)) {
-        LOGE("Could not determine major:minor in handlePartitionChanged");
-        return;
-    }
-
+    int major = atoi(evt->findParam("MAJOR"));
+    int minor = atoi(evt->findParam("MINOR"));
     LOGD("Volume %s %s partition %d:%d changed\n", getLabel(), getMountpoint(), major, minor);
 }
 
 void DirectVolume::handleDiskRemoved(const char *devpath, NetlinkEvent *evt) {
-    int major, minor;
-    if (!getMajorMinorNum(evt, &major, &minor)) {
-        LOGE("Could not determine major:minor in handleDiskRemoved");
-        return;
-    }
-
+    int major = atoi(evt->findParam("MAJOR"));
+    int minor = atoi(evt->findParam("MINOR"));
     char msg[255];
 
     LOGD("Volume %s %s disk %d:%d removed\n", getLabel(), getMountpoint(), major, minor);
@@ -276,12 +259,8 @@
 }
 
 void DirectVolume::handlePartitionRemoved(const char *devpath, NetlinkEvent *evt) {
-    int major, minor;
-    if (!getMajorMinorNum(evt, &major, &minor)) {
-        LOGE("Could not determine major:minor in handlePartitionRemoved");
-        return;
-    }
-
+    int major = atoi(evt->findParam("MAJOR"));
+    int minor = atoi(evt->findParam("MINOR"));
     char msg[255];
 
     LOGD("Volume %s %s partition %d:%d removed\n", getLabel(), getMountpoint(), major, minor);
diff --git a/DirectVolume.h b/DirectVolume.h
index 3c95b4b..2a78236 100644
--- a/DirectVolume.h
+++ b/DirectVolume.h
@@ -18,7 +18,6 @@
 #define _DEVICEVOLUME_H
 
 #include <utils/List.h>
-#include <sysutils/NetlinkEvent.h>
 
 #include "Volume.h"
 
@@ -26,20 +25,6 @@
 
 typedef android::List<char *> PathCollection;
 
-inline bool getMajorMinorNum(NetlinkEvent *evt, int *major, int *minor) {
-    const char *major_str = evt->findParam("MAJOR");
-    const char *minor_str = evt->findParam("MINOR");
-
-    if (major_str == NULL || minor_str == NULL) {
-        return false;
-    }
-
-    *major = atoi(major_str);
-    *minor = atoi(minor_str);
-
-    return true;
-}
-
 class DirectVolume : public Volume {
 public:
     static const int MAX_PARTITIONS = 4;
