if (!get_ldev(device))
                return 0; /* no disk, no metadata, no bitmap to manipulate bits in */
 
-       nr_sectors = drbd_get_capacity(device->this_bdev);
+       nr_sectors = get_capacity(device->vdisk);
        esector = sector + (size >> 9) - 1;
 
        if (!expect(sector < nr_sectors))
 
 
        sector_t p_size;     /* partner's disk size */
        struct request_queue *rq_queue;
-       struct block_device *this_bdev;
        struct gendisk      *vdisk;
 
        unsigned long last_reattach_jif;
 
 
        p->d_size = cpu_to_be64(d_size);
        p->u_size = cpu_to_be64(u_size);
-       p->c_size = cpu_to_be64(trigger_reply ? 0 : drbd_get_capacity(device->this_bdev));
+       if (trigger_reply)
+               p->c_size = 0;
+       else
+               p->c_size = cpu_to_be64(get_capacity(device->vdisk));
        p->max_bio_size = cpu_to_be32(max_bio_size);
        p->queue_order_type = cpu_to_be16(q_order_type);
        p->dds_flags = cpu_to_be16(flags);
        device->local_max_bio_size = DRBD_MAX_BIO_SIZE_SAFE;
 }
 
-static void _drbd_set_my_capacity(struct drbd_device *device, sector_t size)
-{
-       /* set_capacity(device->this_bdev->bd_disk, size); */
-       set_capacity(device->vdisk, size);
-       device->this_bdev->bd_inode->i_size = (loff_t)size << 9;
-}
-
 void drbd_set_my_capacity(struct drbd_device *device, sector_t size)
 {
        char ppb[10];
-       _drbd_set_my_capacity(device, size);
+
+       set_capacity(device->vdisk, size);
+       revalidate_disk_size(device->vdisk, false);
+
        drbd_info(device, "size = %s (%llu KB)\n",
                ppsize(ppb, size>>1), (unsigned long long)size>>1);
 }
        }
        D_ASSERT(device, first_peer_device(device)->connection->net_conf == NULL);
 
-       _drbd_set_my_capacity(device, 0);
+       set_capacity(device->vdisk, 0);
+       revalidate_disk_size(device->vdisk, false);
        if (device->bitmap) {
                /* maybe never allocated. */
                drbd_bm_resize(device, 0, 1);
        /* cleanup stuff that may have been allocated during
         * device (re-)configuration or state changes */
 
-       if (device->this_bdev)
-               bdput(device->this_bdev);
-
        drbd_backing_dev_free(device, device->ldev);
        device->ldev = NULL;
 
        sprintf(disk->disk_name, "drbd%d", minor);
        disk->private_data = device;
 
-       device->this_bdev = bdget(MKDEV(DRBD_MAJOR, minor));
-
        blk_queue_write_cache(q, true, true);
        /* Setting the max_hw_sectors to an odd value of 8kibyte here
           This triggers a max_bio_size message upon first attach or connect */
 
        memset(buffer, 0, sizeof(*buffer));
 
-       buffer->la_size_sect = cpu_to_be64(drbd_get_capacity(device->this_bdev));
+       buffer->la_size_sect = cpu_to_be64(get_capacity(device->vdisk));
        for (i = UI_CURRENT; i < UI_SIZE; i++)
                buffer->uuid[i] = cpu_to_be64(device->ldev->md.uuid[i]);
        buffer->flags = cpu_to_be32(device->ldev->md.flags);
 
        /* Update device->ldev->md.la_size_sect,
         * since we updated it on metadata. */
-       device->ldev->md.la_size_sect = drbd_get_capacity(device->this_bdev);
+       device->ldev->md.la_size_sect = get_capacity(device->vdisk);
 
        drbd_md_put_buffer(device);
 out:
 
                        goto err_out;
        }
 
-       if (drbd_get_capacity(device->this_bdev) != size ||
+       if (get_capacity(device->vdisk) != size ||
            drbd_bm_capacity(device) != size) {
                int err;
                err = drbd_bm_resize(device, size, !(flags & DDSF_NO_RESYNC));
 
        /* Make sure the new disk is big enough
         * (we may currently be R_PRIMARY with no local disk...) */
-       if (drbd_get_max_capacity(nbc) <
-           drbd_get_capacity(device->this_bdev)) {
+       if (drbd_get_max_capacity(nbc) < get_capacity(device->vdisk)) {
                retcode = ERR_DISK_TOO_SMALL;
                goto fail;
        }
                s->dev_disk_flags = md->flags;
                put_ldev(device);
        }
-       s->dev_size = drbd_get_capacity(device->this_bdev);
+       s->dev_size = get_capacity(device->vdisk);
        s->dev_read = device->read_cnt;
        s->dev_write = device->writ_cnt;
        s->dev_al_writes = device->al_writ_cnt;
        if (nla_put_u32(skb, T_sib_reason, sib ? sib->sib_reason : SIB_GET_STATUS_REPLY) ||
            nla_put_u32(skb, T_current_state, device->state.i) ||
            nla_put_u64_0pad(skb, T_ed_uuid, device->ed_uuid) ||
-           nla_put_u64_0pad(skb, T_capacity,
-                            drbd_get_capacity(device->this_bdev)) ||
+           nla_put_u64_0pad(skb, T_capacity, get_capacity(device->vdisk)) ||
            nla_put_u64_0pad(skb, T_send_cnt, device->send_cnt) ||
            nla_put_u64_0pad(skb, T_recv_cnt, device->recv_cnt) ||
            nla_put_u64_0pad(skb, T_read_cnt, device->read_cnt) ||
 
              struct packet_info *pi) __must_hold(local)
 {
        struct drbd_device *device = peer_device->device;
-       const sector_t capacity = drbd_get_capacity(device->this_bdev);
+       const sector_t capacity = get_capacity(device->vdisk);
        struct drbd_peer_request *peer_req;
        struct page *page;
        int digest_size, err;
        if (!peer_device)
                return -EIO;
        device = peer_device->device;
-       capacity = drbd_get_capacity(device->this_bdev);
+       capacity = get_capacity(device->vdisk);
 
        sector = be64_to_cpu(p->sector);
        size   = be32_to_cpu(p->blksize);
        if (!peer_device)
                return config_unknown_volume(connection, pi);
        device = peer_device->device;
-       cur_size = drbd_get_capacity(device->this_bdev);
+       cur_size = get_capacity(device->vdisk);
 
        p_size = be64_to_cpu(p->d_size);
        p_usize = be64_to_cpu(p->u_size);
        }
 
        if (device->state.conn > C_WF_REPORT_PARAMS) {
-               if (be64_to_cpu(p->c_size) !=
-                   drbd_get_capacity(device->this_bdev) || ldsc) {
+               if (be64_to_cpu(p->c_size) != get_capacity(device->vdisk) ||
+                   ldsc) {
                        /* we have different sizes, probably peer
                         * needs to know my new size... */
                        drbd_send_sizes(peer_device, 0, ddsf);
 
        if (device->state.disk != D_INCONSISTENT)
                return false;
        esector = sector + (size >> 9) - 1;
-       nr_sectors = drbd_get_capacity(device->this_bdev);
+       nr_sectors = get_capacity(device->vdisk);
        D_ASSERT(device, sector  < nr_sectors);
        D_ASSERT(device, esector < nr_sectors);
 
 
        struct drbd_connection *const connection = peer_device ? peer_device->connection : NULL;
        unsigned long bit;
        sector_t sector;
-       const sector_t capacity = drbd_get_capacity(device->this_bdev);
+       const sector_t capacity = get_capacity(device->vdisk);
        int max_bio_size;
        int number, rollback_i, size;
        int align, requeue = 0;
 {
        int number, i, size;
        sector_t sector;
-       const sector_t capacity = drbd_get_capacity(device->this_bdev);
+       const sector_t capacity = get_capacity(device->vdisk);
        bool stop_sector_reached = false;
 
        if (unlikely(cancel))