On Tue, 28 Feb 2012, Alex Elder wrote:

> Here is another set of small code tidy-ups:
>     - Define SECTOR_SHIFT and SECTOR_SIZE, and use these symbolic
>       names throughout.  Tell the blk_queue system our physical
>       block size, in the (unlikely) event we want to use something
>       other than the default.
>     - Delete the definition of struct rbd_info, which is never used.
>     - Move the definition of dev_to_rbd() down in its source file,
>       just above where it gets first used, and change its name to
>       dev_to_rbd_dev().
>     - Replace an open-coded operation in rbd_dev_release() to use
>       dev_to_rbd_dev() instead.
>     - Calculate the segment size for a given rbd_device just once in
>       rbd_init_disk().
>     - Use the '%zd' conversion specifier in rbd_snap_size_show(),
>       since the value formatted is a size_t.
>     - Switch to the '%llu' conversion specifier in rbd_snap_id_show().
>       since the value formatted is unsigned.
> 
> Signed-off-by: Alex Elder <[email protected]>
> ---
>  drivers/block/rbd.c       |   85 +++++++++++++++++++++++++++-----------------
>  drivers/block/rbd_types.h |    4 --
>  2 files changed, 52 insertions(+), 37 deletions(-)
> 
> diff --git a/drivers/block/rbd.c b/drivers/block/rbd.c
> index a04322c..229f974 100644
> --- a/drivers/block/rbd.c
> +++ b/drivers/block/rbd.c
> @@ -41,6 +41,15 @@
> 
>  #include "rbd_types.h"
> 
> +/*
> + * The basic unit of block I/O is a sector.  It is interpreted in a
> + * number of contexts in Linux (blk, bio, genhd), but the default is
> + * universally 512 bytes.  These symbols are just slightly more
> + * meaningful than the bare numbers they represent.
> + */
> +#define      SECTOR_SHIFT    9
> +#define      SECTOR_SIZE     (1ULL << SECTOR_SHIFT)
> +

I would expect the block layer already has #defines for these?



>  #define RBD_DRV_NAME "rbd"
>  #define RBD_DRV_NAME_LONG "rbd (rados block device)"
> 
> @@ -221,11 +230,6 @@ static struct device rbd_root_dev = {
>  };
> 
> 
> -static struct rbd_device *dev_to_rbd(struct device *dev)
> -{
> -     return container_of(dev, struct rbd_device, dev);
> -}
> -
>  static struct device *rbd_get_dev(struct rbd_device *rbd_dev)
>  {
>       return get_device(&rbd_dev->dev);
> @@ -742,7 +746,7 @@ static struct bio *bio_chain_clone(struct bio **old,
> struct bio **next,
> 
>                       /* split the bio. We'll release it either in the next
>                          call, or it will have to be released outside */
> -                     bp = bio_split(old_chain, (len - total) / 512ULL);
> +                     bp = bio_split(old_chain, (len - total) /
> SECTOR_SIZE);
>                       if (!bp)
>                               goto err_out;
> 
> @@ -1470,7 +1474,7 @@ static void rbd_rq_fn(struct request_queue *q)
>               do_write = (rq_data_dir(rq) == WRITE);
> 
>               size = blk_rq_bytes(rq);
> -             ofs = blk_rq_pos(rq) * 512ULL;
> +             ofs = blk_rq_pos(rq) * SECTOR_SIZE;
>               rq_bio = rq->bio;
>               if (do_write && rbd_dev->read_only) {
>                       __blk_end_request_all(rq, -EROFS);
> @@ -1481,7 +1485,7 @@ static void rbd_rq_fn(struct request_queue *q)
> 
>               dout("%s 0x%x bytes at 0x%llx\n",
>                    do_write ? "write" : "read",
> -                  size, blk_rq_pos(rq) * 512ULL);
> +                  size, blk_rq_pos(rq) * SECTOR_SIZE);
> 
>               num_segs = rbd_get_num_segments(&rbd_dev->header, ofs, size);
>               coll = rbd_alloc_coll(num_segs);
> @@ -1546,13 +1550,17 @@ static int rbd_merge_bvec(struct request_queue *q,
> struct bvec_merge_data *bmd,
>                         struct bio_vec *bvec)
>  {
>       struct rbd_device *rbd_dev = q->queuedata;
> -     unsigned int chunk_sectors = 1 << (rbd_dev->header.obj_order - 9);
> -     sector_t sector = bmd->bi_sector + get_start_sect(bmd->bi_bdev);
> -     unsigned int bio_sectors = bmd->bi_size >> 9;
> +     unsigned int chunk_sectors;
> +     sector_t sector;
> +     unsigned int bio_sectors;
>       int max;
> 
> +     chunk_sectors = 1 << (rbd_dev->header.obj_order - SECTOR_SHIFT);
> +     sector = bmd->bi_sector + get_start_sect(bmd->bi_bdev);
> +     bio_sectors = bmd->bi_size >> SECTOR_SHIFT;
> +
>       max =  (chunk_sectors - ((sector & (chunk_sectors - 1))
> -                              + bio_sectors)) << 9;
> +                              + bio_sectors)) << SECTOR_SHIFT;
>       if (max < 0)
>               max = 0; /* bio_add cannot handle a negative return */
>       if (max <= bvec->bv_len && bio_sectors == 0)
> @@ -1707,7 +1715,7 @@ static int __rbd_update_snaps(struct rbd_device
> *rbd_dev)
>               return ret;
> 
>       /* resized? */
> -     set_capacity(rbd_dev->disk, h.image_size / 512ULL);
> +     set_capacity(rbd_dev->disk, h.image_size / SECTOR_SIZE);
> 
>       down_write(&rbd_dev->header.snap_rwsem);
> 
> @@ -1744,6 +1752,7 @@ static int rbd_init_disk(struct rbd_device *rbd_dev)
>       struct gendisk *disk;
>       struct request_queue *q;
>       int rc;
> +     u64 segment_size;
>       u64 total_size = 0;
> 
>       /* contact OSD, request size info about the object being mapped */
> @@ -1779,11 +1788,15 @@ static int rbd_init_disk(struct rbd_device *rbd_dev)
>       if (!q)
>               goto out_disk;
> 
> +     /* We use the default size, but let's be explicit about it. */
> +     blk_queue_physical_block_size(q, SECTOR_SIZE);
> +
>       /* set io sizes to object size */
> -     blk_queue_max_hw_sectors(q, rbd_obj_bytes(&rbd_dev->header) / 512ULL);
> -     blk_queue_max_segment_size(q, rbd_obj_bytes(&rbd_dev->header));
> -     blk_queue_io_min(q, rbd_obj_bytes(&rbd_dev->header));
> -     blk_queue_io_opt(q, rbd_obj_bytes(&rbd_dev->header));
> +     segment_size = rbd_obj_bytes(&rbd_dev->header);
> +     blk_queue_max_hw_sectors(q, segment_size / SECTOR_SIZE);
> +     blk_queue_max_segment_size(q, segment_size);
> +     blk_queue_io_min(q, segment_size);
> +     blk_queue_io_opt(q, segment_size);
> 
>       blk_queue_merge_bvec(q, rbd_merge_bvec);
>       disk->queue = q;
> @@ -1794,7 +1807,7 @@ static int rbd_init_disk(struct rbd_device *rbd_dev)
>       rbd_dev->q = q;
> 
>       /* finally, announce the disk to the world */
> -     set_capacity(disk, total_size / 512ULL);
> +     set_capacity(disk, total_size / SECTOR_SIZE);
>       add_disk(disk);
> 
>       pr_info("%s: added with size 0x%llx\n",
> @@ -1811,10 +1824,15 @@ out:
>    sysfs
>  */
> 
> +static struct rbd_device *dev_to_rbd_dev(struct device *dev)
> +{
> +     return container_of(dev, struct rbd_device, dev);
> +}
> +
>  static ssize_t rbd_size_show(struct device *dev,
>                            struct device_attribute *attr, char *buf)
>  {
> -     struct rbd_device *rbd_dev = dev_to_rbd(dev);
> +     struct rbd_device *rbd_dev = dev_to_rbd_dev(dev);
> 
>       return sprintf(buf, "%llu\n", (unsigned long
> long)rbd_dev->header.image_size);
>  }
> @@ -1822,7 +1840,7 @@ static ssize_t rbd_size_show(struct device *dev,
>  static ssize_t rbd_major_show(struct device *dev,
>                             struct device_attribute *attr, char *buf)
>  {
> -     struct rbd_device *rbd_dev = dev_to_rbd(dev);
> +     struct rbd_device *rbd_dev = dev_to_rbd_dev(dev);
> 
>       return sprintf(buf, "%d\n", rbd_dev->major);
>  }
> @@ -1830,7 +1848,7 @@ static ssize_t rbd_major_show(struct device *dev,
>  static ssize_t rbd_client_id_show(struct device *dev,
>                                 struct device_attribute *attr, char *buf)
>  {
> -     struct rbd_device *rbd_dev = dev_to_rbd(dev);
> +     struct rbd_device *rbd_dev = dev_to_rbd_dev(dev);
> 
>       return sprintf(buf, "client%lld\n",
>                       ceph_client_id(rbd_dev->rbd_client->client));
> @@ -1839,7 +1857,7 @@ static ssize_t rbd_client_id_show(struct device *dev,
>  static ssize_t rbd_pool_show(struct device *dev,
>                            struct device_attribute *attr, char *buf)
>  {
> -     struct rbd_device *rbd_dev = dev_to_rbd(dev);
> +     struct rbd_device *rbd_dev = dev_to_rbd_dev(dev);
> 
>       return sprintf(buf, "%s\n", rbd_dev->pool_name);
>  }
> @@ -1847,7 +1865,7 @@ static ssize_t rbd_pool_show(struct device *dev,
>  static ssize_t rbd_name_show(struct device *dev,
>                            struct device_attribute *attr, char *buf)
>  {
> -     struct rbd_device *rbd_dev = dev_to_rbd(dev);
> +     struct rbd_device *rbd_dev = dev_to_rbd_dev(dev);
> 
>       return sprintf(buf, "%s\n", rbd_dev->obj);
>  }
> @@ -1856,7 +1874,7 @@ static ssize_t rbd_snap_show(struct device *dev,
>                            struct device_attribute *attr,
>                            char *buf)
>  {
> -     struct rbd_device *rbd_dev = dev_to_rbd(dev);
> +     struct rbd_device *rbd_dev = dev_to_rbd_dev(dev);
> 
>       return sprintf(buf, "%s\n", rbd_dev->snap_name);
>  }
> @@ -1866,7 +1884,7 @@ static ssize_t rbd_image_refresh(struct device *dev,
>                                const char *buf,
>                                size_t size)
>  {
> -     struct rbd_device *rbd_dev = dev_to_rbd(dev);
> +     struct rbd_device *rbd_dev = dev_to_rbd_dev(dev);
>       int rc;
>       int ret = size;
> 
> @@ -1931,7 +1949,7 @@ static ssize_t rbd_snap_size_show(struct device *dev,
>  {
>       struct rbd_snap *snap = container_of(dev, struct rbd_snap, dev);
> 
> -     return sprintf(buf, "%lld\n", (long long)snap->size);
> +     return sprintf(buf, "%zd\n", snap->size);
>  }
> 
>  static ssize_t rbd_snap_id_show(struct device *dev,
> @@ -1940,7 +1958,7 @@ static ssize_t rbd_snap_id_show(struct device *dev,
>  {
>       struct rbd_snap *snap = container_of(dev, struct rbd_snap, dev);
> 
> -     return sprintf(buf, "%lld\n", (long long)snap->id);
> +     return sprintf(buf, "%llu\n", (unsigned long long) snap->id);
>  }
> 
>  static DEVICE_ATTR(snap_size, S_IRUGO, rbd_snap_size_show, NULL);
> @@ -2231,7 +2249,8 @@ static void rbd_id_put(struct rbd_device *rbd_dev)
>  /*
>   * Skips over white space at *buf, and updates *buf to point to the
>   * first found non-space character (if any). Returns the length of
> - * the token (string of non-white space characters) found.
> + * the token (string of non-white space characters) found.  Note
> + * that *buf must be terminated with '\0'.
>   */
>  static inline size_t next_token(const char **buf)
>  {
> @@ -2249,13 +2268,14 @@ static inline size_t next_token(const char **buf)
>  /*
>   * Finds the next token in *buf, and if the provided token buffer is
>   * big enough, copies the found token into it.  The result, if
> - * copied, is guaranteed to be terminated with '\0'.
> + * copied, is guaranteed to be terminated with '\0'.  Note that *buf
> + * must be terminated with '\0' on entry.
>   *
>   * Returns the length of the token found (not including the '\0').
>   * Return value will be 0 if no token is found, and it will be >=
>   * token_size if the token would not fit.
>   *
> - * The *buf pointer will be updated point beyond the end of the
> + * The *buf pointer will be updated to point beyond the end of the
>   * found token.  Note that this occurs even if the token buffer is
>   * too small to hold it.
>   */
> @@ -2452,8 +2472,7 @@ static struct rbd_device *__rbd_get_dev(unsigned long
> id)
> 
>  static void rbd_dev_release(struct device *dev)
>  {
> -     struct rbd_device *rbd_dev =
> -                     container_of(dev, struct rbd_device, dev);
> +     struct rbd_device *rbd_dev = dev_to_rbd_dev(dev);
> 
>       if (rbd_dev->watch_request) {
>               struct ceph_client *client = rbd_dev->rbd_client->client;
> @@ -2516,7 +2535,7 @@ static ssize_t rbd_snap_add(struct device *dev,
>                           const char *buf,
>                           size_t count)
>  {
> -     struct rbd_device *rbd_dev = dev_to_rbd(dev);
> +     struct rbd_device *rbd_dev = dev_to_rbd_dev(dev);
>       int ret;
>       char *name = kmalloc(count + 1, GFP_KERNEL);
>       if (!name)
> diff --git a/drivers/block/rbd_types.h b/drivers/block/rbd_types.h
> index fc6c678..9507086 100644
> --- a/drivers/block/rbd_types.h
> +++ b/drivers/block/rbd_types.h
> @@ -41,10 +41,6 @@
>  #define RBD_HEADER_SIGNATURE "RBD"
>  #define RBD_HEADER_VERSION   "001.005"
> 
> -struct rbd_info {
> -     __le64 max_id;
> -} __attribute__ ((packed));
> -
>  struct rbd_image_snap_ondisk {
>       __le64 id;
>       __le64 image_size;
> -- 
> 1.7.5.4
> 
> --
> To unsubscribe from this list: send the line "unsubscribe ceph-devel" in
> the body of a message to [email protected]
> More majordomo info at  http://vger.kernel.org/majordomo-info.html
> 
> 
--
To unsubscribe from this list: send the line "unsubscribe ceph-devel" in
the body of a message to [email protected]
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to