Patchwork mtd: block2mtd: fix recursive call of mtd_writev

login
register
mail settings
Submitter Gabor Juhos
Date May 23, 2012, 10:17 p.m.
Message ID <1337811443-2603-1-git-send-email-juhosg@openwrt.org>
Download mbox | patch
Permalink /patch/161039/
State Accepted
Commit 2e24e32e2759348c9290404abad4f729f791bfad
Headers show

Comments

Gabor Juhos - May 23, 2012, 10:17 p.m.
The 'mtd_writev' interface calls the function assigned
to the '_write' field of a given mtd device if that is
not NULL. The block2mtd driver sets the '_writev' field
to the 'mtd_writev' function itself and thus causes a
endless loop.

This is caused by 1dbebd32562b3c2caeca35960e5cb00bfcc12900
(mtd: harmonize mtd_writev usage).

Remove the assignment from the block2mtd driver to fix the
issue.

Signed-off-by: Gabor Juhos <juhosg@openwrt.org>
Cc: Artem Bityutskiy <artem.bityutskiy@linux.intel.com>
Cc: stable@vger.kernel.org

---
An identical patch has been tested on 3.3.7, but the actual
one is not even compile tested.
---
 drivers/mtd/devices/block2mtd.c |    1 -
 1 files changed, 0 insertions(+), 1 deletions(-)
Artem Bityutskiy - May 24, 2012, 7:48 a.m.
On Thu, 2012-05-24 at 00:17 +0200, Gabor Juhos wrote:
> The 'mtd_writev' interface calls the function assigned
> to the '_write' field of a given mtd device if that is
> not NULL. The block2mtd driver sets the '_writev' field
> to the 'mtd_writev' function itself and thus causes a
> endless loop.
> 
> This is caused by 1dbebd32562b3c2caeca35960e5cb00bfcc12900
> (mtd: harmonize mtd_writev usage).
> 
> Remove the assignment from the block2mtd driver to fix the
> issue.
> 
> Signed-off-by: Gabor Juhos <juhosg@openwrt.org>
> Cc: Artem Bityutskiy <artem.bityutskiy@linux.intel.com>
> Cc: stable@vger.kernel.org

Amended the "stable" tag and pushed to l2-mtd.git, thanks:

Cc: stable@kernel.org [3.3+]
Gabor Juhos - May 24, 2012, 8:50 a.m.
2012.05.24. 9:48 keltezéssel, Artem Bityutskiy írta:
> On Thu, 2012-05-24 at 00:17 +0200, Gabor Juhos wrote:
>> The 'mtd_writev' interface calls the function assigned to the '_write'
>> field of a given mtd device if that is not NULL. The block2mtd driver
>> sets the '_writev' field to the 'mtd_writev' function itself and thus
>> causes a endless loop.
>> 
>> This is caused by 1dbebd32562b3c2caeca35960e5cb00bfcc12900 (mtd:
>> harmonize mtd_writev usage).
>> 
>> Remove the assignment from the block2mtd driver to fix the issue.
>> 
>> Signed-off-by: Gabor Juhos <juhosg@openwrt.org> Cc: Artem Bityutskiy
>> <artem.bityutskiy@linux.intel.com> Cc: stable@vger.kernel.org
> 
> Amended the "stable" tag and pushed to l2-mtd.git, thanks:
> 
> Cc: stable@kernel.org [3.3+]
> 

Thanks!

Patch

diff --git a/drivers/mtd/devices/block2mtd.c b/drivers/mtd/devices/block2mtd.c
index a4a80b7..7d7000d 100644
--- a/drivers/mtd/devices/block2mtd.c
+++ b/drivers/mtd/devices/block2mtd.c
@@ -271,7 +271,6 @@  static struct block2mtd_dev *add_device(char *devname, int erase_size)
 	dev->mtd.flags = MTD_CAP_RAM;
 	dev->mtd._erase = block2mtd_erase;
 	dev->mtd._write = block2mtd_write;
-	dev->mtd._writev = mtd_writev;
 	dev->mtd._sync = block2mtd_sync;
 	dev->mtd._read = block2mtd_read;
 	dev->mtd.priv = dev;