From: Alex Elder <elder@inktank.com>
To: ceph-devel@vger.kernel.org
Subject: [PATCH 2/2] rbd: move more stuff into mapping
Date: Thu, 11 Oct 2012 08:43:44 -0700 [thread overview]
Message-ID: <5076E930.5090504@inktank.com> (raw)
In-Reply-To: <5076E8CF.1060108@inktank.com>
This moves a bunch of other fields out of the rbd device structure
and into the mapping structure.
Signed-off-by: Alex Elder <elder@inktank.com>
---
drivers/block/rbd.c | 57
+++++++++++++++++++++++++++------------------------
1 file changed, 30 insertions(+), 27 deletions(-)
diff --git a/drivers/block/rbd.c b/drivers/block/rbd.c
index 8189841..250446d 100644
--- a/drivers/block/rbd.c
+++ b/drivers/block/rbd.c
@@ -172,23 +172,22 @@ struct rbd_mapping {
int dev_id; /* blkdev unique id */
struct list_head id_list;
+ char name[DEV_NAME_LEN]; /* blkdev name, e.g. rbd3 */
+
+ int major; /* blkdev assigned major */
+ spinlock_t lock; /* queue lock */
+ struct gendisk *disk; /* blkdev's gendisk and rq */
+
+ struct rbd_options rbd_opts;
};
/*
* a single device
*/
struct rbd_device {
- int major; /* blkdev assigned major */
- struct gendisk *disk; /* blkdev's gendisk and rq */
-
u32 image_format; /* Either 1 or 2 */
- struct rbd_options rbd_opts;
struct rbd_client *rbd_client;
- char name[DEV_NAME_LEN]; /* blkdev name, e.g. rbd3 */
-
- spinlock_t lock; /* queue lock */
-
struct rbd_image_header header;
char *image_id;
size_t image_id_len;
@@ -452,7 +451,7 @@ static int parse_rbd_opts_token(char *c, void *private)
static int rbd_get_client(struct rbd_device *rbd_dev, const char
*mon_addr,
size_t mon_addr_len, char *options)
{
- struct rbd_options *rbd_opts = &rbd_dev->rbd_opts;
+ struct rbd_options *rbd_opts = &rbd_dev->mapping.rbd_opts;
struct ceph_options *ceph_opts;
struct rbd_client *rbdc;
@@ -672,7 +671,8 @@ static int rbd_dev_set_mapping(struct rbd_device
*rbd_dev, char *snap_name)
rbd_dev->mapping.size = rbd_dev->header.image_size;
rbd_dev->mapping.features = rbd_dev->header.features;
rbd_dev->mapping.snap_exists = false;
- rbd_dev->mapping.read_only = rbd_dev->rbd_opts.read_only;
+ rbd_dev->mapping.read_only =
+ rbd_dev->mapping.rbd_opts.read_only;
ret = 0;
} else {
ret = snap_by_name(rbd_dev, snap_name);
@@ -1293,7 +1293,7 @@ static void rbd_watch_cb(u64 ver, u64 notify_id,
u8 opcode, void *data)
rc = rbd_dev_refresh(rbd_dev, &hver);
if (rc)
pr_warning(RBD_DRV_NAME "%d got notification but failed to "
- " update snaps: %d\n", rbd_dev->major, rc);
+ " update snaps: %d\n", rbd_dev->mapping.major, rc);
rbd_req_sync_notify_ack(rbd_dev, hver, notify_id);
}
@@ -1573,7 +1573,7 @@ static int rbd_merge_bvec(struct request_queue *q,
struct bvec_merge_data *bmd,
static void rbd_free_disk(struct rbd_device *rbd_dev)
{
- struct gendisk *disk = rbd_dev->disk;
+ struct gendisk *disk = rbd_dev->mapping.disk;
if (!disk)
return;
@@ -1697,7 +1697,7 @@ static void rbd_update_mapping_size(struct
rbd_device *rbd_dev)
size = (sector_t) rbd_dev->header.image_size / SECTOR_SIZE;
dout("setting size to %llu sectors", (unsigned long long) size);
rbd_dev->mapping.size = (u64) size;
- set_capacity(rbd_dev->disk, size);
+ set_capacity(rbd_dev->mapping.disk, size);
}
/*
@@ -1772,13 +1772,14 @@ static int rbd_init_disk(struct rbd_device *rbd_dev)
snprintf(disk->disk_name, sizeof(disk->disk_name), RBD_DRV_NAME "%d",
rbd_dev->mapping.dev_id);
- disk->major = rbd_dev->major;
+ disk->major = rbd_dev->mapping.major;
disk->first_minor = 0;
disk->fops = &rbd_bd_ops;
disk->private_data = rbd_dev;
/* init rq */
- q = blk_init_queue(rbd_rq_fn, &rbd_dev->lock);
+ spin_lock_init(&rbd_dev->mapping.lock);
+ q = blk_init_queue(rbd_rq_fn, &rbd_dev->mapping.lock);
if (!q)
goto out_disk;
@@ -1797,9 +1798,10 @@ static int rbd_init_disk(struct rbd_device *rbd_dev)
q->queuedata = rbd_dev;
- rbd_dev->disk = disk;
+ rbd_dev->mapping.disk = disk;
- set_capacity(rbd_dev->disk, rbd_dev->mapping.size / SECTOR_SIZE);
+ set_capacity(rbd_dev->mapping.disk,
+ rbd_dev->mapping.size / SECTOR_SIZE);
return 0;
out_disk:
@@ -1824,7 +1826,7 @@ static ssize_t rbd_size_show(struct device *dev,
sector_t size;
down_read(&rbd_dev->header_rwsem);
- size = get_capacity(rbd_dev->disk);
+ size = get_capacity(rbd_dev->mapping.disk);
up_read(&rbd_dev->header_rwsem);
return sprintf(buf, "%llu\n", (unsigned long long) size * SECTOR_SIZE);
@@ -1848,7 +1850,7 @@ static ssize_t rbd_major_show(struct device *dev,
{
struct rbd_device *rbd_dev = dev_to_rbd_dev(dev);
- return sprintf(buf, "%d\n", rbd_dev->major);
+ return sprintf(buf, "%d\n", rbd_dev->mapping.major);
}
static ssize_t rbd_client_id_show(struct device *dev,
@@ -3034,7 +3036,6 @@ static ssize_t rbd_add(struct bus_type *bus,
goto err_out_mem;
/* static rbd_device initialization */
- spin_lock_init(&rbd_dev->lock);
INIT_LIST_HEAD(&rbd_dev->snaps);
init_rwsem(&rbd_dev->header_rwsem);
@@ -3076,14 +3077,15 @@ static ssize_t rbd_add(struct bus_type *bus,
/* Fill in the device name, now that we have its id. */
BUILD_BUG_ON(DEV_NAME_LEN
< sizeof (RBD_DRV_NAME) + MAX_INT_FORMAT_WIDTH);
- sprintf(rbd_dev->name, "%s%d", RBD_DRV_NAME, rbd_dev->mapping.dev_id);
+ sprintf(rbd_dev->mapping.name, "%s%d",
+ RBD_DRV_NAME, rbd_dev->mapping.dev_id);
/* Get our block major device number. */
- rc = register_blkdev(0, rbd_dev->name);
+ rc = register_blkdev(0, rbd_dev->mapping.name);
if (rc < 0)
goto err_out_id;
- rbd_dev->major = rc;
+ rbd_dev->mapping.major = rc;
/* Set up the blkdev mapping. */
@@ -3112,9 +3114,10 @@ static ssize_t rbd_add(struct bus_type *bus,
/* Everything's ready. Announce the disk to the world. */
- add_disk(rbd_dev->disk);
+ add_disk(rbd_dev->mapping.disk);
- pr_info("%s: added with size 0x%llx\n", rbd_dev->disk->disk_name,
+ pr_info("%s: added with size 0x%llx\n",
+ rbd_dev->mapping.disk->disk_name,
(unsigned long long) rbd_dev->mapping.size);
return count;
@@ -3129,7 +3132,7 @@ err_out_bus:
err_out_disk:
rbd_free_disk(rbd_dev);
err_out_blkdev:
- unregister_blkdev(rbd_dev->major, rbd_dev->name);
+ unregister_blkdev(rbd_dev->mapping.major, rbd_dev->mapping.name);
err_out_id:
rbd_dev_id_put(&rbd_dev->mapping);
err_out_header:
@@ -3189,7 +3192,7 @@ static void rbd_dev_release(struct device *dev)
/* clean up and free blkdev */
rbd_free_disk(rbd_dev);
- unregister_blkdev(rbd_dev->major, rbd_dev->name);
+ unregister_blkdev(rbd_dev->mapping.major, rbd_dev->mapping.name);
/* release allocated disk header fields */
rbd_header_free(&rbd_dev->header);
--
1.7.9.5
next prev parent reply other threads:[~2012-10-11 15:43 UTC|newest]
Thread overview: 4+ messages / expand[flat|nested] mbox.gz Atom feed top
2012-10-11 15:42 [PATCH 0/2] rbd: separating mapping info from rbd_device Alex Elder
2012-10-11 15:43 ` [PATCH 1/2] rbd: move dev_id and list links into mapping Alex Elder
2012-10-11 15:43 ` Alex Elder [this message]
2012-10-22 13:07 ` [PATCH 0/2] rbd: separating mapping info from rbd_device Alex Elder
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=5076E930.5090504@inktank.com \
--to=elder@inktank.com \
--cc=ceph-devel@vger.kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.