| From be7b1c46fa4033879ea7c85726f58b7370995b71 Mon Sep 17 00:00:00 2001 |
| From: Josef Bacik <jbacik@fb.com> |
| Date: Fri, 2 Dec 2016 16:19:12 -0500 |
| Subject: [PATCH] nbd: use loff_t for blocksize and nbd_set_size args |
| |
| commit ef77b515243b3499d62cf446eda6ca7e0a0b079c upstream. |
| |
| If we have large devices (say like the 40t drive I was trying to test with) we |
| will end up overflowing the int arguments to nbd_set_size and not get the right |
| size for our device. Fix this by using loff_t everywhere so I don't have to |
| think about this again. Thanks, |
| |
| Signed-off-by: Josef Bacik <jbacik@fb.com> |
| Signed-off-by: Jens Axboe <axboe@fb.com> |
| Signed-off-by: Paul Gortmaker <paul.gortmaker@windriver.com> |
| |
| diff --git a/drivers/block/nbd.c b/drivers/block/nbd.c |
| index a9e398019f38..90a4142d6ece 100644 |
| --- a/drivers/block/nbd.c |
| +++ b/drivers/block/nbd.c |
| @@ -54,7 +54,7 @@ struct nbd_device { |
| |
| struct mutex tx_lock; |
| struct gendisk *disk; |
| - int blksize; |
| + loff_t blksize; |
| loff_t bytesize; |
| int xmit_timeout; |
| bool timedout; |
| @@ -137,7 +137,7 @@ static void nbd_size_update(struct nbd_device *nbd, struct block_device *bdev) |
| } |
| |
| static int nbd_size_set(struct nbd_device *nbd, struct block_device *bdev, |
| - int blocksize, int nr_blocks) |
| + loff_t blocksize, loff_t nr_blocks) |
| { |
| int ret; |
| |
| @@ -146,7 +146,7 @@ static int nbd_size_set(struct nbd_device *nbd, struct block_device *bdev, |
| return ret; |
| |
| nbd->blksize = blocksize; |
| - nbd->bytesize = (loff_t)blocksize * (loff_t)nr_blocks; |
| + nbd->bytesize = blocksize * nr_blocks; |
| |
| nbd_size_update(nbd, bdev); |
| |
| @@ -936,7 +936,7 @@ static int nbd_dev_dbg_init(struct nbd_device *nbd) |
| debugfs_create_file("tasks", 0444, dir, nbd, &nbd_dbg_tasks_ops); |
| debugfs_create_u64("size_bytes", 0444, dir, &nbd->bytesize); |
| debugfs_create_u32("timeout", 0444, dir, &nbd->xmit_timeout); |
| - debugfs_create_u32("blocksize", 0444, dir, &nbd->blksize); |
| + debugfs_create_u64("blocksize", 0444, dir, &nbd->blksize); |
| debugfs_create_file("flags", 0444, dir, nbd, &nbd_dbg_flags_ops); |
| |
| return 0; |
| -- |
| 2.12.0 |
| |