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