OSDN Git Service

USB: g_file_storage: call allow_signal()
authorOleg Nesterov <oleg@tv-sign.ru>
Wed, 30 May 2007 15:06:33 +0000 (11:06 -0400)
committerGreg Kroah-Hartman <gregkh@suse.de>
Tue, 26 Jun 2007 06:38:05 +0000 (23:38 -0700)
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>
drivers/usb/gadget/file_storage.c

index c6b6479..4639b62 100644 (file)
@@ -686,7 +686,6 @@ struct fsg_dev {
        int                     thread_wakeup_needed;
        struct completion       thread_notifier;
        struct task_struct      *thread_task;
-       sigset_t                thread_signal_mask;
 
        int                     cmnd_size;
        u8                      cmnd[MAX_COMMAND_SIZE];
@@ -3277,8 +3276,7 @@ static void handle_exception(struct fsg_dev *fsg)
        /* Clear the existing signals.  Anything but SIGUSR1 is converted
         * into a high-priority EXIT exception. */
        for (;;) {
-               sig = dequeue_signal_lock(current, &fsg->thread_signal_mask,
-                               &info);
+               sig = dequeue_signal_lock(current, &current->blocked, &info);
                if (!sig)
                        break;
                if (sig != SIGUSR1) {
@@ -3431,10 +3429,10 @@ static int fsg_main_thread(void *fsg_)
 
        /* Allow the thread to be killed by a signal, but set the signal mask
         * to block everything but INT, TERM, KILL, and USR1. */
-       siginitsetinv(&fsg->thread_signal_mask, sigmask(SIGINT) |
-                       sigmask(SIGTERM) | sigmask(SIGKILL) |
-                       sigmask(SIGUSR1));
-       sigprocmask(SIG_SETMASK, &fsg->thread_signal_mask, NULL);
+       allow_signal(SIGINT);
+       allow_signal(SIGTERM);
+       allow_signal(SIGKILL);
+       allow_signal(SIGUSR1);
 
        /* Arrange for userspace references to be interpreted as kernel
         * pointers.  That way we can pass a kernel pointer to a routine