From 999d7bc57ef3af5f6cac5dd4996bdf406ea59e7c Mon Sep 17 00:00:00 2001 From: Alex Elder Date: Wed, 15 Feb 2012 07:43:54 -0600 Subject: [PATCH] --- yaml --- r: 296520 b: refs/heads/master c: f42299e6c3883c69c14079b8c88fe33815b2dcc3 h: refs/heads/master v: v3 --- [refs] | 2 +- trunk/net/ceph/messenger.c | 23 ++++++++++++----------- 2 files changed, 13 insertions(+), 12 deletions(-) diff --git a/[refs] b/[refs] index 75402a8248a4..62ac7e381343 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: fe3ad593e2c34457ffa6233014ab19f4d36f85f2 +refs/heads/master: f42299e6c3883c69c14079b8c88fe33815b2dcc3 diff --git a/trunk/net/ceph/messenger.c b/trunk/net/ceph/messenger.c index 575511a29eb7..e8f236e87f38 100644 --- a/trunk/net/ceph/messenger.c +++ b/trunk/net/ceph/messenger.c @@ -747,17 +747,18 @@ static int write_partial_kvec(struct ceph_connection *con) con->out_kvec_bytes -= ret; if (con->out_kvec_bytes == 0) break; /* done */ - while (ret > 0) { - if (ret >= con->out_kvec_cur->iov_len) { - ret -= con->out_kvec_cur->iov_len; - con->out_kvec_cur++; - con->out_kvec_left--; - } else { - con->out_kvec_cur->iov_len -= ret; - con->out_kvec_cur->iov_base += ret; - ret = 0; - break; - } + + /* account for full iov entries consumed */ + while (ret >= con->out_kvec_cur->iov_len) { + BUG_ON(!con->out_kvec_left); + ret -= con->out_kvec_cur->iov_len; + con->out_kvec_cur++; + con->out_kvec_left--; + } + /* and for a partially-consumed entry */ + if (ret) { + con->out_kvec_cur->iov_len -= ret; + con->out_kvec_cur->iov_base += ret; } } con->out_kvec_left = 0;