Commit d90deda6 authored by Yan, Zheng's avatar Yan, Zheng Committed by Sage Weil

libceph: fix oops in ceph_msg_data_{pages,pagelist}_advance()

When there is no more data, ceph_msg_data_{pages,pagelist}_advance()
should not move on to the next page.
Signed-off-by: default avatarYan, Zheng <zheng.z.yan@intel.com>
parent 5f75ce57
...@@ -919,6 +919,9 @@ static bool ceph_msg_data_pages_advance(struct ceph_msg_data_cursor *cursor, ...@@ -919,6 +919,9 @@ static bool ceph_msg_data_pages_advance(struct ceph_msg_data_cursor *cursor,
if (!bytes || cursor->page_offset) if (!bytes || cursor->page_offset)
return false; /* more bytes to process in the current page */ return false; /* more bytes to process in the current page */
if (!cursor->resid)
return false; /* no more data */
/* Move on to the next page; offset is already at 0 */ /* Move on to the next page; offset is already at 0 */
BUG_ON(cursor->page_index >= cursor->page_count); BUG_ON(cursor->page_index >= cursor->page_count);
...@@ -1004,6 +1007,9 @@ static bool ceph_msg_data_pagelist_advance(struct ceph_msg_data_cursor *cursor, ...@@ -1004,6 +1007,9 @@ static bool ceph_msg_data_pagelist_advance(struct ceph_msg_data_cursor *cursor,
if (!bytes || cursor->offset & ~PAGE_MASK) if (!bytes || cursor->offset & ~PAGE_MASK)
return false; /* more bytes to process in the current page */ return false; /* more bytes to process in the current page */
if (!cursor->resid)
return false; /* no more data */
/* Move on to the next page */ /* Move on to the next page */
BUG_ON(list_is_last(&cursor->page->lru, &pagelist->head)); BUG_ON(list_is_last(&cursor->page->lru, &pagelist->head));
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment