[stgt] [PATCH 2/3] SMC: Add an update argument "clear_slot" to force a storage element slot to become empty.
FUJITA Tomonori
fujita.tomonori at lab.ntt.co.jp
Sat Jan 28 19:08:24 CET 2012
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