iscsi.c (92397116a6789ed4455c6dacea0f378cae096d8d) | iscsi.c (d34682cd4a06efe9ee3fc8cb7e8a0ea445299989) |
---|---|
1/* 2 * QEMU Block driver for iSCSI images 3 * 4 * Copyright (c) 2010-2011 Ronnie Sahlberg <ronniesahlberg@gmail.com> 5 * Copyright (c) 2012-2013 Peter Lieven <pl@kamp.de> 6 * 7 * Permission is hereby granted, free of charge, to any person obtaining a copy 8 * of this software and associated documentation files (the "Software"), to deal --- 1251 unchanged lines hidden (view full) --- 1260 error_report("iSCSI: failed to unmarshall inquiry datain blob"); 1261 ret = -EINVAL; 1262 goto out; 1263 } 1264 memcpy(&iscsilun->bl, inq_bl, 1265 sizeof(struct scsi_inquiry_block_limits)); 1266 scsi_free_scsi_task(task); 1267 task = NULL; | 1/* 2 * QEMU Block driver for iSCSI images 3 * 4 * Copyright (c) 2010-2011 Ronnie Sahlberg <ronniesahlberg@gmail.com> 5 * Copyright (c) 2012-2013 Peter Lieven <pl@kamp.de> 6 * 7 * Permission is hereby granted, free of charge, to any person obtaining a copy 8 * of this software and associated documentation files (the "Software"), to deal --- 1251 unchanged lines hidden (view full) --- 1260 error_report("iSCSI: failed to unmarshall inquiry datain blob"); 1261 ret = -EINVAL; 1262 goto out; 1263 } 1264 memcpy(&iscsilun->bl, inq_bl, 1265 sizeof(struct scsi_inquiry_block_limits)); 1266 scsi_free_scsi_task(task); 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 } 1286 1287#if defined(LIBISCSI_FEATURE_NOP_COUNTER) 1288 /* Set up a timer for sending out iSCSI NOPs */ 1289 iscsilun->nop_timer = timer_new_ms(QEMU_CLOCK_REALTIME, iscsi_nop_timed_event, iscsilun); 1290 timer_mod(iscsilun->nop_timer, qemu_clock_get_ms(QEMU_CLOCK_REALTIME) + NOP_INTERVAL); 1291#endif 1292 --- 28 unchanged lines hidden (view full) --- 1321 timer_free(iscsilun->nop_timer); 1322 } 1323 qemu_aio_set_fd_handler(iscsi_get_fd(iscsi), NULL, NULL, NULL); 1324 iscsi_destroy_context(iscsi); 1325 g_free(iscsilun->zeroblock); 1326 memset(iscsilun, 0, sizeof(IscsiLun)); 1327} 1328 | 1268 } 1269 1270#if defined(LIBISCSI_FEATURE_NOP_COUNTER) 1271 /* Set up a timer for sending out iSCSI NOPs */ 1272 iscsilun->nop_timer = timer_new_ms(QEMU_CLOCK_REALTIME, iscsi_nop_timed_event, iscsilun); 1273 timer_mod(iscsilun->nop_timer, qemu_clock_get_ms(QEMU_CLOCK_REALTIME) + NOP_INTERVAL); 1274#endif 1275 --- 28 unchanged lines hidden (view full) --- 1304 timer_free(iscsilun->nop_timer); 1305 } 1306 qemu_aio_set_fd_handler(iscsi_get_fd(iscsi), NULL, NULL, NULL); 1307 iscsi_destroy_context(iscsi); 1308 g_free(iscsilun->zeroblock); 1309 memset(iscsilun, 0, sizeof(IscsiLun)); 1310} 1311 |
1312static 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 |
|
1329static int iscsi_truncate(BlockDriverState *bs, int64_t offset) 1330{ 1331 IscsiLun *iscsilun = bs->opaque; 1332 int ret = 0; 1333 1334 if (iscsilun->type != TYPE_DISK) { 1335 return -ENOTSUP; 1336 } --- 96 unchanged lines hidden (view full) --- 1433 .bdrv_file_open = iscsi_open, 1434 .bdrv_close = iscsi_close, 1435 .bdrv_create = iscsi_create, 1436 .create_options = iscsi_create_options, 1437 1438 .bdrv_getlength = iscsi_getlength, 1439 .bdrv_get_info = iscsi_get_info, 1440 .bdrv_truncate = iscsi_truncate, | 1340static int iscsi_truncate(BlockDriverState *bs, int64_t offset) 1341{ 1342 IscsiLun *iscsilun = bs->opaque; 1343 int ret = 0; 1344 1345 if (iscsilun->type != TYPE_DISK) { 1346 return -ENOTSUP; 1347 } --- 96 unchanged lines hidden (view full) --- 1444 .bdrv_file_open = iscsi_open, 1445 .bdrv_close = iscsi_close, 1446 .bdrv_create = iscsi_create, 1447 .create_options = iscsi_create_options, 1448 1449 .bdrv_getlength = iscsi_getlength, 1450 .bdrv_get_info = iscsi_get_info, 1451 .bdrv_truncate = iscsi_truncate, |
1452 .bdrv_refresh_limits = iscsi_refresh_limits, |
|
1441 1442#if defined(LIBISCSI_FEATURE_IOVECTOR) 1443 .bdrv_co_get_block_status = iscsi_co_get_block_status, 1444#endif 1445 .bdrv_co_discard = iscsi_co_discard, 1446#if defined(SCSI_SENSE_ASCQ_CAPACITY_DATA_HAS_CHANGED) 1447 .bdrv_co_write_zeroes = iscsi_co_write_zeroes, 1448#endif --- 43 unchanged lines hidden --- | 1453 1454#if defined(LIBISCSI_FEATURE_IOVECTOR) 1455 .bdrv_co_get_block_status = iscsi_co_get_block_status, 1456#endif 1457 .bdrv_co_discard = iscsi_co_discard, 1458#if defined(SCSI_SENSE_ASCQ_CAPACITY_DATA_HAS_CHANGED) 1459 .bdrv_co_write_zeroes = iscsi_co_write_zeroes, 1460#endif --- 43 unchanged lines hidden --- |