xref: /openbmc/linux/fs/jffs2/dir.c (revision bc5aa3a0)
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/kernel.h>
16 #include <linux/slab.h>
17 #include <linux/fs.h>
18 #include <linux/crc32.h>
19 #include <linux/jffs2.h>
20 #include "jffs2_fs_i.h"
21 #include "jffs2_fs_sb.h"
22 #include <linux/time.h>
23 #include "nodelist.h"
24 
25 static int jffs2_readdir (struct file *, struct dir_context *);
26 
27 static int jffs2_create (struct inode *,struct dentry *,umode_t,
28 			 bool);
29 static struct dentry *jffs2_lookup (struct inode *,struct dentry *,
30 				    unsigned int);
31 static int jffs2_link (struct dentry *,struct inode *,struct dentry *);
32 static int jffs2_unlink (struct inode *,struct dentry *);
33 static int jffs2_symlink (struct inode *,struct dentry *,const char *);
34 static int jffs2_mkdir (struct inode *,struct dentry *,umode_t);
35 static int jffs2_rmdir (struct inode *,struct dentry *);
36 static int jffs2_mknod (struct inode *,struct dentry *,umode_t,dev_t);
37 static int jffs2_rename (struct inode *, struct dentry *,
38 			 struct inode *, struct dentry *);
39 
40 const struct file_operations jffs2_dir_operations =
41 {
42 	.read =		generic_read_dir,
43 	.iterate_shared=jffs2_readdir,
44 	.unlocked_ioctl=jffs2_ioctl,
45 	.fsync =	jffs2_fsync,
46 	.llseek =	generic_file_llseek,
47 };
48 
49 
50 const struct inode_operations jffs2_dir_inode_operations =
51 {
52 	.create =	jffs2_create,
53 	.lookup =	jffs2_lookup,
54 	.link =		jffs2_link,
55 	.unlink =	jffs2_unlink,
56 	.symlink =	jffs2_symlink,
57 	.mkdir =	jffs2_mkdir,
58 	.rmdir =	jffs2_rmdir,
59 	.mknod =	jffs2_mknod,
60 	.rename =	jffs2_rename,
61 	.get_acl =	jffs2_get_acl,
62 	.set_acl =	jffs2_set_acl,
63 	.setattr =	jffs2_setattr,
64 	.setxattr =	jffs2_setxattr,
65 	.getxattr =	jffs2_getxattr,
66 	.listxattr =	jffs2_listxattr,
67 	.removexattr =	jffs2_removexattr
68 };
69 
70 /***********************************************************************/
71 
72 
73 /* We keep the dirent list sorted in increasing order of name hash,
74    and we use the same hash function as the dentries. Makes this
75    nice and simple
76 */
77 static struct dentry *jffs2_lookup(struct inode *dir_i, struct dentry *target,
78 				   unsigned int flags)
79 {
80 	struct jffs2_inode_info *dir_f;
81 	struct jffs2_full_dirent *fd = NULL, *fd_list;
82 	uint32_t ino = 0;
83 	struct inode *inode = NULL;
84 	unsigned int nhash;
85 
86 	jffs2_dbg(1, "jffs2_lookup()\n");
87 
88 	if (target->d_name.len > JFFS2_MAX_NAME_LEN)
89 		return ERR_PTR(-ENAMETOOLONG);
90 
91 	dir_f = JFFS2_INODE_INFO(dir_i);
92 
93 	/* The 'nhash' on the fd_list is not the same as the dentry hash */
94 	nhash = full_name_hash(NULL, target->d_name.name, target->d_name.len);
95 
96 	mutex_lock(&dir_f->sem);
97 
98 	/* NB: The 2.2 backport will need to explicitly check for '.' and '..' here */
99 	for (fd_list = dir_f->dents; fd_list && fd_list->nhash <= nhash; fd_list = fd_list->next) {
100 		if (fd_list->nhash == nhash &&
101 		    (!fd || fd_list->version > fd->version) &&
102 		    strlen(fd_list->name) == target->d_name.len &&
103 		    !strncmp(fd_list->name, target->d_name.name, target->d_name.len)) {
104 			fd = fd_list;
105 		}
106 	}
107 	if (fd)
108 		ino = fd->ino;
109 	mutex_unlock(&dir_f->sem);
110 	if (ino) {
111 		inode = jffs2_iget(dir_i->i_sb, ino);
112 		if (IS_ERR(inode))
113 			pr_warn("iget() failed for ino #%u\n", ino);
114 	}
115 
116 	return d_splice_alias(inode, target);
117 }
118 
119 /***********************************************************************/
120 
121 
122 static int jffs2_readdir(struct file *file, struct dir_context *ctx)
123 {
124 	struct inode *inode = file_inode(file);
125 	struct jffs2_inode_info *f = JFFS2_INODE_INFO(inode);
126 	struct jffs2_full_dirent *fd;
127 	unsigned long curofs = 1;
128 
129 	jffs2_dbg(1, "jffs2_readdir() for dir_i #%lu\n", inode->i_ino);
130 
131 	if (!dir_emit_dots(file, ctx))
132 		return 0;
133 
134 	mutex_lock(&f->sem);
135 	for (fd = f->dents; fd; fd = fd->next) {
136 		curofs++;
137 		/* First loop: curofs = 2; pos = 2 */
138 		if (curofs < ctx->pos) {
139 			jffs2_dbg(2, "Skipping dirent: \"%s\", ino #%u, type %d, because curofs %ld < offset %ld\n",
140 				  fd->name, fd->ino, fd->type, curofs, (unsigned long)ctx->pos);
141 			continue;
142 		}
143 		if (!fd->ino) {
144 			jffs2_dbg(2, "Skipping deletion dirent \"%s\"\n",
145 				  fd->name);
146 			ctx->pos++;
147 			continue;
148 		}
149 		jffs2_dbg(2, "Dirent %ld: \"%s\", ino #%u, type %d\n",
150 			  (unsigned long)ctx->pos, fd->name, fd->ino, fd->type);
151 		if (!dir_emit(ctx, fd->name, strlen(fd->name), fd->ino, fd->type))
152 			break;
153 		ctx->pos++;
154 	}
155 	mutex_unlock(&f->sem);
156 	return 0;
157 }
158 
159 /***********************************************************************/
160 
161 
162 static int jffs2_create(struct inode *dir_i, struct dentry *dentry,
163 			umode_t mode, bool excl)
164 {
165 	struct jffs2_raw_inode *ri;
166 	struct jffs2_inode_info *f, *dir_f;
167 	struct jffs2_sb_info *c;
168 	struct inode *inode;
169 	int ret;
170 
171 	ri = jffs2_alloc_raw_inode();
172 	if (!ri)
173 		return -ENOMEM;
174 
175 	c = JFFS2_SB_INFO(dir_i->i_sb);
176 
177 	jffs2_dbg(1, "%s()\n", __func__);
178 
179 	inode = jffs2_new_inode(dir_i, mode, ri);
180 
181 	if (IS_ERR(inode)) {
182 		jffs2_dbg(1, "jffs2_new_inode() failed\n");
183 		jffs2_free_raw_inode(ri);
184 		return PTR_ERR(inode);
185 	}
186 
187 	inode->i_op = &jffs2_file_inode_operations;
188 	inode->i_fop = &jffs2_file_operations;
189 	inode->i_mapping->a_ops = &jffs2_file_address_operations;
190 	inode->i_mapping->nrpages = 0;
191 
192 	f = JFFS2_INODE_INFO(inode);
193 	dir_f = JFFS2_INODE_INFO(dir_i);
194 
195 	/* jffs2_do_create() will want to lock it, _after_ reserving
196 	   space and taking c-alloc_sem. If we keep it locked here,
197 	   lockdep gets unhappy (although it's a false positive;
198 	   nothing else will be looking at this inode yet so there's
199 	   no chance of AB-BA deadlock involving its f->sem). */
200 	mutex_unlock(&f->sem);
201 
202 	ret = jffs2_do_create(c, dir_f, f, ri, &dentry->d_name);
203 	if (ret)
204 		goto fail;
205 
206 	dir_i->i_mtime = dir_i->i_ctime = ITIME(je32_to_cpu(ri->ctime));
207 
208 	jffs2_free_raw_inode(ri);
209 
210 	jffs2_dbg(1, "%s(): Created ino #%lu with mode %o, nlink %d(%d). nrpages %ld\n",
211 		  __func__, inode->i_ino, inode->i_mode, inode->i_nlink,
212 		  f->inocache->pino_nlink, inode->i_mapping->nrpages);
213 
214 	unlock_new_inode(inode);
215 	d_instantiate(dentry, inode);
216 	return 0;
217 
218  fail:
219 	iget_failed(inode);
220 	jffs2_free_raw_inode(ri);
221 	return ret;
222 }
223 
224 /***********************************************************************/
225 
226 
227 static int jffs2_unlink(struct inode *dir_i, struct dentry *dentry)
228 {
229 	struct jffs2_sb_info *c = JFFS2_SB_INFO(dir_i->i_sb);
230 	struct jffs2_inode_info *dir_f = JFFS2_INODE_INFO(dir_i);
231 	struct jffs2_inode_info *dead_f = JFFS2_INODE_INFO(d_inode(dentry));
232 	int ret;
233 	uint32_t now = get_seconds();
234 
235 	ret = jffs2_do_unlink(c, dir_f, dentry->d_name.name,
236 			      dentry->d_name.len, dead_f, now);
237 	if (dead_f->inocache)
238 		set_nlink(d_inode(dentry), dead_f->inocache->pino_nlink);
239 	if (!ret)
240 		dir_i->i_mtime = dir_i->i_ctime = ITIME(now);
241 	return ret;
242 }
243 /***********************************************************************/
244 
245 
246 static int jffs2_link (struct dentry *old_dentry, struct inode *dir_i, struct dentry *dentry)
247 {
248 	struct jffs2_sb_info *c = JFFS2_SB_INFO(old_dentry->d_sb);
249 	struct jffs2_inode_info *f = JFFS2_INODE_INFO(d_inode(old_dentry));
250 	struct jffs2_inode_info *dir_f = JFFS2_INODE_INFO(dir_i);
251 	int ret;
252 	uint8_t type;
253 	uint32_t now;
254 
255 	/* Don't let people make hard links to bad inodes. */
256 	if (!f->inocache)
257 		return -EIO;
258 
259 	if (d_is_dir(old_dentry))
260 		return -EPERM;
261 
262 	/* XXX: This is ugly */
263 	type = (d_inode(old_dentry)->i_mode & S_IFMT) >> 12;
264 	if (!type) type = DT_REG;
265 
266 	now = get_seconds();
267 	ret = jffs2_do_link(c, dir_f, f->inocache->ino, type, dentry->d_name.name, dentry->d_name.len, now);
268 
269 	if (!ret) {
270 		mutex_lock(&f->sem);
271 		set_nlink(d_inode(old_dentry), ++f->inocache->pino_nlink);
272 		mutex_unlock(&f->sem);
273 		d_instantiate(dentry, d_inode(old_dentry));
274 		dir_i->i_mtime = dir_i->i_ctime = ITIME(now);
275 		ihold(d_inode(old_dentry));
276 	}
277 	return ret;
278 }
279 
280 /***********************************************************************/
281 
282 static int jffs2_symlink (struct inode *dir_i, struct dentry *dentry, const char *target)
283 {
284 	struct jffs2_inode_info *f, *dir_f;
285 	struct jffs2_sb_info *c;
286 	struct inode *inode;
287 	struct jffs2_raw_inode *ri;
288 	struct jffs2_raw_dirent *rd;
289 	struct jffs2_full_dnode *fn;
290 	struct jffs2_full_dirent *fd;
291 	int namelen;
292 	uint32_t alloclen;
293 	int ret, targetlen = strlen(target);
294 
295 	/* FIXME: If you care. We'd need to use frags for the target
296 	   if it grows much more than this */
297 	if (targetlen > 254)
298 		return -ENAMETOOLONG;
299 
300 	ri = jffs2_alloc_raw_inode();
301 
302 	if (!ri)
303 		return -ENOMEM;
304 
305 	c = JFFS2_SB_INFO(dir_i->i_sb);
306 
307 	/* Try to reserve enough space for both node and dirent.
308 	 * Just the node will do for now, though
309 	 */
310 	namelen = dentry->d_name.len;
311 	ret = jffs2_reserve_space(c, sizeof(*ri) + targetlen, &alloclen,
312 				  ALLOC_NORMAL, JFFS2_SUMMARY_INODE_SIZE);
313 
314 	if (ret) {
315 		jffs2_free_raw_inode(ri);
316 		return ret;
317 	}
318 
319 	inode = jffs2_new_inode(dir_i, S_IFLNK | S_IRWXUGO, ri);
320 
321 	if (IS_ERR(inode)) {
322 		jffs2_free_raw_inode(ri);
323 		jffs2_complete_reservation(c);
324 		return PTR_ERR(inode);
325 	}
326 
327 	inode->i_op = &jffs2_symlink_inode_operations;
328 
329 	f = JFFS2_INODE_INFO(inode);
330 
331 	inode->i_size = targetlen;
332 	ri->isize = ri->dsize = ri->csize = cpu_to_je32(inode->i_size);
333 	ri->totlen = cpu_to_je32(sizeof(*ri) + inode->i_size);
334 	ri->hdr_crc = cpu_to_je32(crc32(0, ri, sizeof(struct jffs2_unknown_node)-4));
335 
336 	ri->compr = JFFS2_COMPR_NONE;
337 	ri->data_crc = cpu_to_je32(crc32(0, target, targetlen));
338 	ri->node_crc = cpu_to_je32(crc32(0, ri, sizeof(*ri)-8));
339 
340 	fn = jffs2_write_dnode(c, f, ri, target, targetlen, ALLOC_NORMAL);
341 
342 	jffs2_free_raw_inode(ri);
343 
344 	if (IS_ERR(fn)) {
345 		/* Eeek. Wave bye bye */
346 		mutex_unlock(&f->sem);
347 		jffs2_complete_reservation(c);
348 		ret = PTR_ERR(fn);
349 		goto fail;
350 	}
351 
352 	/* We use f->target field to store the target path. */
353 	f->target = kmemdup(target, targetlen + 1, GFP_KERNEL);
354 	if (!f->target) {
355 		pr_warn("Can't allocate %d bytes of memory\n", targetlen + 1);
356 		mutex_unlock(&f->sem);
357 		jffs2_complete_reservation(c);
358 		ret = -ENOMEM;
359 		goto fail;
360 	}
361 	inode->i_link = f->target;
362 
363 	jffs2_dbg(1, "%s(): symlink's target '%s' cached\n",
364 		  __func__, (char *)f->target);
365 
366 	/* No data here. Only a metadata node, which will be
367 	   obsoleted by the first data write
368 	*/
369 	f->metadata = fn;
370 	mutex_unlock(&f->sem);
371 
372 	jffs2_complete_reservation(c);
373 
374 	ret = jffs2_init_security(inode, dir_i, &dentry->d_name);
375 	if (ret)
376 		goto fail;
377 
378 	ret = jffs2_init_acl_post(inode);
379 	if (ret)
380 		goto fail;
381 
382 	ret = jffs2_reserve_space(c, sizeof(*rd)+namelen, &alloclen,
383 				  ALLOC_NORMAL, JFFS2_SUMMARY_DIRENT_SIZE(namelen));
384 	if (ret)
385 		goto fail;
386 
387 	rd = jffs2_alloc_raw_dirent();
388 	if (!rd) {
389 		/* Argh. Now we treat it like a normal delete */
390 		jffs2_complete_reservation(c);
391 		ret = -ENOMEM;
392 		goto fail;
393 	}
394 
395 	dir_f = JFFS2_INODE_INFO(dir_i);
396 	mutex_lock(&dir_f->sem);
397 
398 	rd->magic = cpu_to_je16(JFFS2_MAGIC_BITMASK);
399 	rd->nodetype = cpu_to_je16(JFFS2_NODETYPE_DIRENT);
400 	rd->totlen = cpu_to_je32(sizeof(*rd) + namelen);
401 	rd->hdr_crc = cpu_to_je32(crc32(0, rd, sizeof(struct jffs2_unknown_node)-4));
402 
403 	rd->pino = cpu_to_je32(dir_i->i_ino);
404 	rd->version = cpu_to_je32(++dir_f->highest_version);
405 	rd->ino = cpu_to_je32(inode->i_ino);
406 	rd->mctime = cpu_to_je32(get_seconds());
407 	rd->nsize = namelen;
408 	rd->type = DT_LNK;
409 	rd->node_crc = cpu_to_je32(crc32(0, rd, sizeof(*rd)-8));
410 	rd->name_crc = cpu_to_je32(crc32(0, dentry->d_name.name, namelen));
411 
412 	fd = jffs2_write_dirent(c, dir_f, rd, dentry->d_name.name, namelen, ALLOC_NORMAL);
413 
414 	if (IS_ERR(fd)) {
415 		/* dirent failed to write. Delete the inode normally
416 		   as if it were the final unlink() */
417 		jffs2_complete_reservation(c);
418 		jffs2_free_raw_dirent(rd);
419 		mutex_unlock(&dir_f->sem);
420 		ret = PTR_ERR(fd);
421 		goto fail;
422 	}
423 
424 	dir_i->i_mtime = dir_i->i_ctime = ITIME(je32_to_cpu(rd->mctime));
425 
426 	jffs2_free_raw_dirent(rd);
427 
428 	/* Link the fd into the inode's list, obsoleting an old
429 	   one if necessary. */
430 	jffs2_add_fd_to_list(c, fd, &dir_f->dents);
431 
432 	mutex_unlock(&dir_f->sem);
433 	jffs2_complete_reservation(c);
434 
435 	unlock_new_inode(inode);
436 	d_instantiate(dentry, inode);
437 	return 0;
438 
439  fail:
440 	iget_failed(inode);
441 	return ret;
442 }
443 
444 
445 static int jffs2_mkdir (struct inode *dir_i, struct dentry *dentry, umode_t mode)
446 {
447 	struct jffs2_inode_info *f, *dir_f;
448 	struct jffs2_sb_info *c;
449 	struct inode *inode;
450 	struct jffs2_raw_inode *ri;
451 	struct jffs2_raw_dirent *rd;
452 	struct jffs2_full_dnode *fn;
453 	struct jffs2_full_dirent *fd;
454 	int namelen;
455 	uint32_t alloclen;
456 	int ret;
457 
458 	mode |= S_IFDIR;
459 
460 	ri = jffs2_alloc_raw_inode();
461 	if (!ri)
462 		return -ENOMEM;
463 
464 	c = JFFS2_SB_INFO(dir_i->i_sb);
465 
466 	/* Try to reserve enough space for both node and dirent.
467 	 * Just the node will do for now, though
468 	 */
469 	namelen = dentry->d_name.len;
470 	ret = jffs2_reserve_space(c, sizeof(*ri), &alloclen, ALLOC_NORMAL,
471 				  JFFS2_SUMMARY_INODE_SIZE);
472 
473 	if (ret) {
474 		jffs2_free_raw_inode(ri);
475 		return ret;
476 	}
477 
478 	inode = jffs2_new_inode(dir_i, mode, ri);
479 
480 	if (IS_ERR(inode)) {
481 		jffs2_free_raw_inode(ri);
482 		jffs2_complete_reservation(c);
483 		return PTR_ERR(inode);
484 	}
485 
486 	inode->i_op = &jffs2_dir_inode_operations;
487 	inode->i_fop = &jffs2_dir_operations;
488 
489 	f = JFFS2_INODE_INFO(inode);
490 
491 	/* Directories get nlink 2 at start */
492 	set_nlink(inode, 2);
493 	/* but ic->pino_nlink is the parent ino# */
494 	f->inocache->pino_nlink = dir_i->i_ino;
495 
496 	ri->data_crc = cpu_to_je32(0);
497 	ri->node_crc = cpu_to_je32(crc32(0, ri, sizeof(*ri)-8));
498 
499 	fn = jffs2_write_dnode(c, f, ri, NULL, 0, ALLOC_NORMAL);
500 
501 	jffs2_free_raw_inode(ri);
502 
503 	if (IS_ERR(fn)) {
504 		/* Eeek. Wave bye bye */
505 		mutex_unlock(&f->sem);
506 		jffs2_complete_reservation(c);
507 		ret = PTR_ERR(fn);
508 		goto fail;
509 	}
510 	/* No data here. Only a metadata node, which will be
511 	   obsoleted by the first data write
512 	*/
513 	f->metadata = fn;
514 	mutex_unlock(&f->sem);
515 
516 	jffs2_complete_reservation(c);
517 
518 	ret = jffs2_init_security(inode, dir_i, &dentry->d_name);
519 	if (ret)
520 		goto fail;
521 
522 	ret = jffs2_init_acl_post(inode);
523 	if (ret)
524 		goto fail;
525 
526 	ret = jffs2_reserve_space(c, sizeof(*rd)+namelen, &alloclen,
527 				  ALLOC_NORMAL, JFFS2_SUMMARY_DIRENT_SIZE(namelen));
528 	if (ret)
529 		goto fail;
530 
531 	rd = jffs2_alloc_raw_dirent();
532 	if (!rd) {
533 		/* Argh. Now we treat it like a normal delete */
534 		jffs2_complete_reservation(c);
535 		ret = -ENOMEM;
536 		goto fail;
537 	}
538 
539 	dir_f = JFFS2_INODE_INFO(dir_i);
540 	mutex_lock(&dir_f->sem);
541 
542 	rd->magic = cpu_to_je16(JFFS2_MAGIC_BITMASK);
543 	rd->nodetype = cpu_to_je16(JFFS2_NODETYPE_DIRENT);
544 	rd->totlen = cpu_to_je32(sizeof(*rd) + namelen);
545 	rd->hdr_crc = cpu_to_je32(crc32(0, rd, sizeof(struct jffs2_unknown_node)-4));
546 
547 	rd->pino = cpu_to_je32(dir_i->i_ino);
548 	rd->version = cpu_to_je32(++dir_f->highest_version);
549 	rd->ino = cpu_to_je32(inode->i_ino);
550 	rd->mctime = cpu_to_je32(get_seconds());
551 	rd->nsize = namelen;
552 	rd->type = DT_DIR;
553 	rd->node_crc = cpu_to_je32(crc32(0, rd, sizeof(*rd)-8));
554 	rd->name_crc = cpu_to_je32(crc32(0, dentry->d_name.name, namelen));
555 
556 	fd = jffs2_write_dirent(c, dir_f, rd, dentry->d_name.name, namelen, ALLOC_NORMAL);
557 
558 	if (IS_ERR(fd)) {
559 		/* dirent failed to write. Delete the inode normally
560 		   as if it were the final unlink() */
561 		jffs2_complete_reservation(c);
562 		jffs2_free_raw_dirent(rd);
563 		mutex_unlock(&dir_f->sem);
564 		ret = PTR_ERR(fd);
565 		goto fail;
566 	}
567 
568 	dir_i->i_mtime = dir_i->i_ctime = ITIME(je32_to_cpu(rd->mctime));
569 	inc_nlink(dir_i);
570 
571 	jffs2_free_raw_dirent(rd);
572 
573 	/* Link the fd into the inode's list, obsoleting an old
574 	   one if necessary. */
575 	jffs2_add_fd_to_list(c, fd, &dir_f->dents);
576 
577 	mutex_unlock(&dir_f->sem);
578 	jffs2_complete_reservation(c);
579 
580 	unlock_new_inode(inode);
581 	d_instantiate(dentry, inode);
582 	return 0;
583 
584  fail:
585 	iget_failed(inode);
586 	return ret;
587 }
588 
589 static int jffs2_rmdir (struct inode *dir_i, struct dentry *dentry)
590 {
591 	struct jffs2_sb_info *c = JFFS2_SB_INFO(dir_i->i_sb);
592 	struct jffs2_inode_info *dir_f = JFFS2_INODE_INFO(dir_i);
593 	struct jffs2_inode_info *f = JFFS2_INODE_INFO(d_inode(dentry));
594 	struct jffs2_full_dirent *fd;
595 	int ret;
596 	uint32_t now = get_seconds();
597 
598 	for (fd = f->dents ; fd; fd = fd->next) {
599 		if (fd->ino)
600 			return -ENOTEMPTY;
601 	}
602 
603 	ret = jffs2_do_unlink(c, dir_f, dentry->d_name.name,
604 			      dentry->d_name.len, f, now);
605 	if (!ret) {
606 		dir_i->i_mtime = dir_i->i_ctime = ITIME(now);
607 		clear_nlink(d_inode(dentry));
608 		drop_nlink(dir_i);
609 	}
610 	return ret;
611 }
612 
613 static int jffs2_mknod (struct inode *dir_i, struct dentry *dentry, umode_t mode, dev_t rdev)
614 {
615 	struct jffs2_inode_info *f, *dir_f;
616 	struct jffs2_sb_info *c;
617 	struct inode *inode;
618 	struct jffs2_raw_inode *ri;
619 	struct jffs2_raw_dirent *rd;
620 	struct jffs2_full_dnode *fn;
621 	struct jffs2_full_dirent *fd;
622 	int namelen;
623 	union jffs2_device_node dev;
624 	int devlen = 0;
625 	uint32_t alloclen;
626 	int ret;
627 
628 	ri = jffs2_alloc_raw_inode();
629 	if (!ri)
630 		return -ENOMEM;
631 
632 	c = JFFS2_SB_INFO(dir_i->i_sb);
633 
634 	if (S_ISBLK(mode) || S_ISCHR(mode))
635 		devlen = jffs2_encode_dev(&dev, rdev);
636 
637 	/* Try to reserve enough space for both node and dirent.
638 	 * Just the node will do for now, though
639 	 */
640 	namelen = dentry->d_name.len;
641 	ret = jffs2_reserve_space(c, sizeof(*ri) + devlen, &alloclen,
642 				  ALLOC_NORMAL, JFFS2_SUMMARY_INODE_SIZE);
643 
644 	if (ret) {
645 		jffs2_free_raw_inode(ri);
646 		return ret;
647 	}
648 
649 	inode = jffs2_new_inode(dir_i, mode, ri);
650 
651 	if (IS_ERR(inode)) {
652 		jffs2_free_raw_inode(ri);
653 		jffs2_complete_reservation(c);
654 		return PTR_ERR(inode);
655 	}
656 	inode->i_op = &jffs2_file_inode_operations;
657 	init_special_inode(inode, inode->i_mode, rdev);
658 
659 	f = JFFS2_INODE_INFO(inode);
660 
661 	ri->dsize = ri->csize = cpu_to_je32(devlen);
662 	ri->totlen = cpu_to_je32(sizeof(*ri) + devlen);
663 	ri->hdr_crc = cpu_to_je32(crc32(0, ri, sizeof(struct jffs2_unknown_node)-4));
664 
665 	ri->compr = JFFS2_COMPR_NONE;
666 	ri->data_crc = cpu_to_je32(crc32(0, &dev, devlen));
667 	ri->node_crc = cpu_to_je32(crc32(0, ri, sizeof(*ri)-8));
668 
669 	fn = jffs2_write_dnode(c, f, ri, (char *)&dev, devlen, ALLOC_NORMAL);
670 
671 	jffs2_free_raw_inode(ri);
672 
673 	if (IS_ERR(fn)) {
674 		/* Eeek. Wave bye bye */
675 		mutex_unlock(&f->sem);
676 		jffs2_complete_reservation(c);
677 		ret = PTR_ERR(fn);
678 		goto fail;
679 	}
680 	/* No data here. Only a metadata node, which will be
681 	   obsoleted by the first data write
682 	*/
683 	f->metadata = fn;
684 	mutex_unlock(&f->sem);
685 
686 	jffs2_complete_reservation(c);
687 
688 	ret = jffs2_init_security(inode, dir_i, &dentry->d_name);
689 	if (ret)
690 		goto fail;
691 
692 	ret = jffs2_init_acl_post(inode);
693 	if (ret)
694 		goto fail;
695 
696 	ret = jffs2_reserve_space(c, sizeof(*rd)+namelen, &alloclen,
697 				  ALLOC_NORMAL, JFFS2_SUMMARY_DIRENT_SIZE(namelen));
698 	if (ret)
699 		goto fail;
700 
701 	rd = jffs2_alloc_raw_dirent();
702 	if (!rd) {
703 		/* Argh. Now we treat it like a normal delete */
704 		jffs2_complete_reservation(c);
705 		ret = -ENOMEM;
706 		goto fail;
707 	}
708 
709 	dir_f = JFFS2_INODE_INFO(dir_i);
710 	mutex_lock(&dir_f->sem);
711 
712 	rd->magic = cpu_to_je16(JFFS2_MAGIC_BITMASK);
713 	rd->nodetype = cpu_to_je16(JFFS2_NODETYPE_DIRENT);
714 	rd->totlen = cpu_to_je32(sizeof(*rd) + namelen);
715 	rd->hdr_crc = cpu_to_je32(crc32(0, rd, sizeof(struct jffs2_unknown_node)-4));
716 
717 	rd->pino = cpu_to_je32(dir_i->i_ino);
718 	rd->version = cpu_to_je32(++dir_f->highest_version);
719 	rd->ino = cpu_to_je32(inode->i_ino);
720 	rd->mctime = cpu_to_je32(get_seconds());
721 	rd->nsize = namelen;
722 
723 	/* XXX: This is ugly. */
724 	rd->type = (mode & S_IFMT) >> 12;
725 
726 	rd->node_crc = cpu_to_je32(crc32(0, rd, sizeof(*rd)-8));
727 	rd->name_crc = cpu_to_je32(crc32(0, dentry->d_name.name, namelen));
728 
729 	fd = jffs2_write_dirent(c, dir_f, rd, dentry->d_name.name, namelen, ALLOC_NORMAL);
730 
731 	if (IS_ERR(fd)) {
732 		/* dirent failed to write. Delete the inode normally
733 		   as if it were the final unlink() */
734 		jffs2_complete_reservation(c);
735 		jffs2_free_raw_dirent(rd);
736 		mutex_unlock(&dir_f->sem);
737 		ret = PTR_ERR(fd);
738 		goto fail;
739 	}
740 
741 	dir_i->i_mtime = dir_i->i_ctime = ITIME(je32_to_cpu(rd->mctime));
742 
743 	jffs2_free_raw_dirent(rd);
744 
745 	/* Link the fd into the inode's list, obsoleting an old
746 	   one if necessary. */
747 	jffs2_add_fd_to_list(c, fd, &dir_f->dents);
748 
749 	mutex_unlock(&dir_f->sem);
750 	jffs2_complete_reservation(c);
751 
752 	unlock_new_inode(inode);
753 	d_instantiate(dentry, inode);
754 	return 0;
755 
756  fail:
757 	iget_failed(inode);
758 	return ret;
759 }
760 
761 static int jffs2_rename (struct inode *old_dir_i, struct dentry *old_dentry,
762 			 struct inode *new_dir_i, struct dentry *new_dentry)
763 {
764 	int ret;
765 	struct jffs2_sb_info *c = JFFS2_SB_INFO(old_dir_i->i_sb);
766 	struct jffs2_inode_info *victim_f = NULL;
767 	uint8_t type;
768 	uint32_t now;
769 
770 	/* The VFS will check for us and prevent trying to rename a
771 	 * file over a directory and vice versa, but if it's a directory,
772 	 * the VFS can't check whether the victim is empty. The filesystem
773 	 * needs to do that for itself.
774 	 */
775 	if (d_really_is_positive(new_dentry)) {
776 		victim_f = JFFS2_INODE_INFO(d_inode(new_dentry));
777 		if (d_is_dir(new_dentry)) {
778 			struct jffs2_full_dirent *fd;
779 
780 			mutex_lock(&victim_f->sem);
781 			for (fd = victim_f->dents; fd; fd = fd->next) {
782 				if (fd->ino) {
783 					mutex_unlock(&victim_f->sem);
784 					return -ENOTEMPTY;
785 				}
786 			}
787 			mutex_unlock(&victim_f->sem);
788 		}
789 	}
790 
791 	/* XXX: We probably ought to alloc enough space for
792 	   both nodes at the same time. Writing the new link,
793 	   then getting -ENOSPC, is quite bad :)
794 	*/
795 
796 	/* Make a hard link */
797 
798 	/* XXX: This is ugly */
799 	type = (d_inode(old_dentry)->i_mode & S_IFMT) >> 12;
800 	if (!type) type = DT_REG;
801 
802 	now = get_seconds();
803 	ret = jffs2_do_link(c, JFFS2_INODE_INFO(new_dir_i),
804 			    d_inode(old_dentry)->i_ino, type,
805 			    new_dentry->d_name.name, new_dentry->d_name.len, now);
806 
807 	if (ret)
808 		return ret;
809 
810 	if (victim_f) {
811 		/* There was a victim. Kill it off nicely */
812 		if (d_is_dir(new_dentry))
813 			clear_nlink(d_inode(new_dentry));
814 		else
815 			drop_nlink(d_inode(new_dentry));
816 		/* Don't oops if the victim was a dirent pointing to an
817 		   inode which didn't exist. */
818 		if (victim_f->inocache) {
819 			mutex_lock(&victim_f->sem);
820 			if (d_is_dir(new_dentry))
821 				victim_f->inocache->pino_nlink = 0;
822 			else
823 				victim_f->inocache->pino_nlink--;
824 			mutex_unlock(&victim_f->sem);
825 		}
826 	}
827 
828 	/* If it was a directory we moved, and there was no victim,
829 	   increase i_nlink on its new parent */
830 	if (d_is_dir(old_dentry) && !victim_f)
831 		inc_nlink(new_dir_i);
832 
833 	/* Unlink the original */
834 	ret = jffs2_do_unlink(c, JFFS2_INODE_INFO(old_dir_i),
835 			      old_dentry->d_name.name, old_dentry->d_name.len, NULL, now);
836 
837 	/* We don't touch inode->i_nlink */
838 
839 	if (ret) {
840 		/* Oh shit. We really ought to make a single node which can do both atomically */
841 		struct jffs2_inode_info *f = JFFS2_INODE_INFO(d_inode(old_dentry));
842 		mutex_lock(&f->sem);
843 		inc_nlink(d_inode(old_dentry));
844 		if (f->inocache && !d_is_dir(old_dentry))
845 			f->inocache->pino_nlink++;
846 		mutex_unlock(&f->sem);
847 
848 		pr_notice("%s(): Link succeeded, unlink failed (err %d). You now have a hard link\n",
849 			  __func__, ret);
850 		/*
851 		 * We can't keep the target in dcache after that.
852 		 * For one thing, we can't afford dentry aliases for directories.
853 		 * For another, if there was a victim, we _can't_ set new inode
854 		 * for that sucker and we have to trigger mount eviction - the
855 		 * caller won't do it on its own since we are returning an error.
856 		 */
857 		d_invalidate(new_dentry);
858 		new_dir_i->i_mtime = new_dir_i->i_ctime = ITIME(now);
859 		return ret;
860 	}
861 
862 	if (d_is_dir(old_dentry))
863 		drop_nlink(old_dir_i);
864 
865 	new_dir_i->i_mtime = new_dir_i->i_ctime = old_dir_i->i_mtime = old_dir_i->i_ctime = ITIME(now);
866 
867 	return 0;
868 }
869 
870