|
@@ -667,7 +667,13 @@ target_emulate_readcapacity(struct se_cmd *cmd)
|
|
|
{
|
|
|
struct se_device *dev = SE_DEV(cmd);
|
|
|
unsigned char *buf = cmd->t_task->t_task_buf;
|
|
|
- u32 blocks = dev->transport->get_blocks(dev);
|
|
|
+ unsigned long long blocks_long = dev->transport->get_blocks(dev);
|
|
|
+ u32 blocks;
|
|
|
+
|
|
|
+ if (blocks_long >= 0x00000000ffffffff)
|
|
|
+ blocks = 0xffffffff;
|
|
|
+ else
|
|
|
+ blocks = (u32)blocks_long;
|
|
|
|
|
|
buf[0] = (blocks >> 24) & 0xff;
|
|
|
buf[1] = (blocks >> 16) & 0xff;
|