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