FUJITA Tomonori
015640edb1
[SCSI] sg: fix q->queue_lock on scsi_error_handler path
...
sg_rq_end_io() is called via rq->end_io. In some rare cases,
sg_rq_end_io calls blk_put_request/blk_rq_unmap_user (when a program
issuing a command has gone before the command completion; e.g. by
interrupting a program issuing a command before the command
completes).
We can't call blk_put_request/blk_rq_unmap_user in interrupt so the
commit c96952ed7031e7c576ecf90cf95b8ec099d5295a uses
execute_in_process_context().
The problem is that scsi_error_handler() calls rq->end_io too. We
can't call blk_put_request/blk_rq_unmap_user too in this path (we hold
q->queue_lock).
To avoid the above problem, in these rare cases, this patch always
uses schedule_work() instead of execute_in_process_context().
Signed-off-by: FUJITA Tomonori <fujita.tomonori@lab.ntt.co.jp>
Acked-by: Douglas Gilbert <dgilbert@interlog.com>
Cc: Stable Tree <stable@kernel.org>
Signed-off-by: James Bottomley <James.Bottomley@HansenPartnership.com>
2009-04-03 10:23:16 -05:00
..
2009-04-03 09:23:11 -05:00
2009-04-03 10:23:16 -05:00
2009-01-02 10:22:16 -06:00
2008-12-29 11:24:11 -06:00
2009-03-28 20:30:18 +00:00
2009-04-03 09:23:13 -05:00
2009-03-17 22:07:06 -04:00
2008-08-23 12:14:12 -07:00
2009-04-03 09:23:08 -05:00
2009-04-03 09:22:44 -05:00
2009-04-03 09:23:04 -05:00
2009-01-16 10:17:09 -05:00
2009-03-12 12:58:02 -05:00
2008-12-01 11:15:55 -06:00
2009-03-17 21:52:46 -04:00
2009-04-03 09:22:56 -05:00
2009-01-05 12:17:42 -06:00
2009-04-03 09:22:55 -05:00
2009-01-25 07:55:13 -06:00
2009-04-03 10:23:16 -05:00
2008-01-11 18:22:30 -06:00
2009-03-13 15:46:42 -05:00
2009-03-13 15:46:42 -05:00
2008-10-23 11:42:17 -05:00
2007-01-06 09:18:00 -06:00
2008-05-02 10:18:22 -05:00
2007-06-17 16:15:56 -05:00
2009-01-06 11:28:08 +01:00
2007-06-17 16:09:29 -05:00
2009-04-03 10:17:31 -05:00
2009-04-03 10:17:31 -05:00
2009-04-03 10:17:17 -05:00
2009-04-03 10:17:17 -05:00
2009-03-24 16:38:25 -07:00
2009-04-03 09:25:23 -05:00
2008-10-16 16:52:06 +02:00
2007-08-04 09:11:06 -05:00
2008-04-27 12:19:55 -05:00
2008-12-29 11:24:12 -06:00
2008-02-06 10:41:01 -08:00
2009-03-26 21:15:29 +01:00
2009-03-26 21:15:29 +01:00
2007-05-04 17:59:05 -07:00
2008-12-29 11:24:12 -06:00
2008-04-07 12:15:44 -05:00
2008-04-07 12:15:44 -05:00
2009-03-24 16:38:25 -07:00
2009-03-13 15:48:43 -05:00
2009-03-12 12:58:02 -05:00
2008-04-07 12:15:40 -05:00
2008-11-15 11:10:14 -06:00
2008-05-08 10:46:56 -07:00
2007-11-25 12:19:26 +02:00
2007-03-20 11:27:03 -05:00
2008-12-29 11:24:12 -06:00
2008-12-29 11:24:35 -06:00
2008-12-29 11:24:14 -06:00
2008-08-29 02:13:10 -07:00
2008-01-11 18:22:35 -06:00
2008-12-29 11:24:12 -06:00
2008-04-27 12:19:55 -05:00
2007-11-25 12:19:26 +02:00
2008-10-09 08:56:13 +02:00
2008-10-09 08:56:13 +02:00
2008-11-30 10:03:36 -08:00
2008-10-09 08:56:13 +02:00
2009-01-02 12:16:18 -06:00
2009-03-12 12:58:17 -05:00
2009-03-12 12:58:02 -05:00
2008-01-11 18:28:06 -06:00
2008-12-29 11:24:12 -06:00
2008-07-27 10:31:49 -04:00
2008-12-29 11:24:12 -06:00
2008-12-29 11:24:12 -06:00
2008-12-29 11:24:12 -06:00
2009-03-12 12:58:15 -05:00
2009-03-12 12:57:58 -05:00
2009-03-12 12:58:02 -05:00
2008-08-23 12:14:12 -07:00
2009-03-13 15:29:39 -05:00
2008-12-29 11:24:22 -06:00
2008-04-27 12:33:04 -05:00
2009-04-03 09:23:10 -05:00
2009-03-13 01:18:14 -04:00
2009-03-13 15:27:29 -05:00
2009-04-03 09:23:14 -05:00
2008-07-27 10:31:49 -04:00
2008-01-30 13:14:02 -06:00
2008-12-29 11:24:19 -06:00
2008-12-28 20:00:03 +01:00
2009-04-03 09:23:04 -05:00
2009-01-06 11:28:08 +01:00
2008-11-05 12:40:23 -05:00
2008-06-05 09:23:44 -05:00
2009-03-24 16:38:25 -07:00
2008-04-07 12:19:07 -05:00
2009-01-02 12:10:04 -06:00
2008-10-09 08:56:13 +02:00
2007-10-12 14:51:18 -04:00
2008-01-30 13:14:02 -06:00
2008-12-29 11:24:12 -06:00
2007-10-12 14:55:07 -04:00
2009-01-02 10:22:16 -06:00
2007-07-19 10:04:50 -07:00
2008-07-27 10:31:49 -04:00
2008-12-29 11:24:11 -06:00
2008-08-23 12:14:12 -07:00
2009-03-12 12:58:10 -05:00
2009-03-12 12:58:10 -05:00
2007-11-25 12:19:26 +02:00
2008-07-27 10:31:49 -04:00
2009-01-16 16:15:15 +11:00
2009-04-03 09:24:42 -05:00
2009-04-03 09:24:42 -05:00
2008-12-29 11:24:12 -06:00
2008-01-30 13:14:02 -06:00
2009-04-03 09:25:23 -05:00
2008-08-29 02:14:46 -07:00
2009-01-02 10:22:16 -06:00
2009-03-12 12:57:55 -05:00
2009-03-31 01:14:44 +04:00
2009-03-12 12:58:10 -05:00
2009-01-02 10:22:16 -06:00
2007-07-14 19:28:10 -05:00
2009-04-03 09:22:55 -05:00
2008-10-23 11:42:17 -05:00
2008-10-13 09:28:52 -04:00
2009-03-31 01:14:44 +04:00
2008-04-19 19:10:33 -07:00
2009-03-12 12:58:05 -05:00
2007-07-18 11:16:32 -05:00
2009-03-12 12:57:55 -05:00
2008-07-02 15:06:25 -06:00
2008-10-10 10:53:26 -07:00
2008-07-27 10:31:49 -04:00
2007-10-12 14:46:58 -04:00
2009-03-28 13:30:43 -07:00
2009-03-28 13:30:43 -07:00
2009-01-02 10:22:16 -06:00
2008-12-29 11:24:32 -06:00
2007-10-12 14:38:09 -04:00
2009-01-02 10:22:16 -06:00
2009-04-03 10:16:31 -05:00
2008-01-11 18:22:40 -06:00
2009-01-05 09:06:23 -06:00
2009-04-03 09:22:55 -05:00
2009-03-17 21:43:52 -04:00
2009-04-03 10:17:01 -05:00
2009-04-03 10:23:16 -05:00
2009-01-02 10:58:41 -06:00
2009-01-02 10:22:16 -06:00
2009-01-02 10:22:16 -06:00
2008-12-29 11:24:24 -06:00
2008-10-20 08:52:41 -07:00
2009-04-03 09:22:55 -05:00
2008-02-07 18:02:44 -06:00
2008-04-07 12:15:39 -05:00
2009-03-12 12:58:02 -05:00
2009-01-02 12:02:25 -06:00
2009-04-03 09:23:10 -05:00
2008-01-11 18:28:57 -06:00
2008-04-16 09:28:11 -05:00
2007-11-25 12:19:26 +02:00
2006-12-09 09:41:18 -08:00
2008-10-23 11:42:19 -05:00
2008-08-31 01:23:17 -07:00
2008-12-29 11:24:12 -06:00
2007-11-25 12:19:26 +02:00
2008-12-29 11:24:14 -06:00
2007-07-14 18:56:33 -05:00
2008-12-29 11:24:14 -06:00
2008-04-28 17:31:13 -07:00
2008-04-07 12:19:01 -05:00
2007-10-19 23:22:55 +02:00
2008-12-29 11:24:12 -06:00
2009-03-13 01:18:14 -04:00
2007-11-29 09:24:52 -08:00