drbd: _drbd_no_send_page(): Return 0 upon success and an error code otherwise
authorAndreas Gruenbacher <agruen@linbit.com>
Wed, 16 Mar 2011 08:41:10 +0000 (09:41 +0100)
committerPhilipp Reisner <philipp.reisner@linbit.com>
Thu, 8 Nov 2012 15:44:40 +0000 (16:44 +0100)
Signed-off-by: Philipp Reisner <philipp.reisner@linbit.com>
Signed-off-by: Lars Ellenberg <lars.ellenberg@linbit.com>
drivers/block/drbd/drbd_main.c

index 9380535..ff75cce 100644 (file)
@@ -1403,13 +1403,19 @@ static void drbd_update_congested(struct drbd_tconn *tconn)
  * with page_count == 0 or PageSlab.
  */
 static int _drbd_no_send_page(struct drbd_conf *mdev, struct page *page,
-                  int offset, size_t size, unsigned msg_flags)
+                             int offset, size_t size, unsigned msg_flags)
 {
-       int sent = drbd_send(mdev->tconn, mdev->tconn->data.socket, kmap(page) + offset, size, msg_flags);
+       struct socket *socket;
+       void *addr;
+       int err;
+
+       socket = mdev->tconn->data.socket;
+       addr = kmap(page) + offset;
+       err = drbd_send_all(mdev->tconn, socket, addr, size, msg_flags);
        kunmap(page);
-       if (sent == size)
-               mdev->send_cnt += size>>9;
-       return sent == size;
+       if (!err)
+               mdev->send_cnt += size >> 9;
+       return err;
 }
 
 static int _drbd_send_page(struct drbd_conf *mdev, struct page *page,
@@ -1426,7 +1432,7 @@ static int _drbd_send_page(struct drbd_conf *mdev, struct page *page,
         * __page_cache_release a page that would actually still be referenced
         * by someone, leading to some obscure delayed Oops somewhere else. */
        if (disable_sendpage || (page_count(page) < 1) || PageSlab(page))
-               return _drbd_no_send_page(mdev, page, offset, size, msg_flags);
+               return !_drbd_no_send_page(mdev, page, offset, size, msg_flags);
 
        msg_flags |= MSG_NOSIGNAL;
        drbd_update_congested(mdev->tconn);
@@ -1465,9 +1471,9 @@ static int _drbd_send_bio(struct drbd_conf *mdev, struct bio *bio)
        int i;
        /* hint all but last page with MSG_MORE */
        __bio_for_each_segment(bvec, bio, i, 0) {
-               if (!_drbd_no_send_page(mdev, bvec->bv_page,
-                                    bvec->bv_offset, bvec->bv_len,
-                                    i == bio->bi_vcnt -1 ? 0 : MSG_MORE))
+               if (_drbd_no_send_page(mdev, bvec->bv_page,
+                                      bvec->bv_offset, bvec->bv_len,
+                                      i == bio->bi_vcnt -1 ? 0 : MSG_MORE))
                        return 0;
        }
        return 1;