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