diff --git a/example/example.cpp b/example/example.cpp
index 2ab0bd3..4a3c248 100644
--- a/example/example.cpp
+++ b/example/example.cpp
@@ -36,12 +36,12 @@
     return {supportedPath};
 }
 
-bool ExampleBlobHandler::deleteBlob(const std::string& path)
+bool ExampleBlobHandler::deleteBlob(const std::string&)
 {
     return false;
 }
 
-bool ExampleBlobHandler::stat(const std::string& path, BlobMeta* meta)
+bool ExampleBlobHandler::stat(const std::string&, BlobMeta*)
 {
     return false;
 }
@@ -116,15 +116,14 @@
     return true;
 }
 
-bool ExampleBlobHandler::writeMeta(uint16_t session, uint32_t offset,
-                                   const std::vector<uint8_t>& data)
+bool ExampleBlobHandler::writeMeta(uint16_t, uint32_t,
+                                   const std::vector<uint8_t>&)
 {
     /* Not supported. */
     return false;
 }
 
-bool ExampleBlobHandler::commit(uint16_t session,
-                                const std::vector<uint8_t>& data)
+bool ExampleBlobHandler::commit(uint16_t session, const std::vector<uint8_t>&)
 {
     ExampleBlob* sess = getSession(session);
     if (!sess)
diff --git a/ipmi.cpp b/ipmi.cpp
index 1613085..976dbd2 100644
--- a/ipmi.cpp
+++ b/ipmi.cpp
@@ -79,7 +79,7 @@
     return (end == nullptr) ? std::string() : std::string(start, end);
 }
 
