Merge "diag: dci: Process DCI packet during USB disconnect"
diff --git a/drivers/char/diag/diag_dci.c b/drivers/char/diag/diag_dci.c
index 1c9f968..6ae5d03 100644
--- a/drivers/char/diag/diag_dci.c
+++ b/drivers/char/diag/diag_dci.c
@@ -359,7 +359,6 @@
 			if (stat)
 				pr_err("diag: Err sending dci signal to client, signal data: 0x%x, stat: %d\n",
 				info.si_int, stat);
-			break;
 		}
 	} /* end of loop for all DCI clients */
 }
@@ -933,6 +932,7 @@
 
 	mutex_lock(&driver->diag_cntl_mutex);
 	for (i = 0; i < 16; i++) {
+		retry_count = 0;
 		driver->log_mask->cmd_type = DIAG_CTRL_MSG_LOG_MASK;
 		driver->log_mask->num_items = 512;
 		driver->log_mask->data_len  = 11 + 512;
@@ -954,8 +954,9 @@
 					break;
 			}
 			if (wr_size != header_size + 512) {
-				pr_err("diag: dci log mask update failed %d, tried %d",
-					 wr_size, header_size + 512);
+				pr_err("diag: dci log mask update failed %d, tried %d for equip_id %d\n",
+					wr_size, header_size + 512,
+					driver->log_mask->equip_id);
 				ret = DIAG_DCI_SEND_DATA_FAIL;
 
 			} else {
diff --git a/drivers/char/diag/diagchar_core.c b/drivers/char/diag/diagchar_core.c
index 2809900..3e3d8fd 100644
--- a/drivers/char/diag/diagchar_core.c
+++ b/drivers/char/diag/diagchar_core.c
@@ -1179,13 +1179,7 @@
 	struct diag_hdlc_dest_type enc = { NULL, NULL, 0 };
 	void *buf_copy = NULL;
 	unsigned int payload_size;
-#ifdef CONFIG_DIAG_OVER_USB
-	if (((driver->logging_mode == USB_MODE) && (!driver->usb_connected)) ||
-				(driver->logging_mode == NO_LOGGING_MODE)) {
-		/*Drop the diag payload */
-		return -EIO;
-	}
-#endif /* DIAG over USB */
+
 	index = 0;
 	/* Get the packet type F3/log/event/Pkt response */
 	err = copy_from_user((&pkt_type), buf, 4);
@@ -1201,6 +1195,14 @@
 		driver->dropped_count++;
 		return -EBADMSG;
 	}
+#ifdef CONFIG_DIAG_OVER_USB
+	if (((pkt_type != DCI_DATA_TYPE) && (driver->logging_mode == USB_MODE)
+				&& (!driver->usb_connected)) ||
+				(driver->logging_mode == NO_LOGGING_MODE)) {
+		/*Drop the diag payload */
+		return -EIO;
+	}
+#endif /* DIAG over USB */
 	if (pkt_type == DCI_DATA_TYPE) {
 		err = copy_from_user(driver->user_space_data, buf + 4,
 							 payload_size);