summaryrefslogtreecommitdiffstats
path: root/net/ceph/messenger.c
diff options
context:
space:
mode:
authorAlex Elder2013-03-07 06:39:38 +0100
committerSage Weil2013-05-02 06:16:34 +0200
commit35c7bfbcd4fabded090e5ab316a1cbf053a0a980 (patch)
treedcb5139eebfc6a7e77f582d7f1eb0618e4885377 /net/ceph/messenger.c
parentlibceph: define and use in_msg_pos_next() (diff)
downloadkernel-qcow2-linux-35c7bfbcd4fabded090e5ab316a1cbf053a0a980.tar.gz
kernel-qcow2-linux-35c7bfbcd4fabded090e5ab316a1cbf053a0a980.tar.xz
kernel-qcow2-linux-35c7bfbcd4fabded090e5ab316a1cbf053a0a980.zip
libceph: advance pagelist with list_rotate_left()
While processing an outgoing pagelist (either the data pagelist or trail) in a ceph message, the messenger cycles through each of the pages on the list. This is accomplished in out_msg_pos_next(), if the end of the first page on the list is reached, the first page is moved to the end of the list. There is a list operation, list_rotate_left(), which performs exactly this operation, and by using it, what's really going on becomes more obvious. So replace these two list_move_tail() calls with list_rotate_left(). Signed-off-by: Alex Elder <elder@inktank.com> Reviewed-by: Josh Durgin <josh.durgin@inktank.com>
Diffstat (limited to 'net/ceph/messenger.c')
-rw-r--r--net/ceph/messenger.c6
1 files changed, 2 insertions, 4 deletions
diff --git a/net/ceph/messenger.c b/net/ceph/messenger.c
index fb5f6e7d57a3..2734d0337f95 100644
--- a/net/ceph/messenger.c
+++ b/net/ceph/messenger.c
@@ -1041,11 +1041,9 @@ static void out_msg_pos_next(struct ceph_connection *con, struct page *page,
con->out_msg_pos.page++;
con->out_msg_pos.did_page_crc = false;
if (in_trail)
- list_move_tail(&page->lru,
- &msg->trail->head);
+ list_rotate_left(&msg->trail->head);
else if (msg->pagelist)
- list_move_tail(&page->lru,
- &msg->pagelist->head);
+ list_rotate_left(&msg->pagelist->head);
#ifdef CONFIG_BLOCK
else if (msg->bio)
iter_bio_next(&msg->bio_iter, &msg->bio_seg);