Linux Kernel  3.7.1
 All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Macros Groups Pages
fs.c
Go to the documentation of this file.
1 /*
2  * JFFS2 -- Journalling Flash File System, Version 2.
3  *
4  * Copyright © 2001-2007 Red Hat, Inc.
5  * Copyright © 2004-2010 David Woodhouse <[email protected]>
6  *
7  * Created by David Woodhouse <[email protected]>
8  *
9  * For licensing information, see the file 'LICENCE' in this directory.
10  *
11  */
12 
13 #define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
14 
15 #include <linux/capability.h>
16 #include <linux/kernel.h>
17 #include <linux/sched.h>
18 #include <linux/fs.h>
19 #include <linux/list.h>
20 #include <linux/mtd/mtd.h>
21 #include <linux/pagemap.h>
22 #include <linux/slab.h>
23 #include <linux/vmalloc.h>
24 #include <linux/vfs.h>
25 #include <linux/crc32.h>
26 #include "nodelist.h"
27 
28 static int jffs2_flash_setup(struct jffs2_sb_info *c);
29 
30 int jffs2_do_setattr (struct inode *inode, struct iattr *iattr)
31 {
32  struct jffs2_full_dnode *old_metadata, *new_metadata;
33  struct jffs2_inode_info *f = JFFS2_INODE_INFO(inode);
34  struct jffs2_sb_info *c = JFFS2_SB_INFO(inode->i_sb);
35  struct jffs2_raw_inode *ri;
36  union jffs2_device_node dev;
37  unsigned char *mdata = NULL;
38  int mdatalen = 0;
39  unsigned int ivalid;
40  uint32_t alloclen;
41  int ret;
42  int alloc_type = ALLOC_NORMAL;
43 
44  jffs2_dbg(1, "%s(): ino #%lu\n", __func__, inode->i_ino);
45 
46  /* Special cases - we don't want more than one data node
47  for these types on the medium at any time. So setattr
48  must read the original data associated with the node
49  (i.e. the device numbers or the target name) and write
50  it out again with the appropriate data attached */
51  if (S_ISBLK(inode->i_mode) || S_ISCHR(inode->i_mode)) {
52  /* For these, we don't actually need to read the old node */
53  mdatalen = jffs2_encode_dev(&dev, inode->i_rdev);
54  mdata = (char *)&dev;
55  jffs2_dbg(1, "%s(): Writing %d bytes of kdev_t\n",
56  __func__, mdatalen);
57  } else if (S_ISLNK(inode->i_mode)) {
58  mutex_lock(&f->sem);
59  mdatalen = f->metadata->size;
60  mdata = kmalloc(f->metadata->size, GFP_USER);
61  if (!mdata) {
62  mutex_unlock(&f->sem);
63  return -ENOMEM;
64  }
65  ret = jffs2_read_dnode(c, f, f->metadata, mdata, 0, mdatalen);
66  if (ret) {
67  mutex_unlock(&f->sem);
68  kfree(mdata);
69  return ret;
70  }
71  mutex_unlock(&f->sem);
72  jffs2_dbg(1, "%s(): Writing %d bytes of symlink target\n",
73  __func__, mdatalen);
74  }
75 
76  ri = jffs2_alloc_raw_inode();
77  if (!ri) {
78  if (S_ISLNK(inode->i_mode))
79  kfree(mdata);
80  return -ENOMEM;
81  }
82 
83  ret = jffs2_reserve_space(c, sizeof(*ri) + mdatalen, &alloclen,
85  if (ret) {
87  if (S_ISLNK(inode->i_mode))
88  kfree(mdata);
89  return ret;
90  }
91  mutex_lock(&f->sem);
92  ivalid = iattr->ia_valid;
93 
96  ri->totlen = cpu_to_je32(sizeof(*ri) + mdatalen);
97  ri->hdr_crc = cpu_to_je32(crc32(0, ri, sizeof(struct jffs2_unknown_node)-4));
98 
99  ri->ino = cpu_to_je32(inode->i_ino);
100  ri->version = cpu_to_je32(++f->highest_version);
101 
102  ri->uid = cpu_to_je16((ivalid & ATTR_UID)?
103  from_kuid(&init_user_ns, iattr->ia_uid):i_uid_read(inode));
104  ri->gid = cpu_to_je16((ivalid & ATTR_GID)?
105  from_kgid(&init_user_ns, iattr->ia_gid):i_gid_read(inode));
106 
107  if (ivalid & ATTR_MODE)
108  ri->mode = cpu_to_jemode(iattr->ia_mode);
109  else
110  ri->mode = cpu_to_jemode(inode->i_mode);
111 
112 
113  ri->isize = cpu_to_je32((ivalid & ATTR_SIZE)?iattr->ia_size:inode->i_size);
114  ri->atime = cpu_to_je32(I_SEC((ivalid & ATTR_ATIME)?iattr->ia_atime:inode->i_atime));
115  ri->mtime = cpu_to_je32(I_SEC((ivalid & ATTR_MTIME)?iattr->ia_mtime:inode->i_mtime));
116  ri->ctime = cpu_to_je32(I_SEC((ivalid & ATTR_CTIME)?iattr->ia_ctime:inode->i_ctime));
117 
118  ri->offset = cpu_to_je32(0);
119  ri->csize = ri->dsize = cpu_to_je32(mdatalen);
120  ri->compr = JFFS2_COMPR_NONE;
121  if (ivalid & ATTR_SIZE && inode->i_size < iattr->ia_size) {
122  /* It's an extension. Make it a hole node */
123  ri->compr = JFFS2_COMPR_ZERO;
124  ri->dsize = cpu_to_je32(iattr->ia_size - inode->i_size);
125  ri->offset = cpu_to_je32(inode->i_size);
126  } else if (ivalid & ATTR_SIZE && !iattr->ia_size) {
127  /* For truncate-to-zero, treat it as deletion because
128  it'll always be obsoleting all previous nodes */
129  alloc_type = ALLOC_DELETION;
130  }
131  ri->node_crc = cpu_to_je32(crc32(0, ri, sizeof(*ri)-8));
132  if (mdatalen)
133  ri->data_crc = cpu_to_je32(crc32(0, mdata, mdatalen));
134  else
135  ri->data_crc = cpu_to_je32(0);
136 
137  new_metadata = jffs2_write_dnode(c, f, ri, mdata, mdatalen, alloc_type);
138  if (S_ISLNK(inode->i_mode))
139  kfree(mdata);
140 
141  if (IS_ERR(new_metadata)) {
144  mutex_unlock(&f->sem);
145  return PTR_ERR(new_metadata);
146  }
147  /* It worked. Update the inode */
148  inode->i_atime = ITIME(je32_to_cpu(ri->atime));
149  inode->i_ctime = ITIME(je32_to_cpu(ri->ctime));
150  inode->i_mtime = ITIME(je32_to_cpu(ri->mtime));
151  inode->i_mode = jemode_to_cpu(ri->mode);
152  i_uid_write(inode, je16_to_cpu(ri->uid));
153  i_gid_write(inode, je16_to_cpu(ri->gid));
154 
155 
156  old_metadata = f->metadata;
157 
158  if (ivalid & ATTR_SIZE && inode->i_size > iattr->ia_size)
159  jffs2_truncate_fragtree (c, &f->fragtree, iattr->ia_size);
160 
161  if (ivalid & ATTR_SIZE && inode->i_size < iattr->ia_size) {
162  jffs2_add_full_dnode_to_inode(c, f, new_metadata);
163  inode->i_size = iattr->ia_size;
164  inode->i_blocks = (inode->i_size + 511) >> 9;
165  f->metadata = NULL;
166  } else {
167  f->metadata = new_metadata;
168  }
169  if (old_metadata) {
170  jffs2_mark_node_obsolete(c, old_metadata->raw);
171  jffs2_free_full_dnode(old_metadata);
172  }
174 
175  mutex_unlock(&f->sem);
177 
178  /* We have to do the truncate_setsize() without f->sem held, since
179  some pages may be locked and waiting for it in readpage().
180  We are protected from a simultaneous write() extending i_size
181  back past iattr->ia_size, because do_truncate() holds the
182  generic inode semaphore. */
183  if (ivalid & ATTR_SIZE && inode->i_size > iattr->ia_size) {
184  truncate_setsize(inode, iattr->ia_size);
185  inode->i_blocks = (inode->i_size + 511) >> 9;
186  }
187 
188  return 0;
189 }
190 
191 int jffs2_setattr(struct dentry *dentry, struct iattr *iattr)
192 {
193  int rc;
194 
195  rc = inode_change_ok(dentry->d_inode, iattr);
196  if (rc)
197  return rc;
198 
199  rc = jffs2_do_setattr(dentry->d_inode, iattr);
200  if (!rc && (iattr->ia_valid & ATTR_MODE))
201  rc = jffs2_acl_chmod(dentry->d_inode);
202 
203  return rc;
204 }
205 
206 int jffs2_statfs(struct dentry *dentry, struct kstatfs *buf)
207 {
208  struct jffs2_sb_info *c = JFFS2_SB_INFO(dentry->d_sb);
209  unsigned long avail;
210 
211  buf->f_type = JFFS2_SUPER_MAGIC;
212  buf->f_bsize = 1 << PAGE_SHIFT;
213  buf->f_blocks = c->flash_size >> PAGE_SHIFT;
214  buf->f_files = 0;
215  buf->f_ffree = 0;
217  buf->f_fsid.val[0] = JFFS2_SUPER_MAGIC;
218  buf->f_fsid.val[1] = c->mtd->index;
219 
220  spin_lock(&c->erase_completion_lock);
221  avail = c->dirty_size + c->free_size;
222  if (avail > c->sector_size * c->resv_blocks_write)
223  avail -= c->sector_size * c->resv_blocks_write;
224  else
225  avail = 0;
226  spin_unlock(&c->erase_completion_lock);
227 
228  buf->f_bavail = buf->f_bfree = avail >> PAGE_SHIFT;
229 
230  return 0;
231 }
232 
233 
235 {
236  /* We can forget about this inode for now - drop all
237  * the nodelists associated with it, etc.
238  */
239  struct jffs2_sb_info *c = JFFS2_SB_INFO(inode->i_sb);
240  struct jffs2_inode_info *f = JFFS2_INODE_INFO(inode);
241 
242  jffs2_dbg(1, "%s(): ino #%lu mode %o\n",
243  __func__, inode->i_ino, inode->i_mode);
244  truncate_inode_pages(&inode->i_data, 0);
245  clear_inode(inode);
246  jffs2_do_clear_inode(c, f);
247 }
248 
249 struct inode *jffs2_iget(struct super_block *sb, unsigned long ino)
250 {
251  struct jffs2_inode_info *f;
252  struct jffs2_sb_info *c;
253  struct jffs2_raw_inode latest_node;
254  union jffs2_device_node jdev;
255  struct inode *inode;
256  dev_t rdev = 0;
257  int ret;
258 
259  jffs2_dbg(1, "%s(): ino == %lu\n", __func__, ino);
260 
261  inode = iget_locked(sb, ino);
262  if (!inode)
263  return ERR_PTR(-ENOMEM);
264  if (!(inode->i_state & I_NEW))
265  return inode;
266 
267  f = JFFS2_INODE_INFO(inode);
268  c = JFFS2_SB_INFO(inode->i_sb);
269 
270  jffs2_init_inode_info(f);
271  mutex_lock(&f->sem);
272 
273  ret = jffs2_do_read_inode(c, f, inode->i_ino, &latest_node);
274 
275  if (ret) {
276  mutex_unlock(&f->sem);
277  iget_failed(inode);
278  return ERR_PTR(ret);
279  }
280  inode->i_mode = jemode_to_cpu(latest_node.mode);
281  i_uid_write(inode, je16_to_cpu(latest_node.uid));
282  i_gid_write(inode, je16_to_cpu(latest_node.gid));
283  inode->i_size = je32_to_cpu(latest_node.isize);
284  inode->i_atime = ITIME(je32_to_cpu(latest_node.atime));
285  inode->i_mtime = ITIME(je32_to_cpu(latest_node.mtime));
286  inode->i_ctime = ITIME(je32_to_cpu(latest_node.ctime));
287 
288  set_nlink(inode, f->inocache->pino_nlink);
289 
290  inode->i_blocks = (inode->i_size + 511) >> 9;
291 
292  switch (inode->i_mode & S_IFMT) {
293 
294  case S_IFLNK:
296  break;
297 
298  case S_IFDIR:
299  {
300  struct jffs2_full_dirent *fd;
301  set_nlink(inode, 2); /* parent and '.' */
302 
303  for (fd=f->dents; fd; fd = fd->next) {
304  if (fd->type == DT_DIR && fd->ino)
305  inc_nlink(inode);
306  }
307  /* Root dir gets i_nlink 3 for some reason */
308  if (inode->i_ino == 1)
309  inc_nlink(inode);
310 
312  inode->i_fop = &jffs2_dir_operations;
313  break;
314  }
315  case S_IFREG:
317  inode->i_fop = &jffs2_file_operations;
318  inode->i_mapping->a_ops = &jffs2_file_address_operations;
319  inode->i_mapping->nrpages = 0;
320  break;
321 
322  case S_IFBLK:
323  case S_IFCHR:
324  /* Read the device numbers from the media */
325  if (f->metadata->size != sizeof(jdev.old_id) &&
326  f->metadata->size != sizeof(jdev.new_id)) {
327  pr_notice("Device node has strange size %d\n",
328  f->metadata->size);
329  goto error_io;
330  }
331  jffs2_dbg(1, "Reading device numbers from flash\n");
332  ret = jffs2_read_dnode(c, f, f->metadata, (char *)&jdev, 0, f->metadata->size);
333  if (ret < 0) {
334  /* Eep */
335  pr_notice("Read device numbers for inode %lu failed\n",
336  (unsigned long)inode->i_ino);
337  goto error;
338  }
339  if (f->metadata->size == sizeof(jdev.old_id))
340  rdev = old_decode_dev(je16_to_cpu(jdev.old_id));
341  else
342  rdev = new_decode_dev(je32_to_cpu(jdev.new_id));
343 
344  case S_IFSOCK:
345  case S_IFIFO:
347  init_special_inode(inode, inode->i_mode, rdev);
348  break;
349 
350  default:
351  pr_warn("%s(): Bogus i_mode %o for ino %lu\n",
352  __func__, inode->i_mode, (unsigned long)inode->i_ino);
353  }
354 
355  mutex_unlock(&f->sem);
356 
357  jffs2_dbg(1, "jffs2_read_inode() returning\n");
358  unlock_new_inode(inode);
359  return inode;
360 
361 error_io:
362  ret = -EIO;
363 error:
364  mutex_unlock(&f->sem);
365  jffs2_do_clear_inode(c, f);
366  iget_failed(inode);
367  return ERR_PTR(ret);
368 }
369 
370 void jffs2_dirty_inode(struct inode *inode, int flags)
371 {
372  struct iattr iattr;
373 
374  if (!(inode->i_state & I_DIRTY_DATASYNC)) {
375  jffs2_dbg(2, "%s(): not calling setattr() for ino #%lu\n",
376  __func__, inode->i_ino);
377  return;
378  }
379 
380  jffs2_dbg(1, "%s(): calling setattr() for ino #%lu\n",
381  __func__, inode->i_ino);
382 
384  iattr.ia_mode = inode->i_mode;
385  iattr.ia_uid = inode->i_uid;
386  iattr.ia_gid = inode->i_gid;
387  iattr.ia_atime = inode->i_atime;
388  iattr.ia_mtime = inode->i_mtime;
389  iattr.ia_ctime = inode->i_ctime;
390 
391  jffs2_do_setattr(inode, &iattr);
392 }
393 
394 int jffs2_do_remount_fs(struct super_block *sb, int *flags, char *data)
395 {
396  struct jffs2_sb_info *c = JFFS2_SB_INFO(sb);
397 
398  if (c->flags & JFFS2_SB_FLAG_RO && !(sb->s_flags & MS_RDONLY))
399  return -EROFS;
400 
401  /* We stop if it was running, then restart if it needs to.
402  This also catches the case where it was stopped and this
403  is just a remount to restart it.
404  Flush the writebuffer, if neccecary, else we loose it */
405  if (!(sb->s_flags & MS_RDONLY)) {
407  mutex_lock(&c->alloc_sem);
409  mutex_unlock(&c->alloc_sem);
410  }
411 
412  if (!(*flags & MS_RDONLY))
414 
415  *flags |= MS_NOATIME;
416  return 0;
417 }
418 
419 /* jffs2_new_inode: allocate a new inode and inocache, add it to the hash,
420  fill in the raw_inode while you're at it. */
421 struct inode *jffs2_new_inode (struct inode *dir_i, umode_t mode, struct jffs2_raw_inode *ri)
422 {
423  struct inode *inode;
424  struct super_block *sb = dir_i->i_sb;
425  struct jffs2_sb_info *c;
426  struct jffs2_inode_info *f;
427  int ret;
428 
429  jffs2_dbg(1, "%s(): dir_i %ld, mode 0x%x\n",
430  __func__, 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 */
446 
447  if (dir_i->i_mode & S_ISGID) {
448  ri->gid = cpu_to_je16(i_gid_read(dir_i));
449  if (S_ISDIR(mode))
450  mode |= S_ISGID;
451  } else {
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  set_nlink(inode, 1);
470  inode->i_ino = je32_to_cpu(ri->ino);
471  inode->i_mode = jemode_to_cpu(ri->mode);
472  i_gid_write(inode, je16_to_cpu(ri->gid));
473  i_uid_write(inode, 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  if (insert_inode_locked(inode) < 0) {
481  make_bad_inode(inode);
482  iput(inode);
483  return ERR_PTR(-EINVAL);
484  }
485 
486  return inode;
487 }
488 
489 static int calculate_inocache_hashsize(uint32_t flash_size)
490 {
491  /*
492  * Pick a inocache hash size based on the size of the medium.
493  * Count how many megabytes we're dealing with, apply a hashsize twice
494  * that size, but rounding down to the usual big powers of 2. And keep
495  * to sensible bounds.
496  */
497 
498  int size_mb = flash_size / 1024 / 1024;
499  int hashsize = (size_mb * 2) & ~0x3f;
500 
501  if (hashsize < INOCACHE_HASHSIZE_MIN)
502  return INOCACHE_HASHSIZE_MIN;
503  if (hashsize > INOCACHE_HASHSIZE_MAX)
504  return INOCACHE_HASHSIZE_MAX;
505 
506  return hashsize;
507 }
508 
509 int jffs2_do_fill_super(struct super_block *sb, void *data, int silent)
510 {
511  struct jffs2_sb_info *c;
512  struct inode *root_i;
513  int ret;
514  size_t blocks;
515 
516  c = JFFS2_SB_INFO(sb);
517 
518 #ifndef CONFIG_JFFS2_FS_WRITEBUFFER
519  if (c->mtd->type == MTD_NANDFLASH) {
520  pr_err("Cannot operate on NAND flash unless jffs2 NAND support is compiled in\n");
521  return -EINVAL;
522  }
523  if (c->mtd->type == MTD_DATAFLASH) {
524  pr_err("Cannot operate on DataFlash unless jffs2 DataFlash support is compiled in\n");
525  return -EINVAL;
526  }
527 #endif
528 
529  c->flash_size = c->mtd->size;
530  c->sector_size = c->mtd->erasesize;
531  blocks = c->flash_size / c->sector_size;
532 
533  /*
534  * Size alignment check
535  */
536  if ((c->sector_size * blocks) != c->flash_size) {
537  c->flash_size = c->sector_size * blocks;
538  pr_info("Flash size not aligned to erasesize, reducing to %dKiB\n",
539  c->flash_size / 1024);
540  }
541 
542  if (c->flash_size < 5*c->sector_size) {
543  pr_err("Too few erase blocks (%d)\n",
544  c->flash_size / c->sector_size);
545  return -EINVAL;
546  }
547 
548  c->cleanmarker_size = sizeof(struct jffs2_unknown_node);
549 
550  /* NAND (or other bizarre) flash... do setup accordingly */
551  ret = jffs2_flash_setup(c);
552  if (ret)
553  return ret;
554 
555  c->inocache_hashsize = calculate_inocache_hashsize(c->flash_size);
556  c->inocache_list = kcalloc(c->inocache_hashsize, sizeof(struct jffs2_inode_cache *), GFP_KERNEL);
557  if (!c->inocache_list) {
558  ret = -ENOMEM;
559  goto out_wbuf;
560  }
561 
563 
564  if ((ret = jffs2_do_mount_fs(c)))
565  goto out_inohash;
566 
567  jffs2_dbg(1, "%s(): Getting root inode\n", __func__);
568  root_i = jffs2_iget(sb, 1);
569  if (IS_ERR(root_i)) {
570  jffs2_dbg(1, "get root inode failed\n");
571  ret = PTR_ERR(root_i);
572  goto out_root;
573  }
574 
575  ret = -ENOMEM;
576 
577  jffs2_dbg(1, "%s(): d_make_root()\n", __func__);
578  sb->s_root = d_make_root(root_i);
579  if (!sb->s_root)
580  goto out_root;
581 
582  sb->s_maxbytes = 0xFFFFFFFF;
586  if (!(sb->s_flags & MS_RDONLY))
588  return 0;
589 
590 out_root:
593  if (jffs2_blocks_use_vmalloc(c))
594  vfree(c->blocks);
595  else
596  kfree(c->blocks);
597  out_inohash:
599  kfree(c->inocache_list);
600  out_wbuf:
602 
603  return ret;
604 }
605 
607  struct jffs2_inode_info *f)
608 {
610 }
611 
613  int inum, int unlinked)
614 {
615  struct inode *inode;
616  struct jffs2_inode_cache *ic;
617 
618  if (unlinked) {
619  /* The inode has zero nlink but its nodes weren't yet marked
620  obsolete. This has to be because we're still waiting for
621  the final (close() and) iput() to happen.
622 
623  There's a possibility that the final iput() could have
624  happened while we were contemplating. In order to ensure
625  that we don't cause a new read_inode() (which would fail)
626  for the inode in question, we use ilookup() in this case
627  instead of iget().
628 
629  The nlink can't _become_ zero at this point because we're
630  holding the alloc_sem, and jffs2_do_unlink() would also
631  need that while decrementing nlink on any inode.
632  */
633  inode = ilookup(OFNI_BS_2SFFJ(c), inum);
634  if (!inode) {
635  jffs2_dbg(1, "ilookup() failed for ino #%u; inode is probably deleted.\n",
636  inum);
637 
638  spin_lock(&c->inocache_lock);
639  ic = jffs2_get_ino_cache(c, inum);
640  if (!ic) {
641  jffs2_dbg(1, "Inode cache for ino #%u is gone\n",
642  inum);
643  spin_unlock(&c->inocache_lock);
644  return NULL;
645  }
646  if (ic->state != INO_STATE_CHECKEDABSENT) {
647  /* Wait for progress. Don't just loop */
648  jffs2_dbg(1, "Waiting for ino #%u in state %d\n",
649  ic->ino, ic->state);
651  } else {
652  spin_unlock(&c->inocache_lock);
653  }
654 
655  return NULL;
656  }
657  } else {
658  /* Inode has links to it still; they're not going away because
659  jffs2_do_unlink() would need the alloc_sem and we have it.
660  Just iget() it, and if read_inode() is necessary that's OK.
661  */
662  inode = jffs2_iget(OFNI_BS_2SFFJ(c), inum);
663  if (IS_ERR(inode))
664  return ERR_CAST(inode);
665  }
666  if (is_bad_inode(inode)) {
667  pr_notice("Eep. read_inode() failed for ino #%u. unlinked %d\n",
668  inum, unlinked);
669  /* NB. This will happen again. We need to do something appropriate here. */
670  iput(inode);
671  return ERR_PTR(-EIO);
672  }
673 
674  return JFFS2_INODE_INFO(inode);
675 }
676 
677 unsigned char *jffs2_gc_fetch_page(struct jffs2_sb_info *c,
678  struct jffs2_inode_info *f,
679  unsigned long offset,
680  unsigned long *priv)
681 {
682  struct inode *inode = OFNI_EDONI_2SFFJ(f);
683  struct page *pg;
684 
685  pg = read_cache_page_async(inode->i_mapping, offset >> PAGE_CACHE_SHIFT,
686  (void *)jffs2_do_readpage_unlock, inode);
687  if (IS_ERR(pg))
688  return (void *)pg;
689 
690  *priv = (unsigned long)pg;
691  return kmap(pg);
692 }
693 
695  unsigned char *ptr,
696  unsigned long *priv)
697 {
698  struct page *pg = (void *)*priv;
699 
700  kunmap(pg);
701  page_cache_release(pg);
702 }
703 
704 static int jffs2_flash_setup(struct jffs2_sb_info *c) {
705  int ret = 0;
706 
707  if (jffs2_cleanmarker_oob(c)) {
708  /* NAND flash... do setup accordingly */
709  ret = jffs2_nand_flash_setup(c);
710  if (ret)
711  return ret;
712  }
713 
714  /* and Dataflash */
715  if (jffs2_dataflash(c)) {
716  ret = jffs2_dataflash_setup(c);
717  if (ret)
718  return ret;
719  }
720 
721  /* and Intel "Sibley" flash */
722  if (jffs2_nor_wbuf_flash(c)) {
724  if (ret)
725  return ret;
726  }
727 
728  /* and an UBI volume */
729  if (jffs2_ubivol(c)) {
730  ret = jffs2_ubivol_setup(c);
731  if (ret)
732  return ret;
733  }
734 
735  return ret;
736 }
737 
739 
740  if (jffs2_cleanmarker_oob(c)) {
742  }
743 
744  /* and DataFlash */
745  if (jffs2_dataflash(c)) {
747  }
748 
749  /* and Intel "Sibley" flash */
750  if (jffs2_nor_wbuf_flash(c)) {
752  }
753 
754  /* and an UBI volume */
755  if (jffs2_ubivol(c)) {
757  }
758 }