diff options
Diffstat (limited to 'recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.7/0016-writeback-fix-dereferencing-NULL-bdi-dev-on-trace_wr.patch')
-rw-r--r-- | recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.7/0016-writeback-fix-dereferencing-NULL-bdi-dev-on-trace_wr.patch | 44 |
1 files changed, 44 insertions, 0 deletions
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.7/0016-writeback-fix-dereferencing-NULL-bdi-dev-on-trace_wr.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.7/0016-writeback-fix-dereferencing-NULL-bdi-dev-on-trace_wr.patch new file mode 100644 index 00000000..495dfa8d --- /dev/null +++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.7/0016-writeback-fix-dereferencing-NULL-bdi-dev-on-trace_wr.patch | |||
@@ -0,0 +1,44 @@ | |||
1 | From 422204b77968331ce85721527f7ece49f72658f2 Mon Sep 17 00:00:00 2001 | ||
2 | From: Wu Fengguang <fengguang.wu@intel.com> | ||
3 | Date: Sat, 4 Feb 2012 20:54:03 -0600 | ||
4 | Subject: [PATCH 16/30] writeback: fix dereferencing NULL bdi->dev on | ||
5 | trace_writeback_queue | ||
6 | |||
7 | commit 977b7e3a52a7421ad33a393a38ece59f3d41c2fa upstream. | ||
8 | |||
9 | When a SD card is hot removed without umount, del_gendisk() will call | ||
10 | bdi_unregister() without destroying/freeing it. This leaves the bdi in | ||
11 | the bdi->dev = NULL, bdi->wb.task = NULL, bdi->bdi_list removed state. | ||
12 | |||
13 | When sync(2) gets the bdi before bdi_unregister() and calls | ||
14 | bdi_queue_work() after the unregister, trace_writeback_queue will be | ||
15 | dereferencing the NULL bdi->dev. Fix it with a simple test for NULL. | ||
16 | |||
17 | LKML-reference: http://lkml.org/lkml/2012/1/18/346 | ||
18 | Reported-by: Rabin Vincent <rabin@rab.in> | ||
19 | Tested-by: Namjae Jeon <linkinjeon@gmail.com> | ||
20 | Signed-off-by: Wu Fengguang <fengguang.wu@intel.com> | ||
21 | Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> | ||
22 | --- | ||
23 | include/trace/events/writeback.h | 5 ++++- | ||
24 | 1 files changed, 4 insertions(+), 1 deletions(-) | ||
25 | |||
26 | diff --git a/include/trace/events/writeback.h b/include/trace/events/writeback.h | ||
27 | index 46e389c..1f48f14 100644 | ||
28 | --- a/include/trace/events/writeback.h | ||
29 | +++ b/include/trace/events/writeback.h | ||
30 | @@ -47,7 +47,10 @@ DECLARE_EVENT_CLASS(writeback_work_class, | ||
31 | __field(int, reason) | ||
32 | ), | ||
33 | TP_fast_assign( | ||
34 | - strncpy(__entry->name, dev_name(bdi->dev), 32); | ||
35 | + struct device *dev = bdi->dev; | ||
36 | + if (!dev) | ||
37 | + dev = default_backing_dev_info.dev; | ||
38 | + strncpy(__entry->name, dev_name(dev), 32); | ||
39 | __entry->nr_pages = work->nr_pages; | ||
40 | __entry->sb_dev = work->sb ? work->sb->s_dev : 0; | ||
41 | __entry->sync_mode = work->sync_mode; | ||
42 | -- | ||
43 | 1.7.7.4 | ||
44 | |||