annotate packages/fs/jffs2/current/src/flashio.c @ 1777:c16341b1bac6 default tip

* Added execute permissions to files missed in conversion from CVS
author alexs
date Mon, 12 Oct 2009 02:26:09 +0100
parents 99834d6b6eeb
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
1443
cd7d2afbc7dd Import latest JFFS2 code from David Woodhouse
gthomas
parents:
diff changeset
1 /*
cd7d2afbc7dd Import latest JFFS2 code from David Woodhouse
gthomas
parents:
diff changeset
2 * JFFS2 -- Journalling Flash File System, Version 2.
cd7d2afbc7dd Import latest JFFS2 code from David Woodhouse
gthomas
parents:
diff changeset
3 *
cd7d2afbc7dd Import latest JFFS2 code from David Woodhouse
gthomas
parents:
diff changeset
4 * Copyright (C) 2001-2003 Red Hat, Inc.
cd7d2afbc7dd Import latest JFFS2 code from David Woodhouse
gthomas
parents:
diff changeset
5 *
cd7d2afbc7dd Import latest JFFS2 code from David Woodhouse
gthomas
parents:
diff changeset
6 * Created by Dominic Ostrowski <dominic.ostrowski@3glab.com>
cd7d2afbc7dd Import latest JFFS2 code from David Woodhouse
gthomas
parents:
diff changeset
7 * Contributors: David Woodhouse, Nick Garnett, Richard Panton.
cd7d2afbc7dd Import latest JFFS2 code from David Woodhouse
gthomas
parents:
diff changeset
8 *
cd7d2afbc7dd Import latest JFFS2 code from David Woodhouse
gthomas
parents:
diff changeset
9 * For licensing information, see the file 'LICENCE' in this directory.
cd7d2afbc7dd Import latest JFFS2 code from David Woodhouse
gthomas
parents:
diff changeset
10 *
cd7d2afbc7dd Import latest JFFS2 code from David Woodhouse
gthomas
parents:
diff changeset
11 * $Id: flashio.c,v 1.1 2003/11/26 14:09:29 dwmw2 Exp $
cd7d2afbc7dd Import latest JFFS2 code from David Woodhouse
gthomas
parents:
diff changeset
12 *
cd7d2afbc7dd Import latest JFFS2 code from David Woodhouse
gthomas
parents:
diff changeset
13 */
cd7d2afbc7dd Import latest JFFS2 code from David Woodhouse
gthomas
parents:
diff changeset
14
cd7d2afbc7dd Import latest JFFS2 code from David Woodhouse
gthomas
parents:
diff changeset
15 #include <linux/kernel.h>
cd7d2afbc7dd Import latest JFFS2 code from David Woodhouse
gthomas
parents:
diff changeset
16 #include "nodelist.h"
cd7d2afbc7dd Import latest JFFS2 code from David Woodhouse
gthomas
parents:
diff changeset
17
cd7d2afbc7dd Import latest JFFS2 code from David Woodhouse
gthomas
parents:
diff changeset
18 #include <cyg/io/io.h>
cd7d2afbc7dd Import latest JFFS2 code from David Woodhouse
gthomas
parents:
diff changeset
19 #include <cyg/io/config_keys.h>
cd7d2afbc7dd Import latest JFFS2 code from David Woodhouse
gthomas
parents:
diff changeset
20 #include <cyg/io/flash.h>
cd7d2afbc7dd Import latest JFFS2 code from David Woodhouse
gthomas
parents:
diff changeset
21
cd7d2afbc7dd Import latest JFFS2 code from David Woodhouse
gthomas
parents:
diff changeset
22 cyg_bool jffs2_flash_read(struct jffs2_sb_info * c,
cd7d2afbc7dd Import latest JFFS2 code from David Woodhouse
gthomas
parents:
diff changeset
23 cyg_uint32 read_buffer_offset, const size_t size,
cd7d2afbc7dd Import latest JFFS2 code from David Woodhouse
gthomas
parents:
diff changeset
24 size_t * return_size, char *write_buffer)
cd7d2afbc7dd Import latest JFFS2 code from David Woodhouse
gthomas
parents:
diff changeset
25 {
cd7d2afbc7dd Import latest JFFS2 code from David Woodhouse
gthomas
parents:
diff changeset
26 Cyg_ErrNo err;
cd7d2afbc7dd Import latest JFFS2 code from David Woodhouse
gthomas
parents:
diff changeset
27 cyg_uint32 len = size;
cd7d2afbc7dd Import latest JFFS2 code from David Woodhouse
gthomas
parents:
diff changeset
28 struct super_block *sb = OFNI_BS_2SFFJ(c);
cd7d2afbc7dd Import latest JFFS2 code from David Woodhouse
gthomas
parents:
diff changeset
29
cd7d2afbc7dd Import latest JFFS2 code from David Woodhouse
gthomas
parents:
diff changeset
30 //D2(printf("FLASH READ\n"));
cd7d2afbc7dd Import latest JFFS2 code from David Woodhouse
gthomas
parents:
diff changeset
31 //D2(printf("read address = %x\n", CYGNUM_FS_JFFS2_BASE_ADDRESS + read_buffer_offset));
cd7d2afbc7dd Import latest JFFS2 code from David Woodhouse
gthomas
parents:
diff changeset
32 //D2(printf("write address = %x\n", write_buffer));
cd7d2afbc7dd Import latest JFFS2 code from David Woodhouse
gthomas
parents:
diff changeset
33 //D2(printf("size = %x\n", size));
cd7d2afbc7dd Import latest JFFS2 code from David Woodhouse
gthomas
parents:
diff changeset
34 err = cyg_io_bread(sb->s_dev, write_buffer, &len, read_buffer_offset);
cd7d2afbc7dd Import latest JFFS2 code from David Woodhouse
gthomas
parents:
diff changeset
35
cd7d2afbc7dd Import latest JFFS2 code from David Woodhouse
gthomas
parents:
diff changeset
36 *return_size = (size_t) len;
cd7d2afbc7dd Import latest JFFS2 code from David Woodhouse
gthomas
parents:
diff changeset
37 return ((err == ENOERR) ? ENOERR : -EIO);
cd7d2afbc7dd Import latest JFFS2 code from David Woodhouse
gthomas
parents:
diff changeset
38 }
cd7d2afbc7dd Import latest JFFS2 code from David Woodhouse
gthomas
parents:
diff changeset
39
cd7d2afbc7dd Import latest JFFS2 code from David Woodhouse
gthomas
parents:
diff changeset
40 cyg_bool jffs2_flash_write(struct jffs2_sb_info * c,
cd7d2afbc7dd Import latest JFFS2 code from David Woodhouse
gthomas
parents:
diff changeset
41 cyg_uint32 write_buffer_offset, const size_t size,
cd7d2afbc7dd Import latest JFFS2 code from David Woodhouse
gthomas
parents:
diff changeset
42 size_t * return_size, char *read_buffer)
cd7d2afbc7dd Import latest JFFS2 code from David Woodhouse
gthomas
parents:
diff changeset
43 {
cd7d2afbc7dd Import latest JFFS2 code from David Woodhouse
gthomas
parents:
diff changeset
44
cd7d2afbc7dd Import latest JFFS2 code from David Woodhouse
gthomas
parents:
diff changeset
45 Cyg_ErrNo err;
cd7d2afbc7dd Import latest JFFS2 code from David Woodhouse
gthomas
parents:
diff changeset
46 cyg_uint32 len = size;
cd7d2afbc7dd Import latest JFFS2 code from David Woodhouse
gthomas
parents:
diff changeset
47 struct super_block *sb = OFNI_BS_2SFFJ(c);
cd7d2afbc7dd Import latest JFFS2 code from David Woodhouse
gthomas
parents:
diff changeset
48
cd7d2afbc7dd Import latest JFFS2 code from David Woodhouse
gthomas
parents:
diff changeset
49 // D2(printf("FLASH WRITE ENABLED!!!\n"));
cd7d2afbc7dd Import latest JFFS2 code from David Woodhouse
gthomas
parents:
diff changeset
50 // D2(printf("write address = %x\n", CYGNUM_FS_JFFS2_BASE_ADDRESS + write_buffer_offset));
cd7d2afbc7dd Import latest JFFS2 code from David Woodhouse
gthomas
parents:
diff changeset
51 // D2(printf("read address = %x\n", read_buffer));
cd7d2afbc7dd Import latest JFFS2 code from David Woodhouse
gthomas
parents:
diff changeset
52 // D2(printf("size = %x\n", size));
cd7d2afbc7dd Import latest JFFS2 code from David Woodhouse
gthomas
parents:
diff changeset
53
cd7d2afbc7dd Import latest JFFS2 code from David Woodhouse
gthomas
parents:
diff changeset
54 err = cyg_io_bwrite(sb->s_dev, read_buffer, &len, write_buffer_offset);
cd7d2afbc7dd Import latest JFFS2 code from David Woodhouse
gthomas
parents:
diff changeset
55 *return_size = (size_t) len;
cd7d2afbc7dd Import latest JFFS2 code from David Woodhouse
gthomas
parents:
diff changeset
56
cd7d2afbc7dd Import latest JFFS2 code from David Woodhouse
gthomas
parents:
diff changeset
57 return ((err == ENOERR) ? ENOERR : -EIO);
cd7d2afbc7dd Import latest JFFS2 code from David Woodhouse
gthomas
parents:
diff changeset
58 }
cd7d2afbc7dd Import latest JFFS2 code from David Woodhouse
gthomas
parents:
diff changeset
59
cd7d2afbc7dd Import latest JFFS2 code from David Woodhouse
gthomas
parents:
diff changeset
60 int
cd7d2afbc7dd Import latest JFFS2 code from David Woodhouse
gthomas
parents:
diff changeset
61 jffs2_flash_direct_writev(struct jffs2_sb_info *c, const struct iovec *vecs,
cd7d2afbc7dd Import latest JFFS2 code from David Woodhouse
gthomas
parents:
diff changeset
62 unsigned long count, loff_t to, size_t * retlen)
cd7d2afbc7dd Import latest JFFS2 code from David Woodhouse
gthomas
parents:
diff changeset
63 {
cd7d2afbc7dd Import latest JFFS2 code from David Woodhouse
gthomas
parents:
diff changeset
64 unsigned long i;
cd7d2afbc7dd Import latest JFFS2 code from David Woodhouse
gthomas
parents:
diff changeset
65 size_t totlen = 0, thislen;
cd7d2afbc7dd Import latest JFFS2 code from David Woodhouse
gthomas
parents:
diff changeset
66 int ret = 0;
cd7d2afbc7dd Import latest JFFS2 code from David Woodhouse
gthomas
parents:
diff changeset
67
cd7d2afbc7dd Import latest JFFS2 code from David Woodhouse
gthomas
parents:
diff changeset
68 for (i = 0; i < count; i++) {
cd7d2afbc7dd Import latest JFFS2 code from David Woodhouse
gthomas
parents:
diff changeset
69 // writes need to be aligned but the data we're passed may not be
cd7d2afbc7dd Import latest JFFS2 code from David Woodhouse
gthomas
parents:
diff changeset
70 // Observation suggests most unaligned writes are small, so we
cd7d2afbc7dd Import latest JFFS2 code from David Woodhouse
gthomas
parents:
diff changeset
71 // optimize for that case.
cd7d2afbc7dd Import latest JFFS2 code from David Woodhouse
gthomas
parents:
diff changeset
72
cd7d2afbc7dd Import latest JFFS2 code from David Woodhouse
gthomas
parents:
diff changeset
73 if (((vecs[i].iov_len & (sizeof (int) - 1))) ||
cd7d2afbc7dd Import latest JFFS2 code from David Woodhouse
gthomas
parents:
diff changeset
74 (((unsigned long) vecs[i].
cd7d2afbc7dd Import latest JFFS2 code from David Woodhouse
gthomas
parents:
diff changeset
75 iov_base & (sizeof (unsigned long) - 1)))) {
cd7d2afbc7dd Import latest JFFS2 code from David Woodhouse
gthomas
parents:
diff changeset
76 // are there iov's after this one? Or is it so much we'd need
cd7d2afbc7dd Import latest JFFS2 code from David Woodhouse
gthomas
parents:
diff changeset
77 // to do multiple writes anyway?
cd7d2afbc7dd Import latest JFFS2 code from David Woodhouse
gthomas
parents:
diff changeset
78 if ((i + 1) < count || vecs[i].iov_len > 256) {
cd7d2afbc7dd Import latest JFFS2 code from David Woodhouse
gthomas
parents:
diff changeset
79 // cop out and malloc
cd7d2afbc7dd Import latest JFFS2 code from David Woodhouse
gthomas
parents:
diff changeset
80 unsigned long j;
cd7d2afbc7dd Import latest JFFS2 code from David Woodhouse
gthomas
parents:
diff changeset
81 ssize_t sizetomalloc = 0, totvecsize = 0;
cd7d2afbc7dd Import latest JFFS2 code from David Woodhouse
gthomas
parents:
diff changeset
82 char *cbuf, *cbufptr;
cd7d2afbc7dd Import latest JFFS2 code from David Woodhouse
gthomas
parents:
diff changeset
83
cd7d2afbc7dd Import latest JFFS2 code from David Woodhouse
gthomas
parents:
diff changeset
84 for (j = i; j < count; j++)
cd7d2afbc7dd Import latest JFFS2 code from David Woodhouse
gthomas
parents:
diff changeset
85 totvecsize += vecs[j].iov_len;
cd7d2afbc7dd Import latest JFFS2 code from David Woodhouse
gthomas
parents:
diff changeset
86
cd7d2afbc7dd Import latest JFFS2 code from David Woodhouse
gthomas
parents:
diff changeset
87 // pad up in case unaligned
cd7d2afbc7dd Import latest JFFS2 code from David Woodhouse
gthomas
parents:
diff changeset
88 sizetomalloc = totvecsize + sizeof (int) - 1;
cd7d2afbc7dd Import latest JFFS2 code from David Woodhouse
gthomas
parents:
diff changeset
89 sizetomalloc &= ~(sizeof (int) - 1);
cd7d2afbc7dd Import latest JFFS2 code from David Woodhouse
gthomas
parents:
diff changeset
90 cbuf = (char *) malloc(sizetomalloc);
cd7d2afbc7dd Import latest JFFS2 code from David Woodhouse
gthomas
parents:
diff changeset
91 // malloc returns aligned memory
cd7d2afbc7dd Import latest JFFS2 code from David Woodhouse
gthomas
parents:
diff changeset
92 if (!cbuf) {
cd7d2afbc7dd Import latest JFFS2 code from David Woodhouse
gthomas
parents:
diff changeset
93 ret = -ENOMEM;
cd7d2afbc7dd Import latest JFFS2 code from David Woodhouse
gthomas
parents:
diff changeset
94 goto writev_out;
cd7d2afbc7dd Import latest JFFS2 code from David Woodhouse
gthomas
parents:
diff changeset
95 }
cd7d2afbc7dd Import latest JFFS2 code from David Woodhouse
gthomas
parents:
diff changeset
96 cbufptr = cbuf;
cd7d2afbc7dd Import latest JFFS2 code from David Woodhouse
gthomas
parents:
diff changeset
97 for (j = i; j < count; j++) {
cd7d2afbc7dd Import latest JFFS2 code from David Woodhouse
gthomas
parents:
diff changeset
98 memcpy(cbufptr, vecs[j].iov_base,
cd7d2afbc7dd Import latest JFFS2 code from David Woodhouse
gthomas
parents:
diff changeset
99 vecs[j].iov_len);
cd7d2afbc7dd Import latest JFFS2 code from David Woodhouse
gthomas
parents:
diff changeset
100 cbufptr += vecs[j].iov_len;
cd7d2afbc7dd Import latest JFFS2 code from David Woodhouse
gthomas
parents:
diff changeset
101 }
cd7d2afbc7dd Import latest JFFS2 code from David Woodhouse
gthomas
parents:
diff changeset
102 ret =
cd7d2afbc7dd Import latest JFFS2 code from David Woodhouse
gthomas
parents:
diff changeset
103 jffs2_flash_write(c, to, sizetomalloc,
cd7d2afbc7dd Import latest JFFS2 code from David Woodhouse
gthomas
parents:
diff changeset
104 &thislen, cbuf);
cd7d2afbc7dd Import latest JFFS2 code from David Woodhouse
gthomas
parents:
diff changeset
105 if (thislen > totvecsize) // in case it was aligned up
cd7d2afbc7dd Import latest JFFS2 code from David Woodhouse
gthomas
parents:
diff changeset
106 thislen = totvecsize;
cd7d2afbc7dd Import latest JFFS2 code from David Woodhouse
gthomas
parents:
diff changeset
107 totlen += thislen;
cd7d2afbc7dd Import latest JFFS2 code from David Woodhouse
gthomas
parents:
diff changeset
108 free(cbuf);
cd7d2afbc7dd Import latest JFFS2 code from David Woodhouse
gthomas
parents:
diff changeset
109 goto writev_out;
cd7d2afbc7dd Import latest JFFS2 code from David Woodhouse
gthomas
parents:
diff changeset
110 } else {
cd7d2afbc7dd Import latest JFFS2 code from David Woodhouse
gthomas
parents:
diff changeset
111 // otherwise optimize for the common case
cd7d2afbc7dd Import latest JFFS2 code from David Woodhouse
gthomas
parents:
diff changeset
112 int buf[256 / sizeof (int)]; // int, so int aligned
cd7d2afbc7dd Import latest JFFS2 code from David Woodhouse
gthomas
parents:
diff changeset
113 size_t lentowrite;
cd7d2afbc7dd Import latest JFFS2 code from David Woodhouse
gthomas
parents:
diff changeset
114
cd7d2afbc7dd Import latest JFFS2 code from David Woodhouse
gthomas
parents:
diff changeset
115 lentowrite = vecs[i].iov_len;
cd7d2afbc7dd Import latest JFFS2 code from David Woodhouse
gthomas
parents:
diff changeset
116 // pad up in case its unaligned
cd7d2afbc7dd Import latest JFFS2 code from David Woodhouse
gthomas
parents:
diff changeset
117 lentowrite += sizeof (int) - 1;
cd7d2afbc7dd Import latest JFFS2 code from David Woodhouse
gthomas
parents:
diff changeset
118 lentowrite &= ~(sizeof (int) - 1);
cd7d2afbc7dd Import latest JFFS2 code from David Woodhouse
gthomas
parents:
diff changeset
119 memcpy(buf, vecs[i].iov_base, lentowrite);
cd7d2afbc7dd Import latest JFFS2 code from David Woodhouse
gthomas
parents:
diff changeset
120
cd7d2afbc7dd Import latest JFFS2 code from David Woodhouse
gthomas
parents:
diff changeset
121 ret =
cd7d2afbc7dd Import latest JFFS2 code from David Woodhouse
gthomas
parents:
diff changeset
122 jffs2_flash_write(c, to, lentowrite,
cd7d2afbc7dd Import latest JFFS2 code from David Woodhouse
gthomas
parents:
diff changeset
123 &thislen, (char *) &buf);
cd7d2afbc7dd Import latest JFFS2 code from David Woodhouse
gthomas
parents:
diff changeset
124 if (thislen > vecs[i].iov_len)
cd7d2afbc7dd Import latest JFFS2 code from David Woodhouse
gthomas
parents:
diff changeset
125 thislen = vecs[i].iov_len;
cd7d2afbc7dd Import latest JFFS2 code from David Woodhouse
gthomas
parents:
diff changeset
126 } // else
cd7d2afbc7dd Import latest JFFS2 code from David Woodhouse
gthomas
parents:
diff changeset
127 } else
cd7d2afbc7dd Import latest JFFS2 code from David Woodhouse
gthomas
parents:
diff changeset
128 ret =
cd7d2afbc7dd Import latest JFFS2 code from David Woodhouse
gthomas
parents:
diff changeset
129 jffs2_flash_write(c, to, vecs[i].iov_len, &thislen,
cd7d2afbc7dd Import latest JFFS2 code from David Woodhouse
gthomas
parents:
diff changeset
130 vecs[i].iov_base);
cd7d2afbc7dd Import latest JFFS2 code from David Woodhouse
gthomas
parents:
diff changeset
131 totlen += thislen;
cd7d2afbc7dd Import latest JFFS2 code from David Woodhouse
gthomas
parents:
diff changeset
132 if (ret || thislen != vecs[i].iov_len)
cd7d2afbc7dd Import latest JFFS2 code from David Woodhouse
gthomas
parents:
diff changeset
133 break;
cd7d2afbc7dd Import latest JFFS2 code from David Woodhouse
gthomas
parents:
diff changeset
134 to += vecs[i].iov_len;
cd7d2afbc7dd Import latest JFFS2 code from David Woodhouse
gthomas
parents:
diff changeset
135 }
cd7d2afbc7dd Import latest JFFS2 code from David Woodhouse
gthomas
parents:
diff changeset
136 writev_out:
cd7d2afbc7dd Import latest JFFS2 code from David Woodhouse
gthomas
parents:
diff changeset
137 if (retlen)
cd7d2afbc7dd Import latest JFFS2 code from David Woodhouse
gthomas
parents:
diff changeset
138 *retlen = totlen;
cd7d2afbc7dd Import latest JFFS2 code from David Woodhouse
gthomas
parents:
diff changeset
139
cd7d2afbc7dd Import latest JFFS2 code from David Woodhouse
gthomas
parents:
diff changeset
140 return ret;
cd7d2afbc7dd Import latest JFFS2 code from David Woodhouse
gthomas
parents:
diff changeset
141 }
cd7d2afbc7dd Import latest JFFS2 code from David Woodhouse
gthomas
parents:
diff changeset
142
cd7d2afbc7dd Import latest JFFS2 code from David Woodhouse
gthomas
parents:
diff changeset
143 cyg_bool jffs2_flash_erase(struct jffs2_sb_info * c,
cd7d2afbc7dd Import latest JFFS2 code from David Woodhouse
gthomas
parents:
diff changeset
144 struct jffs2_eraseblock * jeb)
cd7d2afbc7dd Import latest JFFS2 code from David Woodhouse
gthomas
parents:
diff changeset
145 {
cd7d2afbc7dd Import latest JFFS2 code from David Woodhouse
gthomas
parents:
diff changeset
146 cyg_io_flash_getconfig_erase_t e;
1705
99834d6b6eeb * tests/fileio1.c (main): If we have two filesystem configured
asl
parents: 1443
diff changeset
147 cyg_flashaddr_t err_addr;
1443
cd7d2afbc7dd Import latest JFFS2 code from David Woodhouse
gthomas
parents:
diff changeset
148 Cyg_ErrNo err;
cd7d2afbc7dd Import latest JFFS2 code from David Woodhouse
gthomas
parents:
diff changeset
149 cyg_uint32 len = sizeof (e);
cd7d2afbc7dd Import latest JFFS2 code from David Woodhouse
gthomas
parents:
diff changeset
150 struct super_block *sb = OFNI_BS_2SFFJ(c);
cd7d2afbc7dd Import latest JFFS2 code from David Woodhouse
gthomas
parents:
diff changeset
151
cd7d2afbc7dd Import latest JFFS2 code from David Woodhouse
gthomas
parents:
diff changeset
152 e.offset = jeb->offset;
cd7d2afbc7dd Import latest JFFS2 code from David Woodhouse
gthomas
parents:
diff changeset
153 e.len = c->sector_size;
cd7d2afbc7dd Import latest JFFS2 code from David Woodhouse
gthomas
parents:
diff changeset
154 e.err_address = &err_addr;
cd7d2afbc7dd Import latest JFFS2 code from David Woodhouse
gthomas
parents:
diff changeset
155
cd7d2afbc7dd Import latest JFFS2 code from David Woodhouse
gthomas
parents:
diff changeset
156 // D2(printf("FLASH ERASE ENABLED!!!\n"));
cd7d2afbc7dd Import latest JFFS2 code from David Woodhouse
gthomas
parents:
diff changeset
157 // D2(printf("erase address = %x\n", CYGNUM_FS_JFFS2_BASE_ADDRESS + jeb->offset));
cd7d2afbc7dd Import latest JFFS2 code from David Woodhouse
gthomas
parents:
diff changeset
158 // D2(printf("size = %x\n", c->sector_size));
cd7d2afbc7dd Import latest JFFS2 code from David Woodhouse
gthomas
parents:
diff changeset
159
cd7d2afbc7dd Import latest JFFS2 code from David Woodhouse
gthomas
parents:
diff changeset
160 err = cyg_io_get_config(sb->s_dev, CYG_IO_GET_CONFIG_FLASH_ERASE,
cd7d2afbc7dd Import latest JFFS2 code from David Woodhouse
gthomas
parents:
diff changeset
161 &e, &len);
cd7d2afbc7dd Import latest JFFS2 code from David Woodhouse
gthomas
parents:
diff changeset
162
cd7d2afbc7dd Import latest JFFS2 code from David Woodhouse
gthomas
parents:
diff changeset
163 return (err != ENOERR || e.flasherr != 0);
cd7d2afbc7dd Import latest JFFS2 code from David Woodhouse
gthomas
parents:
diff changeset
164 }
cd7d2afbc7dd Import latest JFFS2 code from David Woodhouse
gthomas
parents:
diff changeset
165