xref: /openbmc/linux/fs/jffs2/fs.c (revision 588b48ca)
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 = dentry->d_inode;
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 
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 
362 error_io:
363 	ret = -EIO;
364 error:
365 	mutex_unlock(&f->sem);
366 	jffs2_do_clear_inode(c, f);
367 	iget_failed(inode);
368 	return ERR_PTR(ret);
369 }
370 
371 void 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 
395 int 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. */
422 struct 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 
493 static 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 
513 int 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 
598 out_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 
614 void jffs2_gc_release_inode(struct jffs2_sb_info *c,
615 				   struct jffs2_inode_info *f)
616 {
617 	iput(OFNI_EDONI_2SFFJ(f));
618 }
619 
620 struct 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 
685 unsigned 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 
702 void 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 
712 static 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 
746 void 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