diff --git a/iscsi-scst/usr/event.c b/iscsi-scst/usr/event.c index 53c7d0f13..1f103cda7 100644 --- a/iscsi-scst/usr/event.c +++ b/iscsi-scst/usr/event.c @@ -979,6 +979,8 @@ static int handle_e_set_attr_value(int fd, const struct iscsi_kern_event *event) int rc; list_for_each_entry(t, &targets_list, tlist) { + if (!t->tgt_enabled) + continue; rc = isns_target_register(t->name); if (rc < 0) { /* @@ -1080,8 +1082,10 @@ retry: } else rc = 0; rc |= send_mgmt_cmd_res(event.tid, event.cookie, E_ENABLE_TARGET, rc, NULL); - if (rc == 0) + if (rc == 0) { target->tgt_enabled = 1; + isns_target_register(target->name); + } break; case E_DISABLE_TARGET: @@ -1092,8 +1096,10 @@ retry: } else rc = 0; rc |= send_mgmt_cmd_res(event.tid, event.cookie, E_DISABLE_TARGET, rc, NULL); - if (rc == 0) + if (rc == 0) { target->tgt_enabled = 0; + isns_target_deregister(target->name); + } break; case E_GET_ATTR_VALUE: diff --git a/iscsi-scst/usr/target.c b/iscsi-scst/usr/target.c index e118ebdaf..63afb23f5 100644 --- a/iscsi-scst/usr/target.c +++ b/iscsi-scst/usr/target.c @@ -349,7 +349,8 @@ int target_del(u32 tid, u32 cookie) exit(-1); } - isns_target_deregister(target->name); + if (target->tgt_enabled) + isns_target_deregister(target->name); target_free(target); @@ -421,7 +422,9 @@ int target_add(struct target *target, u32 *tid, u32 cookie) #endif list_add_tail(&target->tlist, &targets_list); +#ifdef CONFIG_SCST_PROC isns_target_register(target->name); +#endif out: return err;