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