diff --git a/qcwcn/wifi_hal/rb_wrapper.cpp b/qcwcn/wifi_hal/rb_wrapper.cpp
index 3a9b109..4c9e475 100644
--- a/qcwcn/wifi_hal/rb_wrapper.cpp
+++ b/qcwcn/wifi_hal/rb_wrapper.cpp
@@ -86,15 +86,15 @@
 }
 
 wifi_error ring_buffer_write(struct rb_info *rb_info, u8 *buf, size_t length,
-                             int no_of_records)
+                             int no_of_records, size_t record_length)
 {
     enum rb_status status;
 
-    status = rb_write(rb_info->rb_ctx, buf, length, 0);
+    status = rb_write(rb_info->rb_ctx, buf, length, 0, record_length);
     if ((status == RB_FULL) || (status == RB_RETRY)) {
          push_out_rb_data(rb_info);
          /* Try writing the data after reading it out */
-        status = rb_write(rb_info->rb_ctx, buf, length, 0);
+        status = rb_write(rb_info->rb_ctx, buf, length, 0, record_length);
         if (status != RB_SUCCESS) {
             ALOGE("Failed to rewrite %zu bytes to rb %s with error %d", length,
                   rb_info->name, status);
diff --git a/qcwcn/wifi_hal/rb_wrapper.h b/qcwcn/wifi_hal/rb_wrapper.h
index a0b6b1b..6160ebc 100644
--- a/qcwcn/wifi_hal/rb_wrapper.h
+++ b/qcwcn/wifi_hal/rb_wrapper.h
@@ -52,6 +52,6 @@
                             u32 flags, u32 max_interval_sec, u32 min_data_size);
 int is_rb_name_match(struct rb_info *rb_info, char *name);
 wifi_error ring_buffer_write(struct rb_info *rb_info, u8 *buf, size_t length,
-                             int no_of_records);
+                             int no_of_records, size_t record_length);
 void push_out_rb_data(void *cb_ctx);
 #endif /* __RB_WRAPPER_H */
diff --git a/qcwcn/wifi_hal/ring_buffer.cpp b/qcwcn/wifi_hal/ring_buffer.cpp
index fa90de1..790b007 100644
--- a/qcwcn/wifi_hal/ring_buffer.cpp
+++ b/qcwcn/wifi_hal/ring_buffer.cpp
@@ -146,14 +146,18 @@
     free(rbc);
 }
 
-enum rb_status rb_write (void *ctx, u8 *buf, size_t length, int overwrite)
+/*
+ * record_length : 0  - byte boundary
+ *               : >0 - Ensures to write record_length no.of bytes to the same buffer.
+ */
+enum rb_status rb_write (void *ctx, u8 *buf, size_t length, int overwrite,
+                         size_t record_length)
 {
     rbc_t *rbc = (rbc_t *)ctx;
     unsigned int bytes_written = 0; // bytes written into rb so far
     unsigned int push_in_rd_ptr = 0; // push required in read pointer because of
                                      // write in current buffer
     unsigned int total_push_in_rd_ptr = 0; // Total amount of push in read pointer in this write
-    size_t record_length = length;
 
     if (record_length > rbc->each_buf_size) {
         return RB_FAILURE;
diff --git a/qcwcn/wifi_hal/ring_buffer.h b/qcwcn/wifi_hal/ring_buffer.h
index d47f8d9..3a310b7 100644
--- a/qcwcn/wifi_hal/ring_buffer.h
+++ b/qcwcn/wifi_hal/ring_buffer.h
@@ -54,7 +54,8 @@
 void ring_buffer_deinit(void *ctx);
 
 /* Writes writes length of bytes from buf to ring buffer */
-enum rb_status rb_write(void *ctx, u8 *buf, size_t length, int overwrite);
+enum rb_status rb_write(void *ctx, u8 *buf, size_t length, int overwrite,
+                        size_t record_length);
 
 /* Tries to read max_length of bytes from ring buffer to buf
  * and returns actual length of bytes read from ring buffer
diff --git a/qcwcn/wifi_hal/wifilogger_diag.cpp b/qcwcn/wifi_hal/wifilogger_diag.cpp
index 65d78fd..d5d2346 100644
--- a/qcwcn/wifi_hal/wifilogger_diag.cpp
+++ b/qcwcn/wifi_hal/wifilogger_diag.cpp
@@ -101,7 +101,7 @@
     if (info->rb_infos[CONNECTIVITY_EVENTS_RB_ID].verbose_level >= 1 &&
         info->on_ring_buffer_data) {
         return ring_buffer_write(&info->rb_infos[CONNECTIVITY_EVENTS_RB_ID],
-                      (u8*)rbe, total_length, 1);
+                      (u8*)rbe, total_length, 1, total_length);
     }
 
     return WIFI_SUCCESS;
@@ -773,13 +773,15 @@
          * complete payload memcpy */
         status = ring_buffer_write(&info->rb_infos[FIRMWARE_PRINTS_RB_ID],
                                    (u8*)&rb_entry_hdr,
-                                   sizeof(wifi_ring_buffer_entry), 0);
+                                   sizeof(wifi_ring_buffer_entry),
+                                   0,
+                                   sizeof(wifi_ring_buffer_entry) + length);
         if (status != WIFI_SUCCESS) {
             ALOGE("Failed to write firmware prints rb header %d", status);
             return status;
         }
         status = ring_buffer_write(&info->rb_infos[FIRMWARE_PRINTS_RB_ID],
-                                   buf, length, 1);
+                                   buf, length, 1, length);
         if (status != WIFI_SUCCESS) {
             ALOGE("Failed to write firmware prints rb payload %d", status);
             return status;
@@ -1089,7 +1091,9 @@
         info->on_ring_buffer_data) {
         status = ring_buffer_write(&info->rb_infos[POWER_EVENTS_RB_ID],
                                    (u8*)pRingBufferEntry,
-                                   len_ring_buffer_entry, 1);
+                                   len_ring_buffer_entry,
+                                   1,
+                                   len_ring_buffer_entry);
     } else {
         status = WIFI_SUCCESS;
     }
@@ -1140,7 +1144,8 @@
         ring_buffer_write(&info->rb_infos[PKT_STATS_RB_ID],
                           (u8*)pRingBufferEntry,
                           size,
-                          num_records);
+                          num_records,
+                          size);
     }
 
     return WIFI_SUCCESS;
@@ -1733,13 +1738,15 @@
          * complete payload memcpy */
         status = ring_buffer_write(&info->rb_infos[DRIVER_PRINTS_RB_ID],
                                    (u8*)&rb_entry_hdr,
-                                   sizeof(wifi_ring_buffer_entry), 0);
+                                   sizeof(wifi_ring_buffer_entry),
+                                   0,
+                                   sizeof(wifi_ring_buffer_entry) + length);
         if (status != WIFI_SUCCESS) {
             ALOGE("Failed to write driver prints rb header %d", status);
             return status;
         }
         status = ring_buffer_write(&info->rb_infos[DRIVER_PRINTS_RB_ID],
-                                   buf, length, 1);
+                                   buf, length, 1, length);
         if (status != WIFI_SUCCESS) {
             ALOGE("Failed to write driver prints rb payload %d", status);
             return status;
