[stgt] [PATCH 2/3] SMC: Add an update argument "clear_slot" to force a storage element slot to become empty.

ronnie sahlberg ronniesahlberg at gmail.com
Sat Jan 28 21:21:17 CET 2012


This removes it from the storage element slot.
You can not do i/o or access the media when it is in the storage element slot.

To do I/O to the media you have to first move it to the data-transfer LUN.

So, this command should be safe. You can only remove the media while
it is in one of the storage element slot.
And while in the storage element slots, no initiator can access the media.


regards
ronnie sahlberg

On Sun, Jan 29, 2012 at 5:08 AM, FUJITA Tomonori
<fujita.tomonori at lab.ntt.co.jp> wrote:
> On Sat, 28 Jan 2012 14:28:43 +1100
> Ronnie Sahlberg <ronniesahlberg at gmail.com> wrote:
>
>> This new argument can be used for force an exiting storage element slot to become empty.
>>
>> Example:
>> tgtadm --mode logicalunit --op update --tid 1 --lun 1 \
>>  --params element_type=2,address=1025,clear_slot=1
>>
>> Signed-off-by: Ronnie Sahlberg <ronniesahlberg at gmail.com>
>> ---
>>  doc/tgtadm.8.xml |   10 ++++++++++
>>  usr/smc.c        |    9 +++++++++
>>  usr/smc.h        |    4 +++-
>>  3 files changed, 22 insertions(+), 1 deletions(-)
>>
>> diff --git a/doc/tgtadm.8.xml b/doc/tgtadm.8.xml
>> index a2dd394..f0710ac 100644
>> --- a/doc/tgtadm.8.xml
>> +++ b/doc/tgtadm.8.xml
>> @@ -407,6 +407,16 @@ Slot types:
>>          </listitem>
>>        </varlistentry>
>>
>> +      <varlistentry><term><option>clear_slot=<1></option></term>
>> +        <listitem>
>> +          <para>
>> +         This option is used to clear a storage element and remove any
>> +         media that may be present. Once this command completes
>> +         the storage element will show up as "Empty".
>> +          </para>
>> +        </listitem>
>> +      </varlistentry>
>> +
>>        <varlistentry><term><option>barcode=<string></option></term>
>>          <listitem>
>>            <para>
>> diff --git a/usr/smc.c b/usr/smc.c
>> index c0f25d6..3e77f2a 100644
>> --- a/usr/smc.c
>> +++ b/usr/smc.c
>> @@ -672,6 +672,11 @@ static int config_slot(struct scsi_lu *lu, struct tmp_param *tmp)
>>               s = slot_lookup(&smc->slots, tmp->element_type, tmp->address);
>>               if (!s)
>>                       break;  // Slot not found..
>> +             if (tmp->clear_slot) {
>> +                     set_slot_empty(s);
>
> What happens if we call set_slot_empty for a lu that has pending I/Os?
>
>
>> +                     ret = TGTADM_SUCCESS;
>> +                     break;
>> +             }
>>               strncpy(s->barcode, tmp->barcode, sizeof(s->barcode));
>>               set_slot_full(s, 0, NULL);
>>               ret = TGTADM_SUCCESS;
>> @@ -725,6 +730,10 @@ static int __smc_lu_config(struct scsi_lu *lu, char *params)
>>                       match_strncpy(buf, &args[0], sizeof(buf));
>>                       sv_param.sides = atoi(buf);
>>                       break;
>> +             case Opt_clear_slot:
>> +                     match_strncpy(buf, &args[0], sizeof(buf));
>> +                     sv_param.clear_slot = atoi(buf);
>> +                     break;
>>               case Opt_address:
>>                       match_strncpy(buf, &args[0], sizeof(buf));
>>                       sv_param.address = atoi(buf);
>> diff --git a/usr/smc.h b/usr/smc.h
>> index 0d216cd..eb50f45 100644
>> --- a/usr/smc.h
>> +++ b/usr/smc.h
>> @@ -75,7 +75,7 @@ struct smc_info {
>>
>>  enum {
>>       Opt_element_type, Opt_start_address,
>> -     Opt_quantity, Opt_sides,
>> +     Opt_quantity, Opt_sides, Opt_clear_slot,
>>       Opt_address, Opt_barcode,
>>       Opt_tid, Opt_lun,
>>       Opt_type, Opt_dump,
>> @@ -88,6 +88,7 @@ static match_table_t tokens = {
>>       {Opt_start_address, "start_address=%s"},
>>       {Opt_quantity, "quantity=%s"},
>>       {Opt_sides, "sides=%s"},
>> +     {Opt_clear_slot, "clear_slot=%s"},
>>       {Opt_address, "address=%s"},
>>       {Opt_barcode, "barcode=%s"},
>>       {Opt_tid, "tid=%s"},
>> @@ -116,6 +117,7 @@ struct tmp_param {
>>       uint64_t lun;
>>       char barcode[20];
>>       int sides;
>> +     int clear_slot;
>>  } sv_param;
>>
>>  #endif // _SMC_H_
>> --
>> 1.7.3.1
>>
>> --
>> To unsubscribe from this list: send the line "unsubscribe stgt" in
>> the body of a message to majordomo at vger.kernel.org
>> More majordomo info at  http://vger.kernel.org/majordomo-info.html
--
To unsubscribe from this list: send the line "unsubscribe stgt" in
the body of a message to majordomo at vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html



More information about the stgt mailing list