Revision d34682cd block/iscsi.c
b/block/iscsi.c | ||
---|---|---|
1265 | 1265 |
sizeof(struct scsi_inquiry_block_limits)); |
1266 | 1266 |
scsi_free_scsi_task(task); |
1267 | 1267 |
task = NULL; |
1268 |
|
|
1269 |
if (iscsilun->bl.max_unmap < 0xffffffff) { |
|
1270 |
bs->bl.max_discard = sector_lun2qemu(iscsilun->bl.max_unmap, |
|
1271 |
iscsilun); |
|
1272 |
} |
|
1273 |
bs->bl.discard_alignment = sector_lun2qemu(iscsilun->bl.opt_unmap_gran, |
|
1274 |
iscsilun); |
|
1275 |
|
|
1276 |
if (iscsilun->bl.max_ws_len < 0xffffffff) { |
|
1277 |
bs->bl.max_write_zeroes = sector_lun2qemu(iscsilun->bl.max_ws_len, |
|
1278 |
iscsilun); |
|
1279 |
} |
|
1280 |
bs->bl.write_zeroes_alignment = sector_lun2qemu(iscsilun->bl.opt_unmap_gran, |
|
1281 |
iscsilun); |
|
1282 |
|
|
1283 |
bs->bl.opt_transfer_length = sector_lun2qemu(iscsilun->bl.opt_xfer_len, |
|
1284 |
iscsilun); |
|
1285 | 1268 |
} |
1286 | 1269 |
|
1287 | 1270 |
#if defined(LIBISCSI_FEATURE_NOP_COUNTER) |
... | ... | |
1326 | 1309 |
memset(iscsilun, 0, sizeof(IscsiLun)); |
1327 | 1310 |
} |
1328 | 1311 |
|
1312 |
static int iscsi_refresh_limits(BlockDriverState *bs) |
|
1313 |
{ |
|
1314 |
IscsiLun *iscsilun = bs->opaque; |
|
1315 |
|
|
1316 |
/* We don't actually refresh here, but just return data queried in |
|
1317 |
* iscsi_open(): iscsi targets don't change their limits. */ |
|
1318 |
if (iscsilun->lbp.lbpu || iscsilun->lbp.lbpws) { |
|
1319 |
if (iscsilun->bl.max_unmap < 0xffffffff) { |
|
1320 |
bs->bl.max_discard = sector_lun2qemu(iscsilun->bl.max_unmap, |
|
1321 |
iscsilun); |
|
1322 |
} |
|
1323 |
bs->bl.discard_alignment = sector_lun2qemu(iscsilun->bl.opt_unmap_gran, |
|
1324 |
iscsilun); |
|
1325 |
|
|
1326 |
if (iscsilun->bl.max_ws_len < 0xffffffff) { |
|
1327 |
bs->bl.max_write_zeroes = sector_lun2qemu(iscsilun->bl.max_ws_len, |
|
1328 |
iscsilun); |
|
1329 |
} |
|
1330 |
bs->bl.write_zeroes_alignment = sector_lun2qemu(iscsilun->bl.opt_unmap_gran, |
|
1331 |
iscsilun); |
|
1332 |
|
|
1333 |
bs->bl.opt_transfer_length = sector_lun2qemu(iscsilun->bl.opt_xfer_len, |
|
1334 |
iscsilun); |
|
1335 |
} |
|
1336 |
|
|
1337 |
return 0; |
|
1338 |
} |
|
1339 |
|
|
1329 | 1340 |
static int iscsi_truncate(BlockDriverState *bs, int64_t offset) |
1330 | 1341 |
{ |
1331 | 1342 |
IscsiLun *iscsilun = bs->opaque; |
... | ... | |
1438 | 1449 |
.bdrv_getlength = iscsi_getlength, |
1439 | 1450 |
.bdrv_get_info = iscsi_get_info, |
1440 | 1451 |
.bdrv_truncate = iscsi_truncate, |
1452 |
.bdrv_refresh_limits = iscsi_refresh_limits, |
|
1441 | 1453 |
|
1442 | 1454 |
#if defined(LIBISCSI_FEATURE_IOVECTOR) |
1443 | 1455 |
.bdrv_co_get_block_status = iscsi_co_get_block_status, |
Also available in: Unified diff