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 /include | |
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>
Diffstat (limited to 'include')
-rw-r--r-- | include/linux/mtd/mtd.h | 25 |
1 files changed, 15 insertions, 10 deletions
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; |