diff options
author | Artem Bityutskiy <Artem.Bityutskiy@nokia.com> | 2007-08-28 14:29:32 -0400 |
---|---|---|
committer | Artem Bityutskiy <Artem.Bityutskiy@nokia.com> | 2007-10-14 06:10:20 -0400 |
commit | 33818bbb84cd371b63ed8849cc5264d24c8b3aa2 (patch) | |
tree | ecee6a8f02d2d103c6eb33cc6173e74343b1861b /drivers/mtd/ubi/ubi.h | |
parent | ef6075fbfca9139f428d52d60e671da38aa2e212 (diff) |
UBI: allocate memory with GFP_NOFS
Use GFP_NOFS flag when allocating memory on I/O path, because otherwise
we may deadlock the filesystem which works on top of us. We observed
the deadlocks with UBIFS. Example:
VFS->FS lock a lock->UBI->kmalloc()->VFS writeback->FS locks the same
lock again.
Signed-off-by: Artem Bityutskiy <Artem.Bityutskiy@nokia.com>
Diffstat (limited to 'drivers/mtd/ubi/ubi.h')
-rw-r--r-- | drivers/mtd/ubi/ubi.h | 6 |
1 files changed, 4 insertions, 2 deletions
diff --git a/drivers/mtd/ubi/ubi.h b/drivers/mtd/ubi/ubi.h index 5959f91be240..329663188772 100644 --- a/drivers/mtd/ubi/ubi.h +++ b/drivers/mtd/ubi/ubi.h | |||
@@ -439,16 +439,18 @@ int ubi_io_write_vid_hdr(const struct ubi_device *ubi, int pnum, | |||
439 | /** | 439 | /** |
440 | * ubi_zalloc_vid_hdr - allocate a volume identifier header object. | 440 | * ubi_zalloc_vid_hdr - allocate a volume identifier header object. |
441 | * @ubi: UBI device description object | 441 | * @ubi: UBI device description object |
442 | * @gfp_flags: GFP flags to allocate with | ||
442 | * | 443 | * |
443 | * This function returns a pointer to the newly allocated and zero-filled | 444 | * This function returns a pointer to the newly allocated and zero-filled |
444 | * volume identifier header object in case of success and %NULL in case of | 445 | * volume identifier header object in case of success and %NULL in case of |
445 | * failure. | 446 | * failure. |
446 | */ | 447 | */ |
447 | static inline struct ubi_vid_hdr *ubi_zalloc_vid_hdr(const struct ubi_device *ubi) | 448 | static inline struct ubi_vid_hdr * |
449 | ubi_zalloc_vid_hdr(const struct ubi_device *ubi, gfp_t gfp_flags) | ||
448 | { | 450 | { |
449 | void *vid_hdr; | 451 | void *vid_hdr; |
450 | 452 | ||
451 | vid_hdr = kzalloc(ubi->vid_hdr_alsize, GFP_KERNEL); | 453 | vid_hdr = kzalloc(ubi->vid_hdr_alsize, gfp_flags); |
452 | if (!vid_hdr) | 454 | if (!vid_hdr) |
453 | return NULL; | 455 | return NULL; |
454 | 456 | ||