-ipmi_ret_t getBlobCount(ManagerInterface* mgr, const uint8_t* reqBuf,
+ipmi_ret_t getBlobCount(ManagerInterface* mgr, const uint8_t*,
                         uint8_t* replyCmdBuf, size_t* dataLen)
 {
     struct BmcBlobCountRx resp;
@@ -151,8 +151,8 @@
     return IPMI_CC_OK;
 }
 
-ipmi_ret_t closeBlob(ManagerInterface* mgr, const uint8_t* reqBuf,
-                     uint8_t* replyCmdBuf, size_t* dataLen)
+ipmi_ret_t closeBlob(ManagerInterface* mgr, const uint8_t* reqBuf, uint8_t*,
+                     size_t* dataLen)
 {
     struct BmcBlobCloseTx request;
     std::memcpy(&request, reqBuf, sizeof(request));
@@ -167,8 +167,8 @@
     return IPMI_CC_OK;
 }
 
-ipmi_ret_t deleteBlob(ManagerInterface* mgr, const uint8_t* reqBuf,
-                      uint8_t* replyCmdBuf, size_t* dataLen)
+ipmi_ret_t deleteBlob(ManagerInterface* mgr, const uint8_t* reqBuf, uint8_t*,
+                      size_t* dataLen)
 {
     size_t requestLen = (*dataLen);
     auto request = reinterpret_cast<const struct BmcBlobDeleteTx*>(reqBuf);
@@ -254,8 +254,8 @@
     return returnStatBlob(&meta, replyCmdBuf, dataLen);
 }
 
-ipmi_ret_t commitBlob(ManagerInterface* mgr, const uint8_t* reqBuf,
-                      uint8_t* replyCmdBuf, size_t* dataLen)
+ipmi_ret_t commitBlob(ManagerInterface* mgr, const uint8_t* reqBuf, uint8_t*,
+                      size_t* dataLen)
 {
     size_t requestLen = (*dataLen);
     auto request = reinterpret_cast<const struct BmcBlobCommitTx*>(reqBuf);
@@ -307,8 +307,8 @@
     return IPMI_CC_OK;
 }
 
-ipmi_ret_t writeBlob(ManagerInterface* mgr, const uint8_t* reqBuf,
-                     uint8_t* replyCmdBuf, size_t* dataLen)
+ipmi_ret_t writeBlob(ManagerInterface* mgr, const uint8_t* reqBuf, uint8_t*,
+                     size_t* dataLen)
 {
     size_t requestLen = (*dataLen);
     auto request = reinterpret_cast<const struct BmcBlobWriteTx*>(reqBuf);
@@ -328,8 +328,8 @@
     return IPMI_CC_OK;
 }
 
-ipmi_ret_t writeMeta(ManagerInterface* mgr, const uint8_t* reqBuf,
-                     uint8_t* replyCmdBuf, size_t* dataLen)
+ipmi_ret_t writeMeta(ManagerInterface* mgr, const uint8_t* reqBuf, uint8_t*,
+                     size_t* dataLen)
 {
     size_t requestLen = (*dataLen);
     struct BmcBlobWriteMetaTx request;
diff --git a/process.cpp b/process.cpp
index bad4d70..2481fa2 100644
--- a/process.cpp
+++ b/process.cpp
@@ -48,8 +48,9 @@
     {BlobOEMCommands::bmcBlobWriteMeta, writeMeta},
 };
 
-IpmiBlobHandler validateBlobCommand(const uint8_t* reqBuf, uint8_t* replyCmdBuf,
-                                    size_t* dataLen, ipmi_ret_t* code)
+IpmiBlobHandler validateBlobCommand(const uint8_t* reqBuf,
+                                    uint8_t* /*replyCmdBuf*/, size_t* dataLen,
+                                    ipmi_ret_t* code)
 {
     size_t requestLength = (*dataLen);
     /* We know dataLen is at least 1 already */
@@ -143,7 +144,7 @@
     return result;
 }
 
-ipmi_ret_t handleBlobCommand(ipmi_cmd_t cmd, const uint8_t* reqBuf,
+ipmi_ret_t handleBlobCommand(ipmi_cmd_t, const uint8_t* reqBuf,
                              uint8_t* replyCmdBuf, size_t* dataLen)
 {
     /* It's holding at least a sub-command.  The OEN is trimmed from the bytes
diff --git a/test/ipmi_open_unittest.cpp b/test/ipmi_open_unittest.cpp
index 39ad426..8232340 100644
--- a/test/ipmi_open_unittest.cpp
+++ b/test/ipmi_open_unittest.cpp
@@ -93,11 +93,10 @@
     uint16_t returnedSession = 0x54;
 
     EXPECT_CALL(mgr, open(req->flags, StrEq(blobId), NotNull()))
-        .WillOnce(Invoke(
-            [&](uint16_t flags, const std::string& path, uint16_t* session) {
-                (*session) = returnedSession;
-                return true;
-            }));
+        .WillOnce(Invoke([&](uint16_t, const std::string&, uint16_t* session) {
+            (*session) = returnedSession;
+            return true;
+        }));
 
     EXPECT_EQ(IPMI_CC_OK, openBlob(&mgr, request, reply, &dataLen));
 
diff --git a/test/ipmi_sessionstat_unittest.cpp b/test/ipmi_sessionstat_unittest.cpp
index f067c15..4bf1125 100644
--- a/test/ipmi_sessionstat_unittest.cpp
+++ b/test/ipmi_sessionstat_unittest.cpp
@@ -67,7 +67,7 @@
 
     EXPECT_CALL(mgr, stat(Matcher<uint16_t>(req->sessionId),
                           Matcher<BlobMeta*>(NotNull())))
-        .WillOnce(Invoke([&](uint16_t session, BlobMeta* meta) {
+        .WillOnce(Invoke([&](uint16_t, BlobMeta* meta) {
             meta->blobState = blobState;
             meta->size = size;
             return true;
@@ -110,7 +110,7 @@
 
     EXPECT_CALL(mgr, stat(Matcher<uint16_t>(req->sessionId),
                           Matcher<BlobMeta*>(NotNull())))
-        .WillOnce(Invoke([&](uint16_t session, BlobMeta* meta) {
+        .WillOnce(Invoke([&](uint16_t, BlobMeta* meta) {
             (*meta) = lmeta;
             return true;
         }));
diff --git a/test/ipmi_stat_unittest.cpp b/test/ipmi_stat_unittest.cpp
index f173985..083a980 100644
--- a/test/ipmi_stat_unittest.cpp
+++ b/test/ipmi_stat_unittest.cpp
@@ -100,7 +100,7 @@
 
     EXPECT_CALL(mgr, stat(Matcher<const std::string&>(StrEq(blobId)),
                           Matcher<BlobMeta*>(NotNull())))
-        .WillOnce(Invoke([&](const std::string& path, BlobMeta* meta) {
+        .WillOnce(Invoke([&](const std::string&, BlobMeta* meta) {
             meta->blobState = blobState;
             meta->size = size;
             return true;
@@ -147,7 +147,7 @@
 
     EXPECT_CALL(mgr, stat(Matcher<const std::string&>(StrEq(blobId)),
                           Matcher<BlobMeta*>(NotNull())))
-        .WillOnce(Invoke([&](const std::string& path, BlobMeta* meta) {
+        .WillOnce(Invoke([&](const std::string&, BlobMeta* meta) {
             (*meta) = lmeta;
             return true;
         }));
diff --git a/test/process_unittest.cpp b/test/process_unittest.cpp
index 1f5b0c3..8c133e5 100644
--- a/test/process_unittest.cpp
+++ b/test/process_unittest.cpp
@@ -197,9 +197,8 @@
     uint8_t request[MAX_IPMI_BUFFER] = {0};
     uint8_t reply[MAX_IPMI_BUFFER] = {0};
 
-    IpmiBlobHandler h = [](ManagerInterface* mgr, const uint8_t* reqBuf,
-                           uint8_t* replyCmdBuf,
-                           size_t* dataLen) { return IPMI_CC_INVALID; };
+    IpmiBlobHandler h = [](ManagerInterface*, const uint8_t*, uint8_t*,
+                           size_t*) { return IPMI_CC_INVALID; };
 
     dataLen = sizeof(request);
 
@@ -217,8 +216,8 @@
     uint8_t request[MAX_IPMI_BUFFER] = {0};
     uint8_t reply[MAX_IPMI_BUFFER] = {0};
 
-    IpmiBlobHandler h = [](ManagerInterface* mgr, const uint8_t* reqBuf,
-                           uint8_t* replyCmdBuf, size_t* dataLen) {
+    IpmiBlobHandler h = [](ManagerInterface*, const uint8_t*, uint8_t*,
+                           size_t* dataLen) {
         (*dataLen) = 0;
         return IPMI_CC_OK;
     };
@@ -239,8 +238,8 @@
     uint8_t request[MAX_IPMI_BUFFER] = {0};
     uint8_t reply[MAX_IPMI_BUFFER] = {0};
 
-    IpmiBlobHandler h = [](ManagerInterface* mgr, const uint8_t* reqBuf,
-                           uint8_t* replyCmdBuf, size_t* dataLen) {
+    IpmiBlobHandler h = [](ManagerInterface*, const uint8_t*, uint8_t*,
+                           size_t* dataLen) {
         (*dataLen) = sizeof(uint8_t);
         return IPMI_CC_OK;
     };
@@ -262,8 +261,7 @@
     uint8_t reply[MAX_IPMI_BUFFER] = {0};
     uint32_t payloadLen = sizeof(uint16_t) + sizeof(uint8_t);
 
-    IpmiBlobHandler h = [payloadLen](ManagerInterface* mgr,
-                                     const uint8_t* reqBuf,
+    IpmiBlobHandler h = [payloadLen](ManagerInterface*, const uint8_t*,
                                      uint8_t* replyCmdBuf, size_t* dataLen) {
         (*dataLen) = payloadLen;
         replyCmdBuf[2] = 0x56;
diff --git a/test/utils_unittest.cpp b/test/utils_unittest.cpp
index cba8ee2..9c01aef 100644
--- a/test/utils_unittest.cpp
+++ b/test/utils_unittest.cpp
@@ -23,8 +23,7 @@
 
 std::vector<std::string> returnList;
 
-std::vector<std::string> getLibraryList(const std::string& path,
-                                        PathMatcher check)
+std::vector<std::string> getLibraryList(const std::string&, PathMatcher)
 {
     return returnList;
 }
