aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/usb/gadget/file_storage.c
diff options
context:
space:
mode:
authorOleg Nesterov <oleg@tv-sign.ru>2007-05-30 11:06:33 -0400
committerGreg Kroah-Hartman <gregkh@suse.de>2007-06-26 02:38:05 -0400
commit8cfbe7e60d9618d8f80a3cd218c45dd64cb9e5cf (patch)
tree48c1aede4fcad60dfaf049983a67bd5d087ff05f /drivers/usb/gadget/file_storage.c
parent189548642c5962e60c3667bdb3a703fe0bed12a6 (diff)
USB: g_file_storage: call allow_signal()
New changes in the signal-handling code require compensating changes in g_file_storage. This patch (as913) by Oleg Nesterov makes the code use allow_signal() instead of sigprocmask(). From: Alan Stern <stern@rowland.harvard.edu> Signed-off-by: Alan Stern <stern@rowland.harvard.edu> Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
Diffstat (limited to 'drivers/usb/gadget/file_storage.c')
-rw-r--r--drivers/usb/gadget/file_storage.c12
1 files changed, 5 insertions, 7 deletions
diff --git a/drivers/usb/gadget/file_storage.c b/drivers/usb/gadget/file_storage.c
index c6b6479fa4dd..4639b629e60c 100644
--- a/drivers/usb/gadget/file_storage.c
+++ b/drivers/usb/gadget/file_storage.c
@@ -686,7 +686,6 @@ struct fsg_dev {
686 int thread_wakeup_needed; 686 int thread_wakeup_needed;
687 struct completion thread_notifier; 687 struct completion thread_notifier;
688 struct task_struct *thread_task; 688 struct task_struct *thread_task;
689 sigset_t thread_signal_mask;
690 689
691 int cmnd_size; 690 int cmnd_size;
692 u8 cmnd[MAX_COMMAND_SIZE]; 691 u8 cmnd[MAX_COMMAND_SIZE];
@@ -3277,8 +3276,7 @@ static void handle_exception(struct fsg_dev *fsg)
3277 /* Clear the existing signals. Anything but SIGUSR1 is converted 3276 /* Clear the existing signals. Anything but SIGUSR1 is converted
3278 * into a high-priority EXIT exception. */ 3277 * into a high-priority EXIT exception. */
3279 for (;;) { 3278 for (;;) {
3280 sig = dequeue_signal_lock(current, &fsg->thread_signal_mask, 3279 sig = dequeue_signal_lock(current, &current->blocked, &info);
3281 &info);
3282 if (!sig) 3280 if (!sig)
3283 break; 3281 break;
3284 if (sig != SIGUSR1) { 3282 if (sig != SIGUSR1) {
@@ -3431,10 +3429,10 @@ static int fsg_main_thread(void *fsg_)
3431 3429
3432 /* Allow the thread to be killed by a signal, but set the signal mask 3430 /* Allow the thread to be killed by a signal, but set the signal mask
3433 * to block everything but INT, TERM, KILL, and USR1. */ 3431 * to block everything but INT, TERM, KILL, and USR1. */
3434 siginitsetinv(&fsg->thread_signal_mask, sigmask(SIGINT) | 3432 allow_signal(SIGINT);
3435 sigmask(SIGTERM) | sigmask(SIGKILL) | 3433 allow_signal(SIGTERM);
3436 sigmask(SIGUSR1)); 3434 allow_signal(SIGKILL);
3437 sigprocmask(SIG_SETMASK, &fsg->thread_signal_mask, NULL); 3435 allow_signal(SIGUSR1);
3438 3436
3439 /* Arrange for userspace references to be interpreted as kernel 3437 /* Arrange for userspace references to be interpreted as kernel
3440 * pointers. That way we can pass a kernel pointer to a routine 3438 * pointers. That way we can pass a kernel pointer to a routine