[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 04:28:43 CET 2012


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);
+			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



More information about the stgt mailing list