diff --git a/apps/app_voicemail.c b/apps/app_voicemail.c
index 6e50108e602e6a2c7aafcb933565fcc1cc725364..157b2e7ca1175a80683ed26825923a292eb9d2ef 100644
--- a/apps/app_voicemail.c
+++ b/apps/app_voicemail.c
@@ -1621,6 +1621,7 @@ static void copy_file(char *frompath, char *topath)
 
 /*
  * A negative return value indicates an error.
+ * \note Should always be called with a lock already set on dir.
  */
 static int last_message_index(struct ast_vm_user *vmu, char *dir)
 {
@@ -1630,9 +1631,6 @@ static int last_message_index(struct ast_vm_user *vmu, char *dir)
 	struct dirent *msgdirent;
 	int msgdirint;
 
-	if (vm_lock_path(dir))
-		return ERROR_LOCK_PATH;
-
 	/* Reading the entire directory into a file map scales better than
 	 * doing a stat repeatedly on a predicted sequence.  I suspect this
 	 * is partially due to stat(2) internally doing a readdir(2) itself to
@@ -1648,7 +1646,6 @@ static int last_message_index(struct ast_vm_user *vmu, char *dir)
 		if (map[x] == 0)
 			break;
 	}
-	ast_unlock_path(dir);
 
 	return x - 1;
 }