On 07/29/15 02:23, [email protected] wrote:
+static sector_t tcm_rbd_get_blocks(struct se_device *dev)
+{
+       struct tcm_rbd_dev *tcm_rbd_dev = TCM_RBD_DEV(dev);
+       sector_t blocks_long = tcm_rbd_dev->rbd_dev->mapping.size >>
+                                                               SECTOR_SHIFT;
+
+       if (SECTOR_SIZE == dev->dev_attrib.block_size)
+               return blocks_long;
+
+       switch (SECTOR_SIZE) {
+       case 4096:
+               switch (dev->dev_attrib.block_size) {
+               case 2048:
+                       blocks_long <<= 1;
+                       break;
+               case 1024:
+                       blocks_long <<= 2;
+                       break;
+               case 512:
+                       blocks_long <<= 3;
+               default:
+                       break;
+               }
+               break;
+       case 2048:
+               switch (dev->dev_attrib.block_size) {
+               case 4096:
+                       blocks_long >>= 1;
+                       break;
+               case 1024:
+                       blocks_long <<= 1;
+                       break;
+               case 512:
+                       blocks_long <<= 2;
+                       break;
+               default:
+                       break;
+               }
+               break;
+       case 1024:
+               switch (dev->dev_attrib.block_size) {
+               case 4096:
+                       blocks_long >>= 2;
+                       break;
+               case 2048:
+                       blocks_long >>= 1;
+                       break;
+               case 512:
+                       blocks_long <<= 1;
+                       break;
+               default:
+                       break;
+               }
+               break;
+       case 512:
+               switch (dev->dev_attrib.block_size) {
+               case 4096:
+                       blocks_long >>= 3;
+                       break;
+               case 2048:
+                       blocks_long >>= 2;
+                       break;
+               case 1024:
+                       blocks_long >>= 1;
+                       break;
+               default:
+                       break;
+               }
+               break;
+       default:
+               break;
+       }
+
+       return blocks_long;
+}

Hello Mike,

Had you already considered to replace the above switch / case statement by something like the following ?

static sector_t tcm_rbd_get_blocks(struct se_device *dev)
{
        return TCM_RBD_DEV(dev)->rbd_dev->mapping.size >>
                                ilog2(dev->dev_attrib.block_size);
}

Thanks,

Bart.
--
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