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