On Mon, 2010-11-08 at 10:56 -0500, Christoph Hellwig wrote: > plain text document attachment (lio-fix-thread-shutdown) > In the these days with the kthread API we should never send signals to > kernel threads, but let start/stop be handled by the kthread helpers. > > Note that the set_user_nice for all threads in the target code does not > seem particularly nice to the rest of the system. Please re-evaluate if > the nice value is nessecary. > > Signed-off-by: Christoph Hellwig <hch@xxxxxx> This patch is not quite correct as drivers/target/lio-target/ is currently the last code *not* using linux/kthread.h in the tree. I recall running into some issue wrt to kernel sockets + signals during the original convertion use kthread.h, but I don't recall the specifics atm. For now I will drop the lio-target part of this patch, and have a look at doing this conversion to kthread.h properly during the drivers/target/lio-target review for Boaz in the upcoming week. Thanks! --nab > > Index: lio-core-2.6/drivers/target/lio-target/iscsi_target.c > =================================================================== > --- lio-core-2.6.orig/drivers/target/lio-target/iscsi_target.c 2010-11-06 20:36:08.953253984 +0100 > +++ lio-core-2.6/drivers/target/lio-target/iscsi_target.c 2010-11-06 20:37:11.221005277 +0100 > @@ -4524,13 +4524,8 @@ int iscsi_target_tx_thread(void *arg) > struct se_thread_set *ts = (struct se_thread_set *) arg; > struct se_unmap_sg unmap_sg; > > - { > - char name[20]; > - > - memset(name, 0, 20); > - sprintf(name, "%s/%u", ISCSI_TX_THREAD_NAME, ts->thread_id); > - iscsi_daemon(ts->tx_thread, name, SHUTDOWN_SIGS); > - } > + set_user_nice(current, -20); > + ts->tx_thread = current; > > restart: > conn = iscsi_tx_thread_pre_handler(ts, TARGET); > @@ -4877,13 +4872,8 @@ int iscsi_target_rx_thread(void *arg) > struct iovec iov; > struct scatterlist sg; > > - { > - char name[20]; > - > - memset(name, 0, 20); > - sprintf(name, "%s/%u", ISCSI_RX_THREAD_NAME, ts->thread_id); > - iscsi_daemon(ts->rx_thread, name, SHUTDOWN_SIGS); > - } > + set_user_nice(current, -20); > + ts->rx_thread = current; > > restart: > conn = iscsi_rx_thread_pre_handler(ts, TARGET); > Index: lio-core-2.6/drivers/target/lio-target/iscsi_target_core.h > =================================================================== > --- lio-core-2.6.orig/drivers/target/lio-target/iscsi_target_core.h 2010-11-06 20:35:44.269003880 +0100 > +++ lio-core-2.6/drivers/target/lio-target/iscsi_target_core.h 2010-11-06 20:37:38.953319148 +0100 > @@ -10,7 +10,6 @@ > > #include <target/target_core_base.h> > > -#define SHUTDOWN_SIGS (sigmask(SIGKILL)|sigmask(SIGINT)|sigmask(SIGABRT)) > #define ISCSI_MISC_IOVECS 5 > #define ISCSI_MAX_DATASN_MISSING_COUNT 16 > #define ISCSI_TX_THREAD_TCP_TIMEOUT 2 > @@ -258,21 +257,6 @@ > #define TARGET_ERL_FORCE_TX_TRANSPORT_RESET 16 > #define TARGET_ERL_FORCE_RX_TRANSPORT_RESET 17 > > -/* > - * Threads and timers > - */ > -#define iscsi_daemon(thread, name, sigs) \ > -do { \ > - daemonize(name); \ > - current->policy = SCHED_NORMAL; \ > - set_user_nice(current, -20); \ > - spin_lock_irq(¤t->sighand->siglock); \ > - siginitsetinv(¤t->blocked, (sigs)); \ > - recalc_sigpending(); \ > - (thread) = current; \ > - spin_unlock_irq(¤t->sighand->siglock); \ > -} while (0); > - > #define MOD_TIMER(t, exp) mod_timer(t, (get_jiffies_64() + exp * HZ)) > #define SETUP_TIMER(timer, t, d, func) \ > timer.expires = (get_jiffies_64() + t * HZ); \ > Index: lio-core-2.6/drivers/target/lio-target/iscsi_target_login.c > =================================================================== > --- lio-core-2.6.orig/drivers/target/lio-target/iscsi_target_login.c 2010-11-06 20:36:08.941260061 +0100 > +++ lio-core-2.6/drivers/target/lio-target/iscsi_target_login.c 2010-11-06 20:36:42.358255815 +0100 > @@ -1011,12 +1011,8 @@ int iscsi_target_login_thread(void *arg) > struct sockaddr_in sock_in; > struct sockaddr_in6 sock_in6; > > - { > - char name[16]; > - memset(name, 0, 16); > - sprintf(name, "iscsi_np"); > - iscsi_daemon(np->np_thread, name, SHUTDOWN_SIGS); > - } > + set_user_nice(current, -20); > + np->np_thread = current; > > sock = iscsi_target_setup_login_socket(np); > if (!(sock)) { > Index: lio-core-2.6/drivers/target/target_core_transport.c > =================================================================== > --- lio-core-2.6.orig/drivers/target/target_core_transport.c 2010-11-06 20:34:36.070254263 +0100 > +++ lio-core-2.6/drivers/target/target_core_transport.c 2010-11-06 20:35:10.989005277 +0100 > @@ -9053,14 +9053,9 @@ static int transport_processing_thread(v > struct se_device *dev = (struct se_device *) param; > struct se_queue_req *qr; > > - current->policy = SCHED_NORMAL; > set_user_nice(current, -20); > - spin_lock_irq(¤t->sighand->siglock); > - siginitsetinv(¤t->blocked, SHUTDOWN_SIGS); > - recalc_sigpending(); > - spin_unlock_irq(¤t->sighand->siglock); > > - while (!(kthread_should_stop())) { > + while (!kthread_should_stop()) { > ret = wait_event_interruptible(dev->dev_queue_obj->thread_wq, > atomic_read(&dev->dev_queue_obj->queue_cnt) || > kthread_should_stop()); > Index: lio-core-2.6/drivers/target/tcm_fc/tfc_cmd.c > =================================================================== > --- lio-core-2.6.orig/drivers/target/tcm_fc/tfc_cmd.c 2010-11-06 20:35:19.325012122 +0100 > +++ lio-core-2.6/drivers/target/tcm_fc/tfc_cmd.c 2010-11-06 20:35:27.377011353 +0100 > @@ -649,10 +649,6 @@ int ft_thread(void *arg) > int ret; > > set_user_nice(current, -20); > - spin_lock_irq(¤t->sighand->siglock); > - siginitsetinv(¤t->blocked, SHUTDOWN_SIGS); > - recalc_sigpending(); > - spin_unlock_irq(¤t->sighand->siglock); > > while (!(kthread_should_stop())) { > ret = wait_event_interruptible(qobj->thread_wq, > Index: lio-core-2.6/include/target/target_core_base.h > =================================================================== > --- lio-core-2.6.orig/include/target/target_core_base.h 2010-11-06 20:37:52.400253495 +0100 > +++ lio-core-2.6/include/target/target_core_base.h 2010-11-06 20:37:55.809255241 +0100 > @@ -10,7 +10,6 @@ > #include "target_core_mib.h" > > #define TARGET_CORE_MOD_VERSION "v4.0.0-rc5" > -#define SHUTDOWN_SIGS (sigmask(SIGKILL)|sigmask(SIGINT)|sigmask(SIGABRT)) > > /* Used by transport_generic_allocate_iovecs() */ > #define TRANSPORT_IOV_DATA_BUFFER 5 > > -- > To unsubscribe from this list: send the line "unsubscribe linux-scsi" in > the body of a message to majordomo@xxxxxxxxxxxxxxx > More majordomo info at http://vger.kernel.org/majordomo-info.html -- To unsubscribe from this list: send the line "unsubscribe linux-scsi" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html