Merge master.kernel.org:/pub/scm/linux/kernel/git/holtmann/bluetooth-2.6
[linux-2.6] / fs / jffs2 / fs.c
1 /*
2  * JFFS2 -- Journalling Flash File System, Version 2.
3  *
4  * Copyright © 2001-2007 Red Hat, Inc.
5  *
6  * Created by David Woodhouse <dwmw2@infradead.org>
7  *
8  * For licensing information, see the file 'LICENCE' in this directory.
9  *
10  */
11
12 #include <linux/capability.h>
13 #include <linux/kernel.h>
14 #include <linux/sched.h>
15 #include <linux/fs.h>
16 #include <linux/list.h>
17 #include <linux/mtd/mtd.h>
18 #include <linux/pagemap.h>
19 #include <linux/slab.h>
20 #include <linux/vmalloc.h>
21 #include <linux/vfs.h>
22 #include <linux/crc32.h>
23 #include "nodelist.h"
24
25 static int jffs2_flash_setup(struct jffs2_sb_info *c);
26
27 static int jffs2_do_setattr (struct inode *inode, struct iattr *iattr)
28 {
29         struct jffs2_full_dnode *old_metadata, *new_metadata;
30         struct jffs2_inode_info *f = JFFS2_INODE_INFO(inode);
31         struct jffs2_sb_info *c = JFFS2_SB_INFO(inode->i_sb);
32         struct jffs2_raw_inode *ri;
33         union jffs2_device_node dev;
34         unsigned char *mdata = NULL;
35         int mdatalen = 0;
36         unsigned int ivalid;
37         uint32_t alloclen;
38         int ret;
39         D1(printk(KERN_DEBUG "jffs2_setattr(): ino #%lu\n", inode->i_ino));
40         ret = inode_change_ok(inode, iattr);
41         if (ret)
42                 return ret;
43
44         /* Special cases - we don't want more than one data node
45            for these types on the medium at any time. So setattr
46            must read the original data associated with the node
47            (i.e. the device numbers or the target name) and write
48            it out again with the appropriate data attached */
49         if (S_ISBLK(inode->i_mode) || S_ISCHR(inode->i_mode)) {
50                 /* For these, we don't actually need to read the old node */
51                 mdatalen = jffs2_encode_dev(&dev, inode->i_rdev);
52                 mdata = (char *)&dev;
53                 D1(printk(KERN_DEBUG "jffs2_setattr(): Writing %d bytes of kdev_t\n", mdatalen));
54         } else if (S_ISLNK(inode->i_mode)) {
55                 down(&f->sem);
56                 mdatalen = f->metadata->size;
57                 mdata = kmalloc(f->metadata->size, GFP_USER);
58                 if (!mdata) {
59                         up(&f->sem);
60                         return -ENOMEM;
61                 }
62                 ret = jffs2_read_dnode(c, f, f->metadata, mdata, 0, mdatalen);
63                 if (ret) {
64                         up(&f->sem);
65                         kfree(mdata);
66                         return ret;
67                 }
68                 up(&f->sem);
69                 D1(printk(KERN_DEBUG "jffs2_setattr(): Writing %d bytes of symlink target\n", mdatalen));
70         }
71
72         ri = jffs2_alloc_raw_inode();
73         if (!ri) {
74                 if (S_ISLNK(inode->i_mode))
75                         kfree(mdata);
76                 return -ENOMEM;
77         }
78
79         ret = jffs2_reserve_space(c, sizeof(*ri) + mdatalen, &alloclen,
80                                   ALLOC_NORMAL, JFFS2_SUMMARY_INODE_SIZE);
81         if (ret) {
82                 jffs2_free_raw_inode(ri);
83                 if (S_ISLNK(inode->i_mode & S_IFMT))
84                          kfree(mdata);
85                 return ret;
86         }
87         down(&f->sem);
88         ivalid = iattr->ia_valid;
89
90         ri->magic = cpu_to_je16(JFFS2_MAGIC_BITMASK);
91         ri->nodetype = cpu_to_je16(JFFS2_NODETYPE_INODE);
92         ri->totlen = cpu_to_je32(sizeof(*ri) + mdatalen);
93         ri->hdr_crc = cpu_to_je32(crc32(0, ri, sizeof(struct jffs2_unknown_node)-4));
94
95         ri->ino = cpu_to_je32(inode->i_ino);
96         ri->version = cpu_to_je32(++f->highest_version);
97
98         ri->uid = cpu_to_je16((ivalid & ATTR_UID)?iattr->ia_uid:inode->i_uid);
99         ri->gid = cpu_to_je16((ivalid & ATTR_GID)?iattr->ia_gid:inode->i_gid);
100
101         if (ivalid & ATTR_MODE)
102                 if (iattr->ia_mode & S_ISGID &&
103                     !in_group_p(je16_to_cpu(ri->gid)) && !capable(CAP_FSETID))
104                         ri->mode = cpu_to_jemode(iattr->ia_mode & ~S_ISGID);
105                 else
106                         ri->mode = cpu_to_jemode(iattr->ia_mode);
107         else
108                 ri->mode = cpu_to_jemode(inode->i_mode);
109
110
111         ri->isize = cpu_to_je32((ivalid & ATTR_SIZE)?iattr->ia_size:inode->i_size);
112         ri->atime = cpu_to_je32(I_SEC((ivalid & ATTR_ATIME)?iattr->ia_atime:inode->i_atime));
113         ri->mtime = cpu_to_je32(I_SEC((ivalid & ATTR_MTIME)?iattr->ia_mtime:inode->i_mtime));
114         ri->ctime = cpu_to_je32(I_SEC((ivalid & ATTR_CTIME)?iattr->ia_ctime:inode->i_ctime));
115
116         ri->offset = cpu_to_je32(0);
117         ri->csize = ri->dsize = cpu_to_je32(mdatalen);
118         ri->compr = JFFS2_COMPR_NONE;
119         if (ivalid & ATTR_SIZE && inode->i_size < iattr->ia_size) {
120                 /* It's an extension. Make it a hole node */
121                 ri->compr = JFFS2_COMPR_ZERO;
122                 ri->dsize = cpu_to_je32(iattr->ia_size - inode->i_size);
123                 ri->offset = cpu_to_je32(inode->i_size);
124         }
125         ri->node_crc = cpu_to_je32(crc32(0, ri, sizeof(*ri)-8));
126         if (mdatalen)
127                 ri->data_crc = cpu_to_je32(crc32(0, mdata, mdatalen));
128         else
129                 ri->data_crc = cpu_to_je32(0);
130
131         new_metadata = jffs2_write_dnode(c, f, ri, mdata, mdatalen, ALLOC_NORMAL);
132         if (S_ISLNK(inode->i_mode))
133                 kfree(mdata);
134
135         if (IS_ERR(new_metadata)) {
136                 jffs2_complete_reservation(c);
137                 jffs2_free_raw_inode(ri);
138                 up(&f->sem);
139                 return PTR_ERR(new_metadata);
140         }
141         /* It worked. Update the inode */
142         inode->i_atime = ITIME(je32_to_cpu(ri->atime));
143         inode->i_ctime = ITIME(je32_to_cpu(ri->ctime));
144         inode->i_mtime = ITIME(je32_to_cpu(ri->mtime));
145         inode->i_mode = jemode_to_cpu(ri->mode);
146         inode->i_uid = je16_to_cpu(ri->uid);
147         inode->i_gid = je16_to_cpu(ri->gid);
148
149
150         old_metadata = f->metadata;
151
152         if (ivalid & ATTR_SIZE && inode->i_size > iattr->ia_size)
153                 jffs2_truncate_fragtree (c, &f->fragtree, iattr->ia_size);
154
155         if (ivalid & ATTR_SIZE && inode->i_size < iattr->ia_size) {
156                 jffs2_add_full_dnode_to_inode(c, f, new_metadata);
157                 inode->i_size = iattr->ia_size;
158                 f->metadata = NULL;
159         } else {
160                 f->metadata = new_metadata;
161         }
162         if (old_metadata) {
163                 jffs2_mark_node_obsolete(c, old_metadata->raw);
164                 jffs2_free_full_dnode(old_metadata);
165         }
166         jffs2_free_raw_inode(ri);
167
168         up(&f->sem);
169         jffs2_complete_reservation(c);
170
171         /* We have to do the vmtruncate() without f->sem held, since
172            some pages may be locked and waiting for it in readpage().
173            We are protected from a simultaneous write() extending i_size
174            back past iattr->ia_size, because do_truncate() holds the
175            generic inode semaphore. */
176         if (ivalid & ATTR_SIZE && inode->i_size > iattr->ia_size)
177                 vmtruncate(inode, iattr->ia_size);
178
179         return 0;
180 }
181
182 int jffs2_setattr(struct dentry *dentry, struct iattr *iattr)
183 {
184         int rc;
185
186         rc = jffs2_do_setattr(dentry->d_inode, iattr);
187         if (!rc && (iattr->ia_valid & ATTR_MODE))
188                 rc = jffs2_acl_chmod(dentry->d_inode);
189         return rc;
190 }
191
192 int jffs2_statfs(struct dentry *dentry, struct kstatfs *buf)
193 {
194         struct jffs2_sb_info *c = JFFS2_SB_INFO(dentry->d_sb);
195         unsigned long avail;
196
197         buf->f_type = JFFS2_SUPER_MAGIC;
198         buf->f_bsize = 1 << PAGE_SHIFT;
199         buf->f_blocks = c->flash_size >> PAGE_SHIFT;
200         buf->f_files = 0;
201         buf->f_ffree = 0;
202         buf->f_namelen = JFFS2_MAX_NAME_LEN;
203
204         spin_lock(&c->erase_completion_lock);
205         avail = c->dirty_size + c->free_size;
206         if (avail > c->sector_size * c->resv_blocks_write)
207                 avail -= c->sector_size * c->resv_blocks_write;
208         else
209                 avail = 0;
210         spin_unlock(&c->erase_completion_lock);
211
212         buf->f_bavail = buf->f_bfree = avail >> PAGE_SHIFT;
213
214         return 0;
215 }
216
217
218 void jffs2_clear_inode (struct inode *inode)
219 {
220         /* We can forget about this inode for now - drop all
221          *  the nodelists associated with it, etc.
222          */
223         struct jffs2_sb_info *c = JFFS2_SB_INFO(inode->i_sb);
224         struct jffs2_inode_info *f = JFFS2_INODE_INFO(inode);
225
226         D1(printk(KERN_DEBUG "jffs2_clear_inode(): ino #%lu mode %o\n", inode->i_ino, inode->i_mode));
227         jffs2_do_clear_inode(c, f);
228 }
229
230 void jffs2_read_inode (struct inode *inode)
231 {
232         struct jffs2_inode_info *f;
233         struct jffs2_sb_info *c;
234         struct jffs2_raw_inode latest_node;
235         union jffs2_device_node jdev;
236         dev_t rdev = 0;
237         int ret;
238
239         D1(printk(KERN_DEBUG "jffs2_read_inode(): inode->i_ino == %lu\n", inode->i_ino));
240
241         f = JFFS2_INODE_INFO(inode);
242         c = JFFS2_SB_INFO(inode->i_sb);
243
244         jffs2_init_inode_info(f);
245         down(&f->sem);
246
247         ret = jffs2_do_read_inode(c, f, inode->i_ino, &latest_node);
248
249         if (ret) {
250                 make_bad_inode(inode);
251                 up(&f->sem);
252                 return;
253         }
254         inode->i_mode = jemode_to_cpu(latest_node.mode);
255         inode->i_uid = je16_to_cpu(latest_node.uid);
256         inode->i_gid = je16_to_cpu(latest_node.gid);
257         inode->i_size = je32_to_cpu(latest_node.isize);
258         inode->i_atime = ITIME(je32_to_cpu(latest_node.atime));
259         inode->i_mtime = ITIME(je32_to_cpu(latest_node.mtime));
260         inode->i_ctime = ITIME(je32_to_cpu(latest_node.ctime));
261
262         inode->i_nlink = f->inocache->nlink;
263
264         inode->i_blocks = (inode->i_size + 511) >> 9;
265
266         switch (inode->i_mode & S_IFMT) {
267
268         case S_IFLNK:
269                 inode->i_op = &jffs2_symlink_inode_operations;
270                 break;
271
272         case S_IFDIR:
273         {
274                 struct jffs2_full_dirent *fd;
275
276                 for (fd=f->dents; fd; fd = fd->next) {
277                         if (fd->type == DT_DIR && fd->ino)
278                                 inc_nlink(inode);
279                 }
280                 /* and '..' */
281                 inc_nlink(inode);
282                 /* Root dir gets i_nlink 3 for some reason */
283                 if (inode->i_ino == 1)
284                         inc_nlink(inode);
285
286                 inode->i_op = &jffs2_dir_inode_operations;
287                 inode->i_fop = &jffs2_dir_operations;
288                 break;
289         }
290         case S_IFREG:
291                 inode->i_op = &jffs2_file_inode_operations;
292                 inode->i_fop = &jffs2_file_operations;
293                 inode->i_mapping->a_ops = &jffs2_file_address_operations;
294                 inode->i_mapping->nrpages = 0;
295                 break;
296
297         case S_IFBLK:
298         case S_IFCHR:
299                 /* Read the device numbers from the media */
300                 if (f->metadata->size != sizeof(jdev.old) &&
301                     f->metadata->size != sizeof(jdev.new)) {
302                         printk(KERN_NOTICE "Device node has strange size %d\n", f->metadata->size);
303                         up(&f->sem);
304                         jffs2_do_clear_inode(c, f);
305                         make_bad_inode(inode);
306                         return;
307                 }
308                 D1(printk(KERN_DEBUG "Reading device numbers from flash\n"));
309                 if (jffs2_read_dnode(c, f, f->metadata, (char *)&jdev, 0, f->metadata->size) < 0) {
310                         /* Eep */
311                         printk(KERN_NOTICE "Read device numbers for inode %lu failed\n", (unsigned long)inode->i_ino);
312                         up(&f->sem);
313                         jffs2_do_clear_inode(c, f);
314                         make_bad_inode(inode);
315                         return;
316                 }
317                 if (f->metadata->size == sizeof(jdev.old))
318                         rdev = old_decode_dev(je16_to_cpu(jdev.old));
319                 else
320                         rdev = new_decode_dev(je32_to_cpu(jdev.new));
321
322         case S_IFSOCK:
323         case S_IFIFO:
324                 inode->i_op = &jffs2_file_inode_operations;
325                 init_special_inode(inode, inode->i_mode, rdev);
326                 break;
327
328         default:
329                 printk(KERN_WARNING "jffs2_read_inode(): Bogus imode %o for ino %lu\n", inode->i_mode, (unsigned long)inode->i_ino);
330         }
331
332         up(&f->sem);
333
334         D1(printk(KERN_DEBUG "jffs2_read_inode() returning\n"));
335 }
336
337 void jffs2_dirty_inode(struct inode *inode)
338 {
339         struct iattr iattr;
340
341         if (!(inode->i_state & I_DIRTY_DATASYNC)) {
342                 D2(printk(KERN_DEBUG "jffs2_dirty_inode() not calling setattr() for ino #%lu\n", inode->i_ino));
343                 return;
344         }
345
346         D1(printk(KERN_DEBUG "jffs2_dirty_inode() calling setattr() for ino #%lu\n", inode->i_ino));
347
348         iattr.ia_valid = ATTR_MODE|ATTR_UID|ATTR_GID|ATTR_ATIME|ATTR_MTIME|ATTR_CTIME;
349         iattr.ia_mode = inode->i_mode;
350         iattr.ia_uid = inode->i_uid;
351         iattr.ia_gid = inode->i_gid;
352         iattr.ia_atime = inode->i_atime;
353         iattr.ia_mtime = inode->i_mtime;
354         iattr.ia_ctime = inode->i_ctime;
355
356         jffs2_do_setattr(inode, &iattr);
357 }
358
359 int jffs2_remount_fs (struct super_block *sb, int *flags, char *data)
360 {
361         struct jffs2_sb_info *c = JFFS2_SB_INFO(sb);
362
363         if (c->flags & JFFS2_SB_FLAG_RO && !(sb->s_flags & MS_RDONLY))
364                 return -EROFS;
365
366         /* We stop if it was running, then restart if it needs to.
367            This also catches the case where it was stopped and this
368            is just a remount to restart it.
369            Flush the writebuffer, if neccecary, else we loose it */
370         if (!(sb->s_flags & MS_RDONLY)) {
371                 jffs2_stop_garbage_collect_thread(c);
372                 down(&c->alloc_sem);
373                 jffs2_flush_wbuf_pad(c);
374                 up(&c->alloc_sem);
375         }
376
377         if (!(*flags & MS_RDONLY))
378                 jffs2_start_garbage_collect_thread(c);
379
380         *flags |= MS_NOATIME;
381
382         return 0;
383 }
384
385 void jffs2_write_super (struct super_block *sb)
386 {
387         struct jffs2_sb_info *c = JFFS2_SB_INFO(sb);
388         sb->s_dirt = 0;
389
390         if (sb->s_flags & MS_RDONLY)
391                 return;
392
393         D1(printk(KERN_DEBUG "jffs2_write_super()\n"));
394         jffs2_garbage_collect_trigger(c);
395         jffs2_erase_pending_blocks(c, 0);
396         jffs2_flush_wbuf_gc(c, 0);
397 }
398
399
400 /* jffs2_new_inode: allocate a new inode and inocache, add it to the hash,
401    fill in the raw_inode while you're at it. */
402 struct inode *jffs2_new_inode (struct inode *dir_i, int mode, struct jffs2_raw_inode *ri)
403 {
404         struct inode *inode;
405         struct super_block *sb = dir_i->i_sb;
406         struct jffs2_sb_info *c;
407         struct jffs2_inode_info *f;
408         int ret;
409
410         D1(printk(KERN_DEBUG "jffs2_new_inode(): dir_i %ld, mode 0x%x\n", dir_i->i_ino, mode));
411
412         c = JFFS2_SB_INFO(sb);
413
414         inode = new_inode(sb);
415
416         if (!inode)
417                 return ERR_PTR(-ENOMEM);
418
419         f = JFFS2_INODE_INFO(inode);
420         jffs2_init_inode_info(f);
421         down(&f->sem);
422
423         memset(ri, 0, sizeof(*ri));
424         /* Set OS-specific defaults for new inodes */
425         ri->uid = cpu_to_je16(current->fsuid);
426
427         if (dir_i->i_mode & S_ISGID) {
428                 ri->gid = cpu_to_je16(dir_i->i_gid);
429                 if (S_ISDIR(mode))
430                         mode |= S_ISGID;
431         } else {
432                 ri->gid = cpu_to_je16(current->fsgid);
433         }
434         ri->mode =  cpu_to_jemode(mode);
435         ret = jffs2_do_new_inode (c, f, mode, ri);
436         if (ret) {
437                 make_bad_inode(inode);
438                 iput(inode);
439                 return ERR_PTR(ret);
440         }
441         inode->i_nlink = 1;
442         inode->i_ino = je32_to_cpu(ri->ino);
443         inode->i_mode = jemode_to_cpu(ri->mode);
444         inode->i_gid = je16_to_cpu(ri->gid);
445         inode->i_uid = je16_to_cpu(ri->uid);
446         inode->i_atime = inode->i_ctime = inode->i_mtime = CURRENT_TIME_SEC;
447         ri->atime = ri->mtime = ri->ctime = cpu_to_je32(I_SEC(inode->i_mtime));
448
449         inode->i_blocks = 0;
450         inode->i_size = 0;
451
452         insert_inode_hash(inode);
453
454         return inode;
455 }
456
457
458 int jffs2_do_fill_super(struct super_block *sb, void *data, int silent)
459 {
460         struct jffs2_sb_info *c;
461         struct inode *root_i;
462         int ret;
463         size_t blocks;
464
465         c = JFFS2_SB_INFO(sb);
466
467 #ifndef CONFIG_JFFS2_FS_WRITEBUFFER
468         if (c->mtd->type == MTD_NANDFLASH) {
469                 printk(KERN_ERR "jffs2: Cannot operate on NAND flash unless jffs2 NAND support is compiled in.\n");
470                 return -EINVAL;
471         }
472         if (c->mtd->type == MTD_DATAFLASH) {
473                 printk(KERN_ERR "jffs2: Cannot operate on DataFlash unless jffs2 DataFlash support is compiled in.\n");
474                 return -EINVAL;
475         }
476 #endif
477
478         c->flash_size = c->mtd->size;
479         c->sector_size = c->mtd->erasesize;
480         blocks = c->flash_size / c->sector_size;
481
482         /*
483          * Size alignment check
484          */
485         if ((c->sector_size * blocks) != c->flash_size) {
486                 c->flash_size = c->sector_size * blocks;
487                 printk(KERN_INFO "jffs2: Flash size not aligned to erasesize, reducing to %dKiB\n",
488                         c->flash_size / 1024);
489         }
490
491         if (c->flash_size < 5*c->sector_size) {
492                 printk(KERN_ERR "jffs2: Too few erase blocks (%d)\n", c->flash_size / c->sector_size);
493                 return -EINVAL;
494         }
495
496         c->cleanmarker_size = sizeof(struct jffs2_unknown_node);
497
498         /* NAND (or other bizarre) flash... do setup accordingly */
499         ret = jffs2_flash_setup(c);
500         if (ret)
501                 return ret;
502
503         c->inocache_list = kcalloc(INOCACHE_HASHSIZE, sizeof(struct jffs2_inode_cache *), GFP_KERNEL);
504         if (!c->inocache_list) {
505                 ret = -ENOMEM;
506                 goto out_wbuf;
507         }
508
509         jffs2_init_xattr_subsystem(c);
510
511         if ((ret = jffs2_do_mount_fs(c)))
512                 goto out_inohash;
513
514         ret = -EINVAL;
515
516         D1(printk(KERN_DEBUG "jffs2_do_fill_super(): Getting root inode\n"));
517         root_i = iget(sb, 1);
518         if (is_bad_inode(root_i)) {
519                 D1(printk(KERN_WARNING "get root inode failed\n"));
520                 goto out_root_i;
521         }
522
523         D1(printk(KERN_DEBUG "jffs2_do_fill_super(): d_alloc_root()\n"));
524         sb->s_root = d_alloc_root(root_i);
525         if (!sb->s_root)
526                 goto out_root_i;
527
528         sb->s_maxbytes = 0xFFFFFFFF;
529         sb->s_blocksize = PAGE_CACHE_SIZE;
530         sb->s_blocksize_bits = PAGE_CACHE_SHIFT;
531         sb->s_magic = JFFS2_SUPER_MAGIC;
532         if (!(sb->s_flags & MS_RDONLY))
533                 jffs2_start_garbage_collect_thread(c);
534         return 0;
535
536  out_root_i:
537         iput(root_i);
538         jffs2_free_ino_caches(c);
539         jffs2_free_raw_node_refs(c);
540         if (jffs2_blocks_use_vmalloc(c))
541                 vfree(c->blocks);
542         else
543                 kfree(c->blocks);
544  out_inohash:
545         jffs2_clear_xattr_subsystem(c);
546         kfree(c->inocache_list);
547  out_wbuf:
548         jffs2_flash_cleanup(c);
549
550         return ret;
551 }
552
553 void jffs2_gc_release_inode(struct jffs2_sb_info *c,
554                                    struct jffs2_inode_info *f)
555 {
556         iput(OFNI_EDONI_2SFFJ(f));
557 }
558
559 struct jffs2_inode_info *jffs2_gc_fetch_inode(struct jffs2_sb_info *c,
560                                                      int inum, int nlink)
561 {
562         struct inode *inode;
563         struct jffs2_inode_cache *ic;
564         if (!nlink) {
565                 /* The inode has zero nlink but its nodes weren't yet marked
566                    obsolete. This has to be because we're still waiting for
567                    the final (close() and) iput() to happen.
568
569                    There's a possibility that the final iput() could have
570                    happened while we were contemplating. In order to ensure
571                    that we don't cause a new read_inode() (which would fail)
572                    for the inode in question, we use ilookup() in this case
573                    instead of iget().
574
575                    The nlink can't _become_ zero at this point because we're
576                    holding the alloc_sem, and jffs2_do_unlink() would also
577                    need that while decrementing nlink on any inode.
578                 */
579                 inode = ilookup(OFNI_BS_2SFFJ(c), inum);
580                 if (!inode) {
581                         D1(printk(KERN_DEBUG "ilookup() failed for ino #%u; inode is probably deleted.\n",
582                                   inum));
583
584                         spin_lock(&c->inocache_lock);
585                         ic = jffs2_get_ino_cache(c, inum);
586                         if (!ic) {
587                                 D1(printk(KERN_DEBUG "Inode cache for ino #%u is gone.\n", inum));
588                                 spin_unlock(&c->inocache_lock);
589                                 return NULL;
590                         }
591                         if (ic->state != INO_STATE_CHECKEDABSENT) {
592                                 /* Wait for progress. Don't just loop */
593                                 D1(printk(KERN_DEBUG "Waiting for ino #%u in state %d\n",
594                                           ic->ino, ic->state));
595                                 sleep_on_spinunlock(&c->inocache_wq, &c->inocache_lock);
596                         } else {
597                                 spin_unlock(&c->inocache_lock);
598                         }
599
600                         return NULL;
601                 }
602         } else {
603                 /* Inode has links to it still; they're not going away because
604                    jffs2_do_unlink() would need the alloc_sem and we have it.
605                    Just iget() it, and if read_inode() is necessary that's OK.
606                 */
607                 inode = iget(OFNI_BS_2SFFJ(c), inum);
608                 if (!inode)
609                         return ERR_PTR(-ENOMEM);
610         }
611         if (is_bad_inode(inode)) {
612                 printk(KERN_NOTICE "Eep. read_inode() failed for ino #%u. nlink %d\n",
613                        inum, nlink);
614                 /* NB. This will happen again. We need to do something appropriate here. */
615                 iput(inode);
616                 return ERR_PTR(-EIO);
617         }
618
619         return JFFS2_INODE_INFO(inode);
620 }
621
622 unsigned char *jffs2_gc_fetch_page(struct jffs2_sb_info *c,
623                                    struct jffs2_inode_info *f,
624                                    unsigned long offset,
625                                    unsigned long *priv)
626 {
627         struct inode *inode = OFNI_EDONI_2SFFJ(f);
628         struct page *pg;
629
630         pg = read_cache_page_async(inode->i_mapping, offset >> PAGE_CACHE_SHIFT,
631                              (void *)jffs2_do_readpage_unlock, inode);
632         if (IS_ERR(pg))
633                 return (void *)pg;
634
635         *priv = (unsigned long)pg;
636         return kmap(pg);
637 }
638
639 void jffs2_gc_release_page(struct jffs2_sb_info *c,
640                            unsigned char *ptr,
641                            unsigned long *priv)
642 {
643         struct page *pg = (void *)*priv;
644
645         kunmap(pg);
646         page_cache_release(pg);
647 }
648
649 static int jffs2_flash_setup(struct jffs2_sb_info *c) {
650         int ret = 0;
651
652         if (jffs2_cleanmarker_oob(c)) {
653                 /* NAND flash... do setup accordingly */
654                 ret = jffs2_nand_flash_setup(c);
655                 if (ret)
656                         return ret;
657         }
658
659         /* and Dataflash */
660         if (jffs2_dataflash(c)) {
661                 ret = jffs2_dataflash_setup(c);
662                 if (ret)
663                         return ret;
664         }
665
666         /* and Intel "Sibley" flash */
667         if (jffs2_nor_wbuf_flash(c)) {
668                 ret = jffs2_nor_wbuf_flash_setup(c);
669                 if (ret)
670                         return ret;
671         }
672
673         /* and an UBI volume */
674         if (jffs2_ubivol(c)) {
675                 ret = jffs2_ubivol_setup(c);
676                 if (ret)
677                         return ret;
678         }
679
680         return ret;
681 }
682
683 void jffs2_flash_cleanup(struct jffs2_sb_info *c) {
684
685         if (jffs2_cleanmarker_oob(c)) {
686                 jffs2_nand_flash_cleanup(c);
687         }
688
689         /* and DataFlash */
690         if (jffs2_dataflash(c)) {
691                 jffs2_dataflash_cleanup(c);
692         }
693
694         /* and Intel "Sibley" flash */
695         if (jffs2_nor_wbuf_flash(c)) {
696                 jffs2_nor_wbuf_flash_cleanup(c);
697         }
698
699         /* and an UBI volume */
700         if (jffs2_ubivol(c)) {
701                 jffs2_ubivol_cleanup(c);
702         }
703 }