Lines Matching defs:mtdblk

78 static int write_cached_data (struct mtdblk_dev *mtdblk)
80 struct mtd_info *mtd = mtdblk->mbd.mtd;
83 if (mtdblk->cache_state != STATE_DIRTY)
88 mtdblk->cache_offset, mtdblk->cache_size);
90 ret = erase_write (mtd, mtdblk->cache_offset,
91 mtdblk->cache_size, mtdblk->cache_data);
105 mtdblk->cache_state = STATE_EMPTY;
110 static int do_cached_write (struct mtdblk_dev *mtdblk, unsigned long pos,
113 struct mtd_info *mtd = mtdblk->mbd.mtd;
114 unsigned int sect_size = mtdblk->cache_size;
143 if (mtdblk->cache_state == STATE_DIRTY &&
144 mtdblk->cache_offset != sect_start) {
145 ret = write_cached_data(mtdblk);
150 if (mtdblk->cache_state == STATE_EMPTY ||
151 mtdblk->cache_offset != sect_start) {
153 mtdblk->cache_state = STATE_EMPTY;
155 &retlen, mtdblk->cache_data);
161 mtdblk->cache_offset = sect_start;
162 mtdblk->cache_size = sect_size;
163 mtdblk->cache_state = STATE_CLEAN;
167 memcpy (mtdblk->cache_data + offset, buf, size);
168 mtdblk->cache_state = STATE_DIRTY;
180 static int do_cached_read (struct mtdblk_dev *mtdblk, unsigned long pos,
183 struct mtd_info *mtd = mtdblk->mbd.mtd;
184 unsigned int sect_size = mtdblk->cache_size;
211 if (mtdblk->cache_state != STATE_EMPTY &&
212 mtdblk->cache_offset == sect_start) {
213 memcpy (buf, mtdblk->cache_data + offset, size);
233 struct mtdblk_dev *mtdblk = container_of(dev, struct mtdblk_dev, mbd);
234 return do_cached_read(mtdblk, block<<9, 512, buf);
240 struct mtdblk_dev *mtdblk = container_of(dev, struct mtdblk_dev, mbd);
241 if (unlikely(!mtdblk->cache_data && mtdblk->cache_size)) {
242 mtdblk->cache_data = vmalloc(mtdblk->mbd.mtd->erasesize);
243 if (!mtdblk->cache_data)
250 return do_cached_write(mtdblk, block<<9, 512, buf);
255 struct mtdblk_dev *mtdblk = container_of(mbd, struct mtdblk_dev, mbd);
259 if (mtdblk->count) {
260 mtdblk->count++;
265 mtdblk->count = 1;
266 mutex_init(&mtdblk->cache_mutex);
267 mtdblk->cache_state = STATE_EMPTY;
269 mtdblk->cache_size = mbd->mtd->erasesize;
270 mtdblk->cache_data = NULL;
280 struct mtdblk_dev *mtdblk = container_of(mbd, struct mtdblk_dev, mbd);
284 mutex_lock(&mtdblk->cache_mutex);
285 write_cached_data(mtdblk);
286 mutex_unlock(&mtdblk->cache_mutex);
288 if (!--mtdblk->count) {
295 vfree(mtdblk->cache_data);
303 struct mtdblk_dev *mtdblk = container_of(dev, struct mtdblk_dev, mbd);
306 mutex_lock(&mtdblk->cache_mutex);
307 ret = write_cached_data(mtdblk);
308 mutex_unlock(&mtdblk->cache_mutex);