Lines Matching refs:mtdblk

114 static int write_cached_data (struct mtdblk_dev *mtdblk)
116 struct mtd_info *mtd = mtdblk->mbd.mtd;
119 if (mtdblk->cache_state != STATE_DIRTY)
124 mtdblk->cache_offset, mtdblk->cache_size);
126 ret = erase_write (mtd, mtdblk->cache_offset,
127 mtdblk->cache_size, mtdblk->cache_data);
138 mtdblk->cache_state = STATE_EMPTY;
143 static int do_cached_write (struct mtdblk_dev *mtdblk, unsigned long pos,
146 struct mtd_info *mtd = mtdblk->mbd.mtd;
147 unsigned int sect_size = mtdblk->cache_size;
176 if (mtdblk->cache_state == STATE_DIRTY &&
177 mtdblk->cache_offset != sect_start) {
178 ret = write_cached_data(mtdblk);
183 if (mtdblk->cache_state == STATE_EMPTY ||
184 mtdblk->cache_offset != sect_start) {
186 mtdblk->cache_state = STATE_EMPTY;
188 &retlen, mtdblk->cache_data);
194 mtdblk->cache_offset = sect_start;
195 mtdblk->cache_size = sect_size;
196 mtdblk->cache_state = STATE_CLEAN;
200 memcpy (mtdblk->cache_data + offset, buf, size);
201 mtdblk->cache_state = STATE_DIRTY;
213 static int do_cached_read (struct mtdblk_dev *mtdblk, unsigned long pos,
216 struct mtd_info *mtd = mtdblk->mbd.mtd;
217 unsigned int sect_size = mtdblk->cache_size;
240 if (mtdblk->cache_state != STATE_EMPTY &&
241 mtdblk->cache_offset == sect_start) {
242 memcpy (buf, mtdblk->cache_data + offset, size);
262 struct mtdblk_dev *mtdblk = container_of(dev, struct mtdblk_dev, mbd);
263 return do_cached_read(mtdblk, block<<9, 512, buf);
269 struct mtdblk_dev *mtdblk = container_of(dev, struct mtdblk_dev, mbd);
270 if (unlikely(!mtdblk->cache_data && mtdblk->cache_size)) {
271 mtdblk->cache_data = vmalloc(mtdblk->mbd.mtd->erasesize);
272 if (!mtdblk->cache_data)
279 return do_cached_write(mtdblk, block<<9, 512, buf);
284 struct mtdblk_dev *mtdblk = container_of(mbd, struct mtdblk_dev, mbd);
289 if (mtdblk->count) {
290 mtdblk->count++;
296 mtdblk->count = 1;
297 mutex_init(&mtdblk->cache_mutex);
298 mtdblk->cache_state = STATE_EMPTY;
300 mtdblk->cache_size = mbd->mtd->erasesize;
301 mtdblk->cache_data = NULL;
313 struct mtdblk_dev *mtdblk = container_of(mbd, struct mtdblk_dev, mbd);
319 mutex_lock(&mtdblk->cache_mutex);
320 write_cached_data(mtdblk);
321 mutex_unlock(&mtdblk->cache_mutex);
323 if (!--mtdblk->count) {
330 vfree(mtdblk->cache_data);
342 struct mtdblk_dev *mtdblk = container_of(dev, struct mtdblk_dev, mbd);
344 mutex_lock(&mtdblk->cache_mutex);
345 write_cached_data(mtdblk);
346 mutex_unlock(&mtdblk->cache_mutex);