1/*
2 * JFFS2 -- Journalling Flash File System, Version 2.
3 *
4 * Copyright © 2001-2007 Red Hat, Inc.
5 * Copyright © 2004-2010 David Woodhouse <dwmw2@infradead.org>
6 *
7 * Created by David Woodhouse <dwmw2@infradead.org>
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
28static int jffs2_flash_setup(struct jffs2_sb_info *c);
29
30int 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,
84				  ALLOC_NORMAL, JFFS2_SUMMARY_INODE_SIZE);
85	if (ret) {
86		jffs2_free_raw_inode(ri);
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
94	ri->magic = cpu_to_je16(JFFS2_MAGIC_BITMASK);
95	ri->nodetype = cpu_to_je16(JFFS2_NODETYPE_INODE);
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)) {
142		jffs2_complete_reservation(c);
143		jffs2_free_raw_inode(ri);
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	}
173	jffs2_free_raw_inode(ri);
174
175	mutex_unlock(&f->sem);
176	jffs2_complete_reservation(c);
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
191int jffs2_setattr(struct dentry *dentry, struct iattr *iattr)
192{
193	struct inode *inode = d_inode(dentry);
194	int rc;
195
196	rc = inode_change_ok(inode, iattr);
197	if (rc)
198		return rc;
199
200	rc = jffs2_do_setattr(inode, iattr);
201	if (!rc && (iattr->ia_valid & ATTR_MODE))
202		rc = posix_acl_chmod(inode, inode->i_mode);
203
204	return rc;
205}
206
207int jffs2_statfs(struct dentry *dentry, struct kstatfs *buf)
208{
209	struct jffs2_sb_info *c = JFFS2_SB_INFO(dentry->d_sb);
210	unsigned long avail;
211
212	buf->f_type = JFFS2_SUPER_MAGIC;
213	buf->f_bsize = 1 << PAGE_SHIFT;
214	buf->f_blocks = c->flash_size >> PAGE_SHIFT;
215	buf->f_files = 0;
216	buf->f_ffree = 0;
217	buf->f_namelen = JFFS2_MAX_NAME_LEN;
218	buf->f_fsid.val[0] = JFFS2_SUPER_MAGIC;
219	buf->f_fsid.val[1] = c->mtd->index;
220
221	spin_lock(&c->erase_completion_lock);
222	avail = c->dirty_size + c->free_size;
223	if (avail > c->sector_size * c->resv_blocks_write)
224		avail -= c->sector_size * c->resv_blocks_write;
225	else
226		avail = 0;
227	spin_unlock(&c->erase_completion_lock);
228
229	buf->f_bavail = buf->f_bfree = avail >> PAGE_SHIFT;
230
231	return 0;
232}
233
234
235void jffs2_evict_inode (struct inode *inode)
236{
237	/* We can forget about this inode for now - drop all
238	 *  the nodelists associated with it, etc.
239	 */
240	struct jffs2_sb_info *c = JFFS2_SB_INFO(inode->i_sb);
241	struct jffs2_inode_info *f = JFFS2_INODE_INFO(inode);
242
243	jffs2_dbg(1, "%s(): ino #%lu mode %o\n",
244		  __func__, inode->i_ino, inode->i_mode);
245	truncate_inode_pages_final(&inode->i_data);
246	clear_inode(inode);
247	jffs2_do_clear_inode(c, f);
248}
249
250struct inode *jffs2_iget(struct super_block *sb, unsigned long ino)
251{
252	struct jffs2_inode_info *f;
253	struct jffs2_sb_info *c;
254	struct jffs2_raw_inode latest_node;
255	union jffs2_device_node jdev;
256	struct inode *inode;
257	dev_t rdev = 0;
258	int ret;
259
260	jffs2_dbg(1, "%s(): ino == %lu\n", __func__, ino);
261
262	inode = iget_locked(sb, ino);
263	if (!inode)
264		return ERR_PTR(-ENOMEM);
265	if (!(inode->i_state & I_NEW))
266		return inode;
267
268	f = JFFS2_INODE_INFO(inode);
269	c = JFFS2_SB_INFO(inode->i_sb);
270
271	jffs2_init_inode_info(f);
272	mutex_lock(&f->sem);
273
274	ret = jffs2_do_read_inode(c, f, inode->i_ino, &latest_node);
275
276	if (ret) {
277		mutex_unlock(&f->sem);
278		iget_failed(inode);
279		return ERR_PTR(ret);
280	}
281	inode->i_mode = jemode_to_cpu(latest_node.mode);
282	i_uid_write(inode, je16_to_cpu(latest_node.uid));
283	i_gid_write(inode, je16_to_cpu(latest_node.gid));
284	inode->i_size = je32_to_cpu(latest_node.isize);
285	inode->i_atime = ITIME(je32_to_cpu(latest_node.atime));
286	inode->i_mtime = ITIME(je32_to_cpu(latest_node.mtime));
287	inode->i_ctime = ITIME(je32_to_cpu(latest_node.ctime));
288
289	set_nlink(inode, f->inocache->pino_nlink);
290
291	inode->i_blocks = (inode->i_size + 511) >> 9;
292
293	switch (inode->i_mode & S_IFMT) {
294
295	case S_IFLNK:
296		inode->i_op = &jffs2_symlink_inode_operations;
297		break;
298
299	case S_IFDIR:
300	{
301		struct jffs2_full_dirent *fd;
302		set_nlink(inode, 2); /* parent and '.' */
303
304		for (fd=f->dents; fd; fd = fd->next) {
305			if (fd->type == DT_DIR && fd->ino)
306				inc_nlink(inode);
307		}
308		/* Root dir gets i_nlink 3 for some reason */
309		if (inode->i_ino == 1)
310			inc_nlink(inode);
311
312		inode->i_op = &jffs2_dir_inode_operations;
313		inode->i_fop = &jffs2_dir_operations;
314		break;
315	}
316	case S_IFREG:
317		inode->i_op = &jffs2_file_inode_operations;
318		inode->i_fop = &jffs2_file_operations;
319		inode->i_mapping->a_ops = &jffs2_file_address_operations;
320		inode->i_mapping->nrpages = 0;
321		break;
322
323	case S_IFBLK:
324	case S_IFCHR:
325		/* Read the device numbers from the media */
326		if (f->metadata->size != sizeof(jdev.old_id) &&
327		    f->metadata->size != sizeof(jdev.new_id)) {
328			pr_notice("Device node has strange size %d\n",
329				  f->metadata->size);
330			goto error_io;
331		}
332		jffs2_dbg(1, "Reading device numbers from flash\n");
333		ret = jffs2_read_dnode(c, f, f->metadata, (char *)&jdev, 0, f->metadata->size);
334		if (ret < 0) {
335			/* Eep */
336			pr_notice("Read device numbers for inode %lu failed\n",
337				  (unsigned long)inode->i_ino);
338			goto error;
339		}
340		if (f->metadata->size == sizeof(jdev.old_id))
341			rdev = old_decode_dev(je16_to_cpu(jdev.old_id));
342		else
343			rdev = new_decode_dev(je32_to_cpu(jdev.new_id));
344
345	case S_IFSOCK:
346	case S_IFIFO:
347		inode->i_op = &jffs2_file_inode_operations;
348		init_special_inode(inode, inode->i_mode, rdev);
349		break;
350
351	default:
352		pr_warn("%s(): Bogus i_mode %o for ino %lu\n",
353			__func__, inode->i_mode, (unsigned long)inode->i_ino);
354	}
355
356	mutex_unlock(&f->sem);
357
358	jffs2_dbg(1, "jffs2_read_inode() returning\n");
359	unlock_new_inode(inode);
360	return inode;
361
362error_io:
363	ret = -EIO;
364error:
365	mutex_unlock(&f->sem);
366	jffs2_do_clear_inode(c, f);
367	iget_failed(inode);
368	return ERR_PTR(ret);
369}
370
371void jffs2_dirty_inode(struct inode *inode, int flags)
372{
373	struct iattr iattr;
374
375	if (!(inode->i_state & I_DIRTY_DATASYNC)) {
376		jffs2_dbg(2, "%s(): not calling setattr() for ino #%lu\n",
377			  __func__, inode->i_ino);
378		return;
379	}
380
381	jffs2_dbg(1, "%s(): calling setattr() for ino #%lu\n",
382		  __func__, inode->i_ino);
383
384	iattr.ia_valid = ATTR_MODE|ATTR_UID|ATTR_GID|ATTR_ATIME|ATTR_MTIME|ATTR_CTIME;
385	iattr.ia_mode = inode->i_mode;
386	iattr.ia_uid = inode->i_uid;
387	iattr.ia_gid = inode->i_gid;
388	iattr.ia_atime = inode->i_atime;
389	iattr.ia_mtime = inode->i_mtime;
390	iattr.ia_ctime = inode->i_ctime;
391
392	jffs2_do_setattr(inode, &iattr);
393}
394
395int jffs2_do_remount_fs(struct super_block *sb, int *flags, char *data)
396{
397	struct jffs2_sb_info *c = JFFS2_SB_INFO(sb);
398
399	if (c->flags & JFFS2_SB_FLAG_RO && !(sb->s_flags & MS_RDONLY))
400		return -EROFS;
401
402	/* We stop if it was running, then restart if it needs to.
403	   This also catches the case where it was stopped and this
404	   is just a remount to restart it.
405	   Flush the writebuffer, if neccecary, else we loose it */
406	if (!(sb->s_flags & MS_RDONLY)) {
407		jffs2_stop_garbage_collect_thread(c);
408		mutex_lock(&c->alloc_sem);
409		jffs2_flush_wbuf_pad(c);
410		mutex_unlock(&c->alloc_sem);
411	}
412
413	if (!(*flags & MS_RDONLY))
414		jffs2_start_garbage_collect_thread(c);
415
416	*flags |= MS_NOATIME;
417	return 0;
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. */
422struct inode *jffs2_new_inode (struct inode *dir_i, umode_t 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	jffs2_dbg(1, "%s(): dir_i %ld, mode 0x%x\n",
431		  __func__, dir_i->i_ino, mode);
432
433	c = JFFS2_SB_INFO(sb);
434
435	inode = new_inode(sb);
436
437	if (!inode)
438		return ERR_PTR(-ENOMEM);
439
440	f = JFFS2_INODE_INFO(inode);
441	jffs2_init_inode_info(f);
442	mutex_lock(&f->sem);
443
444	memset(ri, 0, sizeof(*ri));
445	/* Set OS-specific defaults for new inodes */
446	ri->uid = cpu_to_je16(from_kuid(&init_user_ns, current_fsuid()));
447
448	if (dir_i->i_mode & S_ISGID) {
449		ri->gid = cpu_to_je16(i_gid_read(dir_i));
450		if (S_ISDIR(mode))
451			mode |= S_ISGID;
452	} else {
453		ri->gid = cpu_to_je16(from_kgid(&init_user_ns, current_fsgid()));
454	}
455
456	/* POSIX ACLs have to be processed now, at least partly.
457	   The umask is only applied if there's no default ACL */
458	ret = jffs2_init_acl_pre(dir_i, inode, &mode);
459	if (ret) {
460		mutex_unlock(&f->sem);
461		make_bad_inode(inode);
462		iput(inode);
463		return ERR_PTR(ret);
464	}
465	ret = jffs2_do_new_inode (c, f, mode, ri);
466	if (ret) {
467		mutex_unlock(&f->sem);
468		make_bad_inode(inode);
469		iput(inode);
470		return ERR_PTR(ret);
471	}
472	set_nlink(inode, 1);
473	inode->i_ino = je32_to_cpu(ri->ino);
474	inode->i_mode = jemode_to_cpu(ri->mode);
475	i_gid_write(inode, je16_to_cpu(ri->gid));
476	i_uid_write(inode, je16_to_cpu(ri->uid));
477	inode->i_atime = inode->i_ctime = inode->i_mtime = CURRENT_TIME_SEC;
478	ri->atime = ri->mtime = ri->ctime = cpu_to_je32(I_SEC(inode->i_mtime));
479
480	inode->i_blocks = 0;
481	inode->i_size = 0;
482
483	if (insert_inode_locked(inode) < 0) {
484		mutex_unlock(&f->sem);
485		make_bad_inode(inode);
486		iput(inode);
487		return ERR_PTR(-EINVAL);
488	}
489
490	return inode;
491}
492
493static int calculate_inocache_hashsize(uint32_t flash_size)
494{
495	/*
496	 * Pick a inocache hash size based on the size of the medium.
497	 * Count how many megabytes we're dealing with, apply a hashsize twice
498	 * that size, but rounding down to the usual big powers of 2. And keep
499	 * to sensible bounds.
500	 */
501
502	int size_mb = flash_size / 1024 / 1024;
503	int hashsize = (size_mb * 2) & ~0x3f;
504
505	if (hashsize < INOCACHE_HASHSIZE_MIN)
506		return INOCACHE_HASHSIZE_MIN;
507	if (hashsize > INOCACHE_HASHSIZE_MAX)
508		return INOCACHE_HASHSIZE_MAX;
509
510	return hashsize;
511}
512
513int jffs2_do_fill_super(struct super_block *sb, void *data, int silent)
514{
515	struct jffs2_sb_info *c;
516	struct inode *root_i;
517	int ret;
518	size_t blocks;
519
520	c = JFFS2_SB_INFO(sb);
521
522	/* Do not support the MLC nand */
523	if (c->mtd->type == MTD_MLCNANDFLASH)
524		return -EINVAL;
525
526#ifndef CONFIG_JFFS2_FS_WRITEBUFFER
527	if (c->mtd->type == MTD_NANDFLASH) {
528		pr_err("Cannot operate on NAND flash unless jffs2 NAND support is compiled in\n");
529		return -EINVAL;
530	}
531	if (c->mtd->type == MTD_DATAFLASH) {
532		pr_err("Cannot operate on DataFlash unless jffs2 DataFlash support is compiled in\n");
533		return -EINVAL;
534	}
535#endif
536
537	c->flash_size = c->mtd->size;
538	c->sector_size = c->mtd->erasesize;
539	blocks = c->flash_size / c->sector_size;
540
541	/*
542	 * Size alignment check
543	 */
544	if ((c->sector_size * blocks) != c->flash_size) {
545		c->flash_size = c->sector_size * blocks;
546		pr_info("Flash size not aligned to erasesize, reducing to %dKiB\n",
547			c->flash_size / 1024);
548	}
549
550	if (c->flash_size < 5*c->sector_size) {
551		pr_err("Too few erase blocks (%d)\n",
552		       c->flash_size / c->sector_size);
553		return -EINVAL;
554	}
555
556	c->cleanmarker_size = sizeof(struct jffs2_unknown_node);
557
558	/* NAND (or other bizarre) flash... do setup accordingly */
559	ret = jffs2_flash_setup(c);
560	if (ret)
561		return ret;
562
563	c->inocache_hashsize = calculate_inocache_hashsize(c->flash_size);
564	c->inocache_list = kcalloc(c->inocache_hashsize, sizeof(struct jffs2_inode_cache *), GFP_KERNEL);
565	if (!c->inocache_list) {
566		ret = -ENOMEM;
567		goto out_wbuf;
568	}
569
570	jffs2_init_xattr_subsystem(c);
571
572	if ((ret = jffs2_do_mount_fs(c)))
573		goto out_inohash;
574
575	jffs2_dbg(1, "%s(): Getting root inode\n", __func__);
576	root_i = jffs2_iget(sb, 1);
577	if (IS_ERR(root_i)) {
578		jffs2_dbg(1, "get root inode failed\n");
579		ret = PTR_ERR(root_i);
580		goto out_root;
581	}
582
583	ret = -ENOMEM;
584
585	jffs2_dbg(1, "%s(): d_make_root()\n", __func__);
586	sb->s_root = d_make_root(root_i);
587	if (!sb->s_root)
588		goto out_root;
589
590	sb->s_maxbytes = 0xFFFFFFFF;
591	sb->s_blocksize = PAGE_CACHE_SIZE;
592	sb->s_blocksize_bits = PAGE_CACHE_SHIFT;
593	sb->s_magic = JFFS2_SUPER_MAGIC;
594	if (!(sb->s_flags & MS_RDONLY))
595		jffs2_start_garbage_collect_thread(c);
596	return 0;
597
598out_root:
599	jffs2_free_ino_caches(c);
600	jffs2_free_raw_node_refs(c);
601	if (jffs2_blocks_use_vmalloc(c))
602		vfree(c->blocks);
603	else
604		kfree(c->blocks);
605 out_inohash:
606	jffs2_clear_xattr_subsystem(c);
607	kfree(c->inocache_list);
608 out_wbuf:
609	jffs2_flash_cleanup(c);
610
611	return ret;
612}
613
614void jffs2_gc_release_inode(struct jffs2_sb_info *c,
615				   struct jffs2_inode_info *f)
616{
617	iput(OFNI_EDONI_2SFFJ(f));
618}
619
620struct jffs2_inode_info *jffs2_gc_fetch_inode(struct jffs2_sb_info *c,
621					      int inum, int unlinked)
622{
623	struct inode *inode;
624	struct jffs2_inode_cache *ic;
625
626	if (unlinked) {
627		/* The inode has zero nlink but its nodes weren't yet marked
628		   obsolete. This has to be because we're still waiting for
629		   the final (close() and) iput() to happen.
630
631		   There's a possibility that the final iput() could have
632		   happened while we were contemplating. In order to ensure
633		   that we don't cause a new read_inode() (which would fail)
634		   for the inode in question, we use ilookup() in this case
635		   instead of iget().
636
637		   The nlink can't _become_ zero at this point because we're
638		   holding the alloc_sem, and jffs2_do_unlink() would also
639		   need that while decrementing nlink on any inode.
640		*/
641		inode = ilookup(OFNI_BS_2SFFJ(c), inum);
642		if (!inode) {
643			jffs2_dbg(1, "ilookup() failed for ino #%u; inode is probably deleted.\n",
644				  inum);
645
646			spin_lock(&c->inocache_lock);
647			ic = jffs2_get_ino_cache(c, inum);
648			if (!ic) {
649				jffs2_dbg(1, "Inode cache for ino #%u is gone\n",
650					  inum);
651				spin_unlock(&c->inocache_lock);
652				return NULL;
653			}
654			if (ic->state != INO_STATE_CHECKEDABSENT) {
655				/* Wait for progress. Don't just loop */
656				jffs2_dbg(1, "Waiting for ino #%u in state %d\n",
657					  ic->ino, ic->state);
658				sleep_on_spinunlock(&c->inocache_wq, &c->inocache_lock);
659			} else {
660				spin_unlock(&c->inocache_lock);
661			}
662
663			return NULL;
664		}
665	} else {
666		/* Inode has links to it still; they're not going away because
667		   jffs2_do_unlink() would need the alloc_sem and we have it.
668		   Just iget() it, and if read_inode() is necessary that's OK.
669		*/
670		inode = jffs2_iget(OFNI_BS_2SFFJ(c), inum);
671		if (IS_ERR(inode))
672			return ERR_CAST(inode);
673	}
674	if (is_bad_inode(inode)) {
675		pr_notice("Eep. read_inode() failed for ino #%u. unlinked %d\n",
676			  inum, unlinked);
677		/* NB. This will happen again. We need to do something appropriate here. */
678		iput(inode);
679		return ERR_PTR(-EIO);
680	}
681
682	return JFFS2_INODE_INFO(inode);
683}
684
685unsigned char *jffs2_gc_fetch_page(struct jffs2_sb_info *c,
686				   struct jffs2_inode_info *f,
687				   unsigned long offset,
688				   unsigned long *priv)
689{
690	struct inode *inode = OFNI_EDONI_2SFFJ(f);
691	struct page *pg;
692
693	pg = read_cache_page(inode->i_mapping, offset >> PAGE_CACHE_SHIFT,
694			     (void *)jffs2_do_readpage_unlock, inode);
695	if (IS_ERR(pg))
696		return (void *)pg;
697
698	*priv = (unsigned long)pg;
699	return kmap(pg);
700}
701
702void jffs2_gc_release_page(struct jffs2_sb_info *c,
703			   unsigned char *ptr,
704			   unsigned long *priv)
705{
706	struct page *pg = (void *)*priv;
707
708	kunmap(pg);
709	page_cache_release(pg);
710}
711
712static int jffs2_flash_setup(struct jffs2_sb_info *c) {
713	int ret = 0;
714
715	if (jffs2_cleanmarker_oob(c)) {
716		/* NAND flash... do setup accordingly */
717		ret = jffs2_nand_flash_setup(c);
718		if (ret)
719			return ret;
720	}
721
722	/* and Dataflash */
723	if (jffs2_dataflash(c)) {
724		ret = jffs2_dataflash_setup(c);
725		if (ret)
726			return ret;
727	}
728
729	/* and Intel "Sibley" flash */
730	if (jffs2_nor_wbuf_flash(c)) {
731		ret = jffs2_nor_wbuf_flash_setup(c);
732		if (ret)
733			return ret;
734	}
735
736	/* and an UBI volume */
737	if (jffs2_ubivol(c)) {
738		ret = jffs2_ubivol_setup(c);
739		if (ret)
740			return ret;
741	}
742
743	return ret;
744}
745
746void jffs2_flash_cleanup(struct jffs2_sb_info *c) {
747
748	if (jffs2_cleanmarker_oob(c)) {
749		jffs2_nand_flash_cleanup(c);
750	}
751
752	/* and DataFlash */
753	if (jffs2_dataflash(c)) {
754		jffs2_dataflash_cleanup(c);
755	}
756
757	/* and Intel "Sibley" flash */
758	if (jffs2_nor_wbuf_flash(c)) {
759		jffs2_nor_wbuf_flash_cleanup(c);
760	}
761
762	/* and an UBI volume */
763	if (jffs2_ubivol(c)) {
764		jffs2_ubivol_cleanup(c);
765	}
766}
767