diff --git a/CommandListener.cpp b/CommandListener.cpp
index e92c051..795c01c 100644
--- a/CommandListener.cpp
+++ b/CommandListener.cpp
@@ -52,8 +52,8 @@
     registerCmd(new FstrimCmd());
 }
 
-void CommandListener::dumpArgs(int argc, char **argv, int argObscure) {
 #if DUMP_ARGS
+void CommandListener::dumpArgs(int argc, char **argv, int argObscure) {
     char buffer[4096];
     char *p = buffer;
 
@@ -79,15 +79,17 @@
         }
     }
     SLOGD("%s", buffer);
-#endif
 }
+#else
+void CommandListener::dumpArgs(int /*argc*/, char ** /*argv*/, int /*argObscure*/) { }
+#endif
 
 CommandListener::DumpCmd::DumpCmd() :
                  VoldCommand("dump") {
 }
 
 int CommandListener::DumpCmd::runCommand(SocketClient *cli,
-                                         int argc, char **argv) {
+                                         int /*argc*/, char ** /*argv*/) {
     cli->sendMsg(0, "Dumping loop status", false);
     if (Loop::dumpState(cli)) {
         cli->sendMsg(ResponseCode::CommandOkay, "Loop dump failed", true);
diff --git a/DirectVolume.cpp b/DirectVolume.cpp
index 960eef6..67f89ea 100644
--- a/DirectVolume.cpp
+++ b/DirectVolume.cpp
@@ -151,7 +151,8 @@
     return -1;
 }
 
-void DirectVolume::handleDiskAdded(const char *devpath, NetlinkEvent *evt) {
+void DirectVolume::handleDiskAdded(const char * /*devpath*/,
+                                   NetlinkEvent *evt) {
     mDiskMajor = atoi(evt->findParam("MAJOR"));
     mDiskMinor = atoi(evt->findParam("MINOR"));
 
@@ -240,7 +241,8 @@
     }
 }
 
-void DirectVolume::handleDiskChanged(const char *devpath, NetlinkEvent *evt) {
+void DirectVolume::handleDiskChanged(const char * /*devpath*/,
+                                     NetlinkEvent *evt) {
     int major = atoi(evt->findParam("MAJOR"));
     int minor = atoi(evt->findParam("MINOR"));
 
@@ -273,13 +275,15 @@
     }
 }
 
-void DirectVolume::handlePartitionChanged(const char *devpath, NetlinkEvent *evt) {
+void DirectVolume::handlePartitionChanged(const char * /*devpath*/,
+                                          NetlinkEvent *evt) {
     int major = atoi(evt->findParam("MAJOR"));
     int minor = atoi(evt->findParam("MINOR"));
     SLOGD("Volume %s %s partition %d:%d changed\n", getLabel(), getMountpoint(), major, minor);
 }
 
-void DirectVolume::handleDiskRemoved(const char *devpath, NetlinkEvent *evt) {
+void DirectVolume::handleDiskRemoved(const char * /*devpath*/,
+                                     NetlinkEvent *evt) {
     int major = atoi(evt->findParam("MAJOR"));
     int minor = atoi(evt->findParam("MINOR"));
     char msg[255];
@@ -297,7 +301,8 @@
     setState(Volume::State_NoMedia);
 }
 
-void DirectVolume::handlePartitionRemoved(const char *devpath, NetlinkEvent *evt) {
+void DirectVolume::handlePartitionRemoved(const char * /*devpath*/,
+                                          NetlinkEvent *evt) {
     int major = atoi(evt->findParam("MAJOR"));
     int minor = atoi(evt->findParam("MINOR"));
     char msg[255];
diff --git a/Loop.cpp b/Loop.cpp
index 78df132..3f0ee1e 100644
--- a/Loop.cpp
+++ b/Loop.cpp
@@ -227,7 +227,7 @@
     return 0;
 }
 
-int Loop::destroyByFile(const char *loopFile) {
+int Loop::destroyByFile(const char * /*loopFile*/) {
     errno = ENOSYS;
     return -1;
 }
diff --git a/Volume.cpp b/Volume.cpp
index 80552b6..ca56d1c 100644
--- a/Volume.cpp
+++ b/Volume.cpp
@@ -147,7 +147,7 @@
 void Volume::handleVolumeUnshared() {
 }
 
-int Volume::handleBlockEvent(NetlinkEvent *evt) {
+int Volume::handleBlockEvent(NetlinkEvent * /*evt*/) {
     errno = ENOSYS;
     return -1;
 }
diff --git a/cryptfs.c b/cryptfs.c
index 4dc9faa..40ad36a 100644
--- a/cryptfs.c
+++ b/cryptfs.c
@@ -51,6 +51,8 @@
 #include "crypto_scrypt.h"
 #include "ext4_utils.h"
 
+#define UNUSED __attribute__((unused))
+
 #define DM_CRYPT_BUF_SIZE 4096
 
 #define HASH_COUNT 2000
@@ -868,7 +870,7 @@
 
 }
 
-static void pbkdf2(char *passwd, unsigned char *salt, unsigned char *ikey, void *params) {
+static void pbkdf2(char *passwd, unsigned char *salt, unsigned char *ikey, void *params UNUSED) {
     /* Turn the password into a key and IV that can decrypt the master key */
     PKCS5_PBKDF2_HMAC_SHA1(passwd, strlen(passwd), salt, SALT_LEN,
                            HASH_COUNT, KEY_LEN_BYTES+IV_LEN_BYTES, ikey);
@@ -1161,7 +1163,7 @@
     return rc;
 }
 
-static int do_crypto_complete(char *mount_point)
+static int do_crypto_complete(char *mount_point UNUSED)
 {
   struct crypt_mnt_ftr crypt_ftr;
   char encrypted_state[PROPERTY_VALUE_MAX];
diff --git a/cryptfs.h b/cryptfs.h
index e4010be..dc3ce3e 100644
--- a/cryptfs.h
+++ b/cryptfs.h
@@ -56,8 +56,7 @@
 #define KDF_PBKDF2 1
 #define KDF_SCRYPT 2
 
-#define __le32 unsigned int
-#define __le16 unsigned short int
+/* __le32 and __le16 defined in system/extras/ext4_utils/ext4_utils.h */
 #define __le8  unsigned char
 
 struct crypt_mnt_ftr {
diff --git a/fstrim.c b/fstrim.c
index 2bd0577..9a6637d 100644
--- a/fstrim.c
+++ b/fstrim.c
@@ -37,6 +37,8 @@
 
 #define FSTRIM_WAKELOCK "dofstrim"
 
+#define UNUSED __attribute__((unused))
+
 static unsigned long long get_boot_time_ms(void)
 {
     struct timespec t;
@@ -50,7 +52,7 @@
     return time_ms;
 }
 
-static void *do_fstrim_filesystems(void *ignored)
+static void *do_fstrim_filesystems(void *ignored UNUSED)
 {
     int i;
     int fd;
