diff options
author | Artem Bityutskiy <artem.bityutskiy@linux.intel.com> | 2011-12-23 11:03:17 -0500 |
---|---|---|
committer | David Woodhouse <David.Woodhouse@intel.com> | 2012-01-09 13:25:22 -0500 |
commit | 7ae79d7ff1769a3e9c47076b46e4eaa11204a2ee (patch) | |
tree | 34c084261dd52d4f015f2399405824b9fcebda6f | |
parent | eda95cbf75193808f62948fb0142ba0901d8bee2 (diff) |
mtd: introduce mtd_panic_write interface
Signed-off-by: Artem Bityutskiy <artem.bityutskiy@linux.intel.com>
Signed-off-by: David Woodhouse <David.Woodhouse@intel.com>
-rw-r--r-- | drivers/mtd/mtdoops.c | 4 | ||||
-rw-r--r-- | drivers/mtd/mtdpart.c | 4 | ||||
-rw-r--r-- | include/linux/mtd/mtd.h | 25 |
3 files changed, 19 insertions, 14 deletions
diff --git a/drivers/mtd/mtdoops.c b/drivers/mtd/mtdoops.c index 9c9d58617c98..7be2018ffbcc 100644 --- a/drivers/mtd/mtdoops.c +++ b/drivers/mtd/mtdoops.c | |||
@@ -222,8 +222,8 @@ static void mtdoops_write(struct mtdoops_context *cxt, int panic) | |||
222 | hdr[1] = MTDOOPS_KERNMSG_MAGIC; | 222 | hdr[1] = MTDOOPS_KERNMSG_MAGIC; |
223 | 223 | ||
224 | if (panic) | 224 | if (panic) |
225 | ret = mtd->panic_write(mtd, cxt->nextpage * record_size, | 225 | ret = mtd_panic_write(mtd, cxt->nextpage * record_size, |
226 | record_size, &retlen, cxt->oops_buf); | 226 | record_size, &retlen, cxt->oops_buf); |
227 | else | 227 | else |
228 | ret = mtd_write(mtd, cxt->nextpage * record_size, | 228 | ret = mtd_write(mtd, cxt->nextpage * record_size, |
229 | record_size, &retlen, cxt->oops_buf); | 229 | record_size, &retlen, cxt->oops_buf); |
diff --git a/drivers/mtd/mtdpart.c b/drivers/mtd/mtdpart.c index 96574a036567..9ed58f7d7466 100644 --- a/drivers/mtd/mtdpart.c +++ b/drivers/mtd/mtdpart.c | |||
@@ -201,8 +201,8 @@ static int part_panic_write(struct mtd_info *mtd, loff_t to, size_t len, | |||
201 | len = 0; | 201 | len = 0; |
202 | else if (to + len > mtd->size) | 202 | else if (to + len > mtd->size) |
203 | len = mtd->size - to; | 203 | len = mtd->size - to; |
204 | return part->master->panic_write(part->master, to + part->offset, | 204 | return mtd_panic_write(part->master, to + part->offset, len, retlen, |
205 | len, retlen, buf); | 205 | buf); |
206 | } | 206 | } |
207 | 207 | ||
208 | static int part_write_oob(struct mtd_info *mtd, loff_t to, | 208 | static int part_write_oob(struct mtd_info *mtd, loff_t to, |
diff --git a/include/linux/mtd/mtd.h b/include/linux/mtd/mtd.h index 1da7f4a6ef88..2fb83cd3d264 100644 --- a/include/linux/mtd/mtd.h +++ b/include/linux/mtd/mtd.h | |||
@@ -186,6 +186,8 @@ struct mtd_info { | |||
186 | size_t *retlen, u_char *buf); | 186 | size_t *retlen, u_char *buf); |
187 | int (*write) (struct mtd_info *mtd, loff_t to, size_t len, | 187 | int (*write) (struct mtd_info *mtd, loff_t to, size_t len, |
188 | size_t *retlen, const u_char *buf); | 188 | size_t *retlen, const u_char *buf); |
189 | int (*panic_write) (struct mtd_info *mtd, loff_t to, size_t len, | ||
190 | size_t *retlen, const u_char *buf); | ||
189 | 191 | ||
190 | /* Backing device capabilities for this device | 192 | /* Backing device capabilities for this device |
191 | * - provides mmap capabilities | 193 | * - provides mmap capabilities |
@@ -193,16 +195,6 @@ struct mtd_info { | |||
193 | struct backing_dev_info *backing_dev_info; | 195 | struct backing_dev_info *backing_dev_info; |
194 | 196 | ||
195 | 197 | ||
196 | |||
197 | /* In blackbox flight recorder like scenarios we want to make successful | ||
198 | writes in interrupt context. panic_write() is only intended to be | ||
199 | called when its known the kernel is about to panic and we need the | ||
200 | write to succeed. Since the kernel is not going to be running for much | ||
201 | longer, this function can break locks and delay to ensure the write | ||
202 | succeeds (but not sleep). */ | ||
203 | |||
204 | int (*panic_write) (struct mtd_info *mtd, loff_t to, size_t len, size_t *retlen, const u_char *buf); | ||
205 | |||
206 | int (*read_oob) (struct mtd_info *mtd, loff_t from, | 198 | int (*read_oob) (struct mtd_info *mtd, loff_t from, |
207 | struct mtd_oob_ops *ops); | 199 | struct mtd_oob_ops *ops); |
208 | int (*write_oob) (struct mtd_info *mtd, loff_t to, | 200 | int (*write_oob) (struct mtd_info *mtd, loff_t to, |
@@ -315,6 +307,19 @@ static inline int mtd_write(struct mtd_info *mtd, loff_t to, size_t len, | |||
315 | return mtd->write(mtd, to, len, retlen, buf); | 307 | return mtd->write(mtd, to, len, retlen, buf); |
316 | } | 308 | } |
317 | 309 | ||
310 | /* | ||
311 | * In blackbox flight recorder like scenarios we want to make successful writes | ||
312 | * in interrupt context. panic_write() is only intended to be called when its | ||
313 | * known the kernel is about to panic and we need the write to succeed. Since | ||
314 | * the kernel is not going to be running for much longer, this function can | ||
315 | * break locks and delay to ensure the write succeeds (but not sleep). | ||
316 | */ | ||
317 | static inline int mtd_panic_write(struct mtd_info *mtd, loff_t to, size_t len, | ||
318 | size_t *retlen, const u_char *buf) | ||
319 | { | ||
320 | return mtd->panic_write(mtd, to, len, retlen, buf); | ||
321 | } | ||
322 | |||
318 | static inline struct mtd_info *dev_to_mtd(struct device *dev) | 323 | static inline struct mtd_info *dev_to_mtd(struct device *dev) |
319 | { | 324 | { |
320 | return dev ? dev_get_drvdata(dev) : NULL; | 325 | return dev ? dev_get_drvdata(dev) : NULL; |