drbd: moved md_io into mdev
authorPhilipp Reisner <philipp.reisner@linbit.com>
Sun, 26 Jun 2011 09:20:27 +0000 (11:20 +0200)
committerPhilipp Reisner <philipp.reisner@linbit.com>
Wed, 9 May 2012 08:17:24 +0000 (10:17 +0200)
Signed-off-by: Philipp Reisner <philipp.reisner@linbit.com>
Signed-off-by: Lars Ellenberg <lars.ellenberg@linbit.com>
drivers/block/drbd/drbd_actlog.c
drivers/block/drbd/drbd_int.h
drivers/block/drbd/drbd_worker.c

index cf0e63dd97da9bf09a88bf364cba87956cea4f42..c64ca6b956cf0ca519013ba81a6223fff0c46b60 100644 (file)
@@ -71,12 +71,10 @@ static int _drbd_md_sync_page_io(struct drbd_conf *mdev,
                                 int rw, int size)
 {
        struct bio *bio;
-       struct drbd_md_io md_io;
        int ok;
 
-       md_io.mdev = mdev;
-       init_completion(&md_io.event);
-       md_io.error = 0;
+       init_completion(&mdev->md_io.event);
+       mdev->md_io.error = 0;
 
        if ((rw & WRITE) && !test_bit(MD_NO_FUA, &mdev->flags))
                rw |= REQ_FUA | REQ_FLUSH;
@@ -88,7 +86,7 @@ static int _drbd_md_sync_page_io(struct drbd_conf *mdev,
        ok = (bio_add_page(bio, page, size, 0) == size);
        if (!ok)
                goto out;
-       bio->bi_private = &md_io;
+       bio->bi_private = &mdev->md_io;
        bio->bi_end_io = drbd_md_io_complete;
        bio->bi_rw = rw;
 
@@ -96,8 +94,8 @@ static int _drbd_md_sync_page_io(struct drbd_conf *mdev,
                bio_endio(bio, -EIO);
        else
                submit_bio(rw, bio);
-       wait_for_completion(&md_io.event);
-       ok = bio_flagged(bio, BIO_UPTODATE) && md_io.error == 0;
+       wait_for_completion(&mdev->md_io.event);
+       ok = bio_flagged(bio, BIO_UPTODATE) && mdev->md_io.error == 0;
 
  out:
        bio_put(bio);
index 5bb5114dd23cd7726a0b9864959b23ca7858b38e..91e69ffd5566ec3acb9e59e2b8a02506b45bda2e 100644 (file)
@@ -938,7 +938,6 @@ struct drbd_backing_dev {
 };
 
 struct drbd_md_io {
-       struct drbd_conf *mdev;
        struct completion event;
        int error;
 };
@@ -1095,7 +1094,8 @@ struct drbd_conf {
        wait_queue_head_t ee_wait;
        struct page *md_io_page;        /* one page buffer for md_io */
        struct page *md_io_tmpp;        /* for logical_block_size != 512 */
-       struct mutex md_io_mutex;       /* protects the md_io_buffer */
+       struct drbd_md_io md_io;
+       struct mutex md_io_mutex;       /* protects the md_io, md_io_page and md_io_tmpp */
        spinlock_t al_lock;
        wait_queue_head_t al_wait;
        struct lru_cache *act_log;      /* activity log */
index 4d3e6f6213ba0436cc2eceff16b7876e58d952b6..eedfe311c403c95c1337b6ed5bb99633b5158d2f 100644 (file)
@@ -70,8 +70,11 @@ rwlock_t global_state_lock;
 void drbd_md_io_complete(struct bio *bio, int error)
 {
        struct drbd_md_io *md_io;
+       struct drbd_conf *mdev;
 
        md_io = (struct drbd_md_io *)bio->bi_private;
+       mdev = container_of(md_io, struct drbd_conf, md_io);
+
        md_io->error = error;
 
        complete(&md_io->event);