libceph: advance pagelist with list_rotate_left()
authorAlex Elder <elder@inktank.com>
Thu, 7 Mar 2013 05:39:38 +0000 (23:39 -0600)
committerSage Weil <sage@inktank.com>
Thu, 2 May 2013 04:16:34 +0000 (21:16 -0700)
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>
net/ceph/messenger.c

index fb5f6e7..2734d03 100644 (file)
@@ -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);