As I wrote, I don't think that this is correct. So I don't plan to merge the patch but I review it anyway. On Wed, 13 Jul 2011 11:12:26 -0500 "James R. Leu" <jleu@xxxxxxxx> wrote: > diff -uNr tgt-1.0.18/usr/spc.c tgt-1.0.18-inoc/usr/spc.c > --- tgt-1.0.18/usr/spc.c 2011-06-29 17:54:02.000000000 -0500 > +++ tgt-1.0.18-inoc/usr/spc.c 2011-07-13 10:09:23.341135538 -0500 > @@ -1687,10 +1687,20 @@ > break; > case Opt_online: > match_strncpy(buf, &args[0], sizeof(buf)); > - if (atoi(buf)) > - lu->dev_type_template.lu_online(lu); > - else > + switch (atoi(buf)) { > + case 1: > + err = lu->bst->bs_open(lu, lu->path, &lu->fd, &lu->size); > + if (!err) { > + lu->dev_type_template.lu_online(lu); > + } > + break; > + case 0: > + lu->bst->bs_close(lu); > lu->dev_type_template.lu_offline(lu); > + break; > + default: > + break; > + } > break; > case Opt_mode_page: > match_strncpy(buf, &args[0], sizeof(buf)); > diff -uNr tgt-1.0.18/usr/target.c tgt-1.0.18-inoc/usr/target.c > --- tgt-1.0.18/usr/target.c 2011-06-29 17:54:02.000000000 -0500 > +++ tgt-1.0.18-inoc/usr/target.c 2011-07-13 09:39:50.955594499 -0500 > @@ -1740,12 +1740,15 @@ > int tgt_set_target_state(int tid, char *str) > { > int i, err = TGTADM_INVALID_REQUEST; > + struct scsi_lu *lu; > struct target *target; > + int prev = 0; > > target = target_lookup(tid); > if (!target) > return TGTADM_NO_TARGET; > > + prev = target->target_state; > for (i = 0; i < ARRAY_SIZE(target_state); i++) { > if (!strcmp(target_state[i].name, str)) { > target->target_state = target_state[i].value; > @@ -1754,6 +1757,22 @@ > } > } > > + if (err == 0 && prev != target->target_state) { > + list_for_each_entry(lu, &target->device_list, device_siblings) { > + if (target->target_state == SCSI_TARGET_OFFLINE) { > + lu->bst->bs_close(lu); > + lu->dev_type_template.lu_offline(lu); Hmm, if an user set the target offline and the target has an offline lun, this executes the offline operations against the offline lun? > + } else { > + err = lu->bst->bs_open(lu, lu->path, &lu->fd, &lu->size); > + if (err) { > + target->target_state = prev; > + } else { > + lu->dev_type_template.lu_online(lu); Ditto, this could execute the online operations against the online lun. -- 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