--- usr/spc.c | 19 +++++++++++++++++++ 1 files changed, 19 insertions(+), 0 deletions(-) diff --git a/usr/spc.c b/usr/spc.c index eb435ae..ce6826f 100644 --- a/usr/spc.c +++ b/usr/spc.c @@ -157,6 +157,22 @@ static void update_vpd_b2(struct scsi_lu *lu, void *id) } } +static void update_vpd_b0(struct scsi_lu *lu, void *id) +{ + struct vpd *vpd_pg = lu->attrs.lu_vpd[PCODE_OFFSET(0xb0)]; + + /* maximum compare and write length : 64kb */ + vpd_pg->data[1] = 128; + + if (lu->attrs.thinprovisioning) { + /* maximum unmap lba count : maximum*/ + put_unaligned_be32(0xffffffff, vpd_pg->data + 16); + + /* maximum unmap block descriptor count : maximum*/ + put_unaligned_be32(0xffffffff, vpd_pg->data + 20); + } +} + static void update_b0_opt_xfer_gran(struct scsi_lu *lu, int opt_xfer_gran) { struct vpd *vpd_pg = lu->attrs.lu_vpd[PCODE_OFFSET(0xb0)]; @@ -1776,6 +1792,7 @@ tgtadm_err lu_config(struct scsi_lu *lu, char *params, match_fn_t *fn) match_strncpy(buf, &args[0], sizeof(buf)); attrs->thinprovisioning = atoi(buf); /* update the provisioning vpd page */ + lu_vpd[PCODE_OFFSET(0xb0)]->vpd_update(lu, NULL); lu_vpd[PCODE_OFFSET(0xb2)]->vpd_update(lu, NULL); break; case Opt_online: @@ -1848,6 +1865,8 @@ int spc_lu_init(struct scsi_lu *lu) lu_vpd[pg] = alloc_vpd(BLOCK_LIMITS_VPD_LEN); if (!lu_vpd[pg]) return -ENOMEM; + lu_vpd[pg]->vpd_update = update_vpd_b0; + lu_vpd[pg]->vpd_update(lu, NULL); /* VPD page 0xb2 LOGICAL BLOCK PROVISIONING*/ pg = PCODE_OFFSET(0xb2); -- 1.7.3.1 -- To unsubscribe from this list: send the line "unsubscribe stgt" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html