Commit 155bd9d1 authored by Christoph Hellwig's avatar Christoph Hellwig Committed by Jens Axboe

drbd: remove ->this_bdev

DRBD keeps a block device open just to get and set the capacity from
it.  Switch to primarily using the disk capacity as intended by the
block layer, and sync it to the bdev using revalidate_disk_size.
Signed-off-by: default avatarChristoph Hellwig <hch@lst.de>
Signed-off-by: default avatarJens Axboe <axboe@kernel.dk>
parent 76cffccd
...@@ -865,7 +865,7 @@ int __drbd_change_sync(struct drbd_device *device, sector_t sector, int size, ...@@ -865,7 +865,7 @@ int __drbd_change_sync(struct drbd_device *device, sector_t sector, int size,
if (!get_ldev(device)) if (!get_ldev(device))
return 0; /* no disk, no metadata, no bitmap to manipulate bits in */ 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; esector = sector + (size >> 9) - 1;
if (!expect(sector < nr_sectors)) if (!expect(sector < nr_sectors))
......
...@@ -841,7 +841,6 @@ struct drbd_device { ...@@ -841,7 +841,6 @@ struct drbd_device {
sector_t p_size; /* partner's disk size */ sector_t p_size; /* partner's disk size */
struct request_queue *rq_queue; struct request_queue *rq_queue;
struct block_device *this_bdev;
struct gendisk *vdisk; struct gendisk *vdisk;
unsigned long last_reattach_jif; unsigned long last_reattach_jif;
......
...@@ -984,7 +984,10 @@ int drbd_send_sizes(struct drbd_peer_device *peer_device, int trigger_reply, enu ...@@ -984,7 +984,10 @@ int drbd_send_sizes(struct drbd_peer_device *peer_device, int trigger_reply, enu
p->d_size = cpu_to_be64(d_size); p->d_size = cpu_to_be64(d_size);
p->u_size = cpu_to_be64(u_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->max_bio_size = cpu_to_be32(max_bio_size);
p->queue_order_type = cpu_to_be16(q_order_type); p->queue_order_type = cpu_to_be16(q_order_type);
p->dds_flags = cpu_to_be16(flags); p->dds_flags = cpu_to_be16(flags);
...@@ -2029,17 +2032,13 @@ void drbd_init_set_defaults(struct drbd_device *device) ...@@ -2029,17 +2032,13 @@ void drbd_init_set_defaults(struct drbd_device *device)
device->local_max_bio_size = DRBD_MAX_BIO_SIZE_SAFE; 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) void drbd_set_my_capacity(struct drbd_device *device, sector_t size)
{ {
char ppb[10]; 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", drbd_info(device, "size = %s (%llu KB)\n",
ppsize(ppb, size>>1), (unsigned long long)size>>1); ppsize(ppb, size>>1), (unsigned long long)size>>1);
} }
...@@ -2069,7 +2068,8 @@ void drbd_device_cleanup(struct drbd_device *device) ...@@ -2069,7 +2068,8 @@ void drbd_device_cleanup(struct drbd_device *device)
} }
D_ASSERT(device, first_peer_device(device)->connection->net_conf == NULL); 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) { if (device->bitmap) {
/* maybe never allocated. */ /* maybe never allocated. */
drbd_bm_resize(device, 0, 1); drbd_bm_resize(device, 0, 1);
...@@ -2236,9 +2236,6 @@ void drbd_destroy_device(struct kref *kref) ...@@ -2236,9 +2236,6 @@ void drbd_destroy_device(struct kref *kref)
/* cleanup stuff that may have been allocated during /* cleanup stuff that may have been allocated during
* device (re-)configuration or state changes */ * device (re-)configuration or state changes */
if (device->this_bdev)
bdput(device->this_bdev);
drbd_backing_dev_free(device, device->ldev); drbd_backing_dev_free(device, device->ldev);
device->ldev = NULL; device->ldev = NULL;
...@@ -2765,8 +2762,6 @@ enum drbd_ret_code drbd_create_device(struct drbd_config_context *adm_ctx, unsig ...@@ -2765,8 +2762,6 @@ enum drbd_ret_code drbd_create_device(struct drbd_config_context *adm_ctx, unsig
sprintf(disk->disk_name, "drbd%d", minor); sprintf(disk->disk_name, "drbd%d", minor);
disk->private_data = device; disk->private_data = device;
device->this_bdev = bdget(MKDEV(DRBD_MAJOR, minor));
blk_queue_write_cache(q, true, true); blk_queue_write_cache(q, true, true);
/* Setting the max_hw_sectors to an odd value of 8kibyte here /* Setting the max_hw_sectors to an odd value of 8kibyte here
This triggers a max_bio_size message upon first attach or connect */ This triggers a max_bio_size message upon first attach or connect */
...@@ -3042,7 +3037,7 @@ void drbd_md_write(struct drbd_device *device, void *b) ...@@ -3042,7 +3037,7 @@ void drbd_md_write(struct drbd_device *device, void *b)
memset(buffer, 0, sizeof(*buffer)); 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++) for (i = UI_CURRENT; i < UI_SIZE; i++)
buffer->uuid[i] = cpu_to_be64(device->ldev->md.uuid[i]); buffer->uuid[i] = cpu_to_be64(device->ldev->md.uuid[i]);
buffer->flags = cpu_to_be32(device->ldev->md.flags); buffer->flags = cpu_to_be32(device->ldev->md.flags);
...@@ -3100,7 +3095,7 @@ void drbd_md_sync(struct drbd_device *device) ...@@ -3100,7 +3095,7 @@ void drbd_md_sync(struct drbd_device *device)
/* Update device->ldev->md.la_size_sect, /* Update device->ldev->md.la_size_sect,
* since we updated it on metadata. */ * 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); drbd_md_put_buffer(device);
out: out:
......
...@@ -996,7 +996,7 @@ drbd_determine_dev_size(struct drbd_device *device, enum dds_flags flags, struct ...@@ -996,7 +996,7 @@ drbd_determine_dev_size(struct drbd_device *device, enum dds_flags flags, struct
goto err_out; goto err_out;
} }
if (drbd_get_capacity(device->this_bdev) != size || if (get_capacity(device->vdisk) != size ||
drbd_bm_capacity(device) != size) { drbd_bm_capacity(device) != size) {
int err; int err;
err = drbd_bm_resize(device, size, !(flags & DDSF_NO_RESYNC)); err = drbd_bm_resize(device, size, !(flags & DDSF_NO_RESYNC));
...@@ -1933,8 +1933,7 @@ int drbd_adm_attach(struct sk_buff *skb, struct genl_info *info) ...@@ -1933,8 +1933,7 @@ int drbd_adm_attach(struct sk_buff *skb, struct genl_info *info)
/* Make sure the new disk is big enough /* Make sure the new disk is big enough
* (we may currently be R_PRIMARY with no local disk...) */ * (we may currently be R_PRIMARY with no local disk...) */
if (drbd_get_max_capacity(nbc) < if (drbd_get_max_capacity(nbc) < get_capacity(device->vdisk)) {
drbd_get_capacity(device->this_bdev)) {
retcode = ERR_DISK_TOO_SMALL; retcode = ERR_DISK_TOO_SMALL;
goto fail; goto fail;
} }
...@@ -3377,7 +3376,7 @@ static void device_to_statistics(struct device_statistics *s, ...@@ -3377,7 +3376,7 @@ static void device_to_statistics(struct device_statistics *s,
s->dev_disk_flags = md->flags; s->dev_disk_flags = md->flags;
put_ldev(device); 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_read = device->read_cnt;
s->dev_write = device->writ_cnt; s->dev_write = device->writ_cnt;
s->dev_al_writes = device->al_writ_cnt; s->dev_al_writes = device->al_writ_cnt;
...@@ -3817,8 +3816,7 @@ static int nla_put_status_info(struct sk_buff *skb, struct drbd_device *device, ...@@ -3817,8 +3816,7 @@ static int nla_put_status_info(struct sk_buff *skb, struct drbd_device *device,
if (nla_put_u32(skb, T_sib_reason, sib ? sib->sib_reason : SIB_GET_STATUS_REPLY) || 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_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_ed_uuid, device->ed_uuid) ||
nla_put_u64_0pad(skb, T_capacity, nla_put_u64_0pad(skb, T_capacity, get_capacity(device->vdisk)) ||
drbd_get_capacity(device->this_bdev)) ||
nla_put_u64_0pad(skb, T_send_cnt, device->send_cnt) || 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_recv_cnt, device->recv_cnt) ||
nla_put_u64_0pad(skb, T_read_cnt, device->read_cnt) || nla_put_u64_0pad(skb, T_read_cnt, device->read_cnt) ||
......
...@@ -1860,7 +1860,7 @@ read_in_block(struct drbd_peer_device *peer_device, u64 id, sector_t sector, ...@@ -1860,7 +1860,7 @@ read_in_block(struct drbd_peer_device *peer_device, u64 id, sector_t sector,
struct packet_info *pi) __must_hold(local) struct packet_info *pi) __must_hold(local)
{ {
struct drbd_device *device = peer_device->device; 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 drbd_peer_request *peer_req;
struct page *page; struct page *page;
int digest_size, err; int digest_size, err;
...@@ -2849,7 +2849,7 @@ static int receive_DataRequest(struct drbd_connection *connection, struct packet ...@@ -2849,7 +2849,7 @@ static int receive_DataRequest(struct drbd_connection *connection, struct packet
if (!peer_device) if (!peer_device)
return -EIO; return -EIO;
device = peer_device->device; device = peer_device->device;
capacity = drbd_get_capacity(device->this_bdev); capacity = get_capacity(device->vdisk);
sector = be64_to_cpu(p->sector); sector = be64_to_cpu(p->sector);
size = be32_to_cpu(p->blksize); size = be32_to_cpu(p->blksize);
...@@ -4117,7 +4117,7 @@ static int receive_sizes(struct drbd_connection *connection, struct packet_info ...@@ -4117,7 +4117,7 @@ static int receive_sizes(struct drbd_connection *connection, struct packet_info
if (!peer_device) if (!peer_device)
return config_unknown_volume(connection, pi); return config_unknown_volume(connection, pi);
device = peer_device->device; 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_size = be64_to_cpu(p->d_size);
p_usize = be64_to_cpu(p->u_size); p_usize = be64_to_cpu(p->u_size);
...@@ -4252,8 +4252,8 @@ static int receive_sizes(struct drbd_connection *connection, struct packet_info ...@@ -4252,8 +4252,8 @@ static int receive_sizes(struct drbd_connection *connection, struct packet_info
} }
if (device->state.conn > C_WF_REPORT_PARAMS) { if (device->state.conn > C_WF_REPORT_PARAMS) {
if (be64_to_cpu(p->c_size) != if (be64_to_cpu(p->c_size) != get_capacity(device->vdisk) ||
drbd_get_capacity(device->this_bdev) || ldsc) { ldsc) {
/* we have different sizes, probably peer /* we have different sizes, probably peer
* needs to know my new size... */ * needs to know my new size... */
drbd_send_sizes(peer_device, 0, ddsf); drbd_send_sizes(peer_device, 0, ddsf);
......
...@@ -888,7 +888,7 @@ static bool drbd_may_do_local_read(struct drbd_device *device, sector_t sector, ...@@ -888,7 +888,7 @@ static bool drbd_may_do_local_read(struct drbd_device *device, sector_t sector,
if (device->state.disk != D_INCONSISTENT) if (device->state.disk != D_INCONSISTENT)
return false; return false;
esector = sector + (size >> 9) - 1; 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, sector < nr_sectors);
D_ASSERT(device, esector < nr_sectors); D_ASSERT(device, esector < nr_sectors);
......
...@@ -591,7 +591,7 @@ static int make_resync_request(struct drbd_device *const device, int cancel) ...@@ -591,7 +591,7 @@ static int make_resync_request(struct drbd_device *const device, int cancel)
struct drbd_connection *const connection = peer_device ? peer_device->connection : NULL; struct drbd_connection *const connection = peer_device ? peer_device->connection : NULL;
unsigned long bit; unsigned long bit;
sector_t sector; 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 max_bio_size;
int number, rollback_i, size; int number, rollback_i, size;
int align, requeue = 0; int align, requeue = 0;
...@@ -769,7 +769,7 @@ static int make_ov_request(struct drbd_device *device, int cancel) ...@@ -769,7 +769,7 @@ static int make_ov_request(struct drbd_device *device, int cancel)
{ {
int number, i, size; int number, i, size;
sector_t sector; 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; bool stop_sector_reached = false;
if (unlikely(cancel)) if (unlikely(cancel))
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment