mtdblk 78 drivers/mtd/mtdblock.c static int write_cached_data (struct mtdblk_dev *mtdblk) mtdblk 80 drivers/mtd/mtdblock.c struct mtd_info *mtd = mtdblk->mbd.mtd; mtdblk 83 drivers/mtd/mtdblock.c if (mtdblk->cache_state != STATE_DIRTY) mtdblk 88 drivers/mtd/mtdblock.c mtdblk->cache_offset, mtdblk->cache_size); mtdblk 90 drivers/mtd/mtdblock.c ret = erase_write (mtd, mtdblk->cache_offset, mtdblk 91 drivers/mtd/mtdblock.c mtdblk->cache_size, mtdblk->cache_data); mtdblk 102 drivers/mtd/mtdblock.c mtdblk->cache_state = STATE_EMPTY; mtdblk 107 drivers/mtd/mtdblock.c static int do_cached_write (struct mtdblk_dev *mtdblk, unsigned long pos, mtdblk 110 drivers/mtd/mtdblock.c struct mtd_info *mtd = mtdblk->mbd.mtd; mtdblk 111 drivers/mtd/mtdblock.c unsigned int sect_size = mtdblk->cache_size; mtdblk 140 drivers/mtd/mtdblock.c if (mtdblk->cache_state == STATE_DIRTY && mtdblk 141 drivers/mtd/mtdblock.c mtdblk->cache_offset != sect_start) { mtdblk 142 drivers/mtd/mtdblock.c ret = write_cached_data(mtdblk); mtdblk 147 drivers/mtd/mtdblock.c if (mtdblk->cache_state == STATE_EMPTY || mtdblk 148 drivers/mtd/mtdblock.c mtdblk->cache_offset != sect_start) { mtdblk 150 drivers/mtd/mtdblock.c mtdblk->cache_state = STATE_EMPTY; mtdblk 152 drivers/mtd/mtdblock.c &retlen, mtdblk->cache_data); mtdblk 158 drivers/mtd/mtdblock.c mtdblk->cache_offset = sect_start; mtdblk 159 drivers/mtd/mtdblock.c mtdblk->cache_size = sect_size; mtdblk 160 drivers/mtd/mtdblock.c mtdblk->cache_state = STATE_CLEAN; mtdblk 164 drivers/mtd/mtdblock.c memcpy (mtdblk->cache_data + offset, buf, size); mtdblk 165 drivers/mtd/mtdblock.c mtdblk->cache_state = STATE_DIRTY; mtdblk 177 drivers/mtd/mtdblock.c static int do_cached_read (struct mtdblk_dev *mtdblk, unsigned long pos, mtdblk 180 drivers/mtd/mtdblock.c struct mtd_info *mtd = mtdblk->mbd.mtd; mtdblk 181 drivers/mtd/mtdblock.c unsigned int sect_size = mtdblk->cache_size; mtdblk 204 drivers/mtd/mtdblock.c if (mtdblk->cache_state != STATE_EMPTY && mtdblk 205 drivers/mtd/mtdblock.c mtdblk->cache_offset == sect_start) { mtdblk 206 drivers/mtd/mtdblock.c memcpy (buf, mtdblk->cache_data + offset, size); mtdblk 226 drivers/mtd/mtdblock.c struct mtdblk_dev *mtdblk = container_of(dev, struct mtdblk_dev, mbd); mtdblk 227 drivers/mtd/mtdblock.c return do_cached_read(mtdblk, block<<9, 512, buf); mtdblk 233 drivers/mtd/mtdblock.c struct mtdblk_dev *mtdblk = container_of(dev, struct mtdblk_dev, mbd); mtdblk 234 drivers/mtd/mtdblock.c if (unlikely(!mtdblk->cache_data && mtdblk->cache_size)) { mtdblk 235 drivers/mtd/mtdblock.c mtdblk->cache_data = vmalloc(mtdblk->mbd.mtd->erasesize); mtdblk 236 drivers/mtd/mtdblock.c if (!mtdblk->cache_data) mtdblk 243 drivers/mtd/mtdblock.c return do_cached_write(mtdblk, block<<9, 512, buf); mtdblk 248 drivers/mtd/mtdblock.c struct mtdblk_dev *mtdblk = container_of(mbd, struct mtdblk_dev, mbd); mtdblk 252 drivers/mtd/mtdblock.c if (mtdblk->count) { mtdblk 253 drivers/mtd/mtdblock.c mtdblk->count++; mtdblk 258 drivers/mtd/mtdblock.c mtdblk->count = 1; mtdblk 259 drivers/mtd/mtdblock.c mutex_init(&mtdblk->cache_mutex); mtdblk 260 drivers/mtd/mtdblock.c mtdblk->cache_state = STATE_EMPTY; mtdblk 262 drivers/mtd/mtdblock.c mtdblk->cache_size = mbd->mtd->erasesize; mtdblk 263 drivers/mtd/mtdblock.c mtdblk->cache_data = NULL; mtdblk 273 drivers/mtd/mtdblock.c struct mtdblk_dev *mtdblk = container_of(mbd, struct mtdblk_dev, mbd); mtdblk 277 drivers/mtd/mtdblock.c mutex_lock(&mtdblk->cache_mutex); mtdblk 278 drivers/mtd/mtdblock.c write_cached_data(mtdblk); mtdblk 279 drivers/mtd/mtdblock.c mutex_unlock(&mtdblk->cache_mutex); mtdblk 281 drivers/mtd/mtdblock.c if (!--mtdblk->count) { mtdblk 288 drivers/mtd/mtdblock.c vfree(mtdblk->cache_data); mtdblk 296 drivers/mtd/mtdblock.c struct mtdblk_dev *mtdblk = container_of(dev, struct mtdblk_dev, mbd); mtdblk 298 drivers/mtd/mtdblock.c mutex_lock(&mtdblk->cache_mutex); mtdblk 299 drivers/mtd/mtdblock.c write_cached_data(mtdblk); mtdblk 300 drivers/mtd/mtdblock.c mutex_unlock(&mtdblk->cache_mutex);