GNU Linux-libre 4.9.332-gnu1
[releases.git] / fs / ubifs / dir.c
1 /* * This file is part of UBIFS.
2  *
3  * Copyright (C) 2006-2008 Nokia Corporation.
4  * Copyright (C) 2006, 2007 University of Szeged, Hungary
5  *
6  * This program is free software; you can redistribute it and/or modify it
7  * under the terms of the GNU General Public License version 2 as published by
8  * the Free Software Foundation.
9  *
10  * This program is distributed in the hope that it will be useful, but WITHOUT
11  * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
12  * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License for
13  * more details.
14  *
15  * You should have received a copy of the GNU General Public License along with
16  * this program; if not, write to the Free Software Foundation, Inc., 51
17  * Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
18  *
19  * Authors: Artem Bityutskiy (Битюцкий Артём)
20  *          Adrian Hunter
21  *          Zoltan Sogor
22  */
23
24 /*
25  * This file implements directory operations.
26  *
27  * All FS operations in this file allocate budget before writing anything to the
28  * media. If they fail to allocate it, the error is returned. The only
29  * exceptions are 'ubifs_unlink()' and 'ubifs_rmdir()' which keep working even
30  * if they unable to allocate the budget, because deletion %-ENOSPC failure is
31  * not what users are usually ready to get. UBIFS budgeting subsystem has some
32  * space reserved for these purposes.
33  *
34  * All operations in this file write all inodes which they change straight
35  * away, instead of marking them dirty. For example, 'ubifs_link()' changes
36  * @i_size of the parent inode and writes the parent inode together with the
37  * target inode. This was done to simplify file-system recovery which would
38  * otherwise be very difficult to do. The only exception is rename which marks
39  * the re-named inode dirty (because its @i_ctime is updated) but does not
40  * write it, but just marks it as dirty.
41  */
42
43 #include "ubifs.h"
44
45 /**
46  * inherit_flags - inherit flags of the parent inode.
47  * @dir: parent inode
48  * @mode: new inode mode flags
49  *
50  * This is a helper function for 'ubifs_new_inode()' which inherits flag of the
51  * parent directory inode @dir. UBIFS inodes inherit the following flags:
52  * o %UBIFS_COMPR_FL, which is useful to switch compression on/of on
53  *   sub-directory basis;
54  * o %UBIFS_SYNC_FL - useful for the same reasons;
55  * o %UBIFS_DIRSYNC_FL - similar, but relevant only to directories.
56  *
57  * This function returns the inherited flags.
58  */
59 static int inherit_flags(const struct inode *dir, umode_t mode)
60 {
61         int flags;
62         const struct ubifs_inode *ui = ubifs_inode(dir);
63
64         if (!S_ISDIR(dir->i_mode))
65                 /*
66                  * The parent is not a directory, which means that an extended
67                  * attribute inode is being created. No flags.
68                  */
69                 return 0;
70
71         flags = ui->flags & (UBIFS_COMPR_FL | UBIFS_SYNC_FL | UBIFS_DIRSYNC_FL);
72         if (!S_ISDIR(mode))
73                 /* The "DIRSYNC" flag only applies to directories */
74                 flags &= ~UBIFS_DIRSYNC_FL;
75         return flags;
76 }
77
78 /**
79  * ubifs_new_inode - allocate new UBIFS inode object.
80  * @c: UBIFS file-system description object
81  * @dir: parent directory inode
82  * @mode: inode mode flags
83  *
84  * This function finds an unused inode number, allocates new inode and
85  * initializes it. Returns new inode in case of success and an error code in
86  * case of failure.
87  */
88 struct inode *ubifs_new_inode(struct ubifs_info *c, const struct inode *dir,
89                               umode_t mode)
90 {
91         struct inode *inode;
92         struct ubifs_inode *ui;
93
94         inode = new_inode(c->vfs_sb);
95         ui = ubifs_inode(inode);
96         if (!inode)
97                 return ERR_PTR(-ENOMEM);
98
99         /*
100          * Set 'S_NOCMTIME' to prevent VFS form updating [mc]time of inodes and
101          * marking them dirty in file write path (see 'file_update_time()').
102          * UBIFS has to fully control "clean <-> dirty" transitions of inodes
103          * to make budgeting work.
104          */
105         inode->i_flags |= S_NOCMTIME;
106
107         inode_init_owner(inode, dir, mode);
108         inode->i_mtime = inode->i_atime = inode->i_ctime =
109                          ubifs_current_time(inode);
110         inode->i_mapping->nrpages = 0;
111
112         switch (mode & S_IFMT) {
113         case S_IFREG:
114                 inode->i_mapping->a_ops = &ubifs_file_address_operations;
115                 inode->i_op = &ubifs_file_inode_operations;
116                 inode->i_fop = &ubifs_file_operations;
117                 break;
118         case S_IFDIR:
119                 inode->i_op  = &ubifs_dir_inode_operations;
120                 inode->i_fop = &ubifs_dir_operations;
121                 inode->i_size = ui->ui_size = UBIFS_INO_NODE_SZ;
122                 break;
123         case S_IFLNK:
124                 inode->i_op = &ubifs_symlink_inode_operations;
125                 break;
126         case S_IFSOCK:
127         case S_IFIFO:
128         case S_IFBLK:
129         case S_IFCHR:
130                 inode->i_op  = &ubifs_file_inode_operations;
131                 break;
132         default:
133                 BUG();
134         }
135
136         ui->flags = inherit_flags(dir, mode);
137         ubifs_set_inode_flags(inode);
138         if (S_ISREG(mode))
139                 ui->compr_type = c->default_compr;
140         else
141                 ui->compr_type = UBIFS_COMPR_NONE;
142         ui->synced_i_size = 0;
143
144         spin_lock(&c->cnt_lock);
145         /* Inode number overflow is currently not supported */
146         if (c->highest_inum >= INUM_WARN_WATERMARK) {
147                 if (c->highest_inum >= INUM_WATERMARK) {
148                         spin_unlock(&c->cnt_lock);
149                         ubifs_err(c, "out of inode numbers");
150                         make_bad_inode(inode);
151                         iput(inode);
152                         return ERR_PTR(-EINVAL);
153                 }
154                 ubifs_warn(c, "running out of inode numbers (current %lu, max %u)",
155                            (unsigned long)c->highest_inum, INUM_WATERMARK);
156         }
157
158         inode->i_ino = ++c->highest_inum;
159         /*
160          * The creation sequence number remains with this inode for its
161          * lifetime. All nodes for this inode have a greater sequence number,
162          * and so it is possible to distinguish obsolete nodes belonging to a
163          * previous incarnation of the same inode number - for example, for the
164          * purpose of rebuilding the index.
165          */
166         ui->creat_sqnum = ++c->max_sqnum;
167         spin_unlock(&c->cnt_lock);
168         return inode;
169 }
170
171 static int dbg_check_name(const struct ubifs_info *c,
172                           const struct ubifs_dent_node *dent,
173                           const struct qstr *nm)
174 {
175         if (!dbg_is_chk_gen(c))
176                 return 0;
177         if (le16_to_cpu(dent->nlen) != nm->len)
178                 return -EINVAL;
179         if (memcmp(dent->name, nm->name, nm->len))
180                 return -EINVAL;
181         return 0;
182 }
183
184 static struct dentry *ubifs_lookup(struct inode *dir, struct dentry *dentry,
185                                    unsigned int flags)
186 {
187         int err;
188         union ubifs_key key;
189         struct inode *inode = NULL;
190         struct ubifs_dent_node *dent;
191         struct ubifs_info *c = dir->i_sb->s_fs_info;
192
193         dbg_gen("'%pd' in dir ino %lu", dentry, dir->i_ino);
194
195         if (dentry->d_name.len > UBIFS_MAX_NLEN)
196                 return ERR_PTR(-ENAMETOOLONG);
197
198         dent = kmalloc(UBIFS_MAX_DENT_NODE_SZ, GFP_NOFS);
199         if (!dent)
200                 return ERR_PTR(-ENOMEM);
201
202         dent_key_init(c, &key, dir->i_ino, &dentry->d_name);
203
204         err = ubifs_tnc_lookup_nm(c, &key, dent, &dentry->d_name);
205         if (err) {
206                 if (err == -ENOENT) {
207                         dbg_gen("not found");
208                         goto done;
209                 }
210                 goto out;
211         }
212
213         if (dbg_check_name(c, dent, &dentry->d_name)) {
214                 err = -EINVAL;
215                 goto out;
216         }
217
218         inode = ubifs_iget(dir->i_sb, le64_to_cpu(dent->inum));
219         if (IS_ERR(inode)) {
220                 /*
221                  * This should not happen. Probably the file-system needs
222                  * checking.
223                  */
224                 err = PTR_ERR(inode);
225                 ubifs_err(c, "dead directory entry '%pd', error %d",
226                           dentry, err);
227                 ubifs_ro_mode(c, err);
228                 goto out;
229         }
230
231 done:
232         kfree(dent);
233         /*
234          * Note, d_splice_alias() would be required instead if we supported
235          * NFS.
236          */
237         d_add(dentry, inode);
238         return NULL;
239
240 out:
241         kfree(dent);
242         return ERR_PTR(err);
243 }
244
245 static int ubifs_create(struct inode *dir, struct dentry *dentry, umode_t mode,
246                         bool excl)
247 {
248         struct inode *inode;
249         struct ubifs_info *c = dir->i_sb->s_fs_info;
250         int err, sz_change = CALC_DENT_SIZE(dentry->d_name.len);
251         struct ubifs_budget_req req = { .new_ino = 1, .new_dent = 1,
252                                         .dirtied_ino = 1 };
253         struct ubifs_inode *dir_ui = ubifs_inode(dir);
254
255         /*
256          * Budget request settings: new inode, new direntry, changing the
257          * parent directory inode.
258          */
259
260         dbg_gen("dent '%pd', mode %#hx in dir ino %lu",
261                 dentry, mode, dir->i_ino);
262
263         err = ubifs_budget_space(c, &req);
264         if (err)
265                 return err;
266
267         inode = ubifs_new_inode(c, dir, mode);
268         if (IS_ERR(inode)) {
269                 err = PTR_ERR(inode);
270                 goto out_budg;
271         }
272
273         err = ubifs_init_security(dir, inode, &dentry->d_name);
274         if (err)
275                 goto out_inode;
276
277         mutex_lock(&dir_ui->ui_mutex);
278         dir->i_size += sz_change;
279         dir_ui->ui_size = dir->i_size;
280         dir->i_mtime = dir->i_ctime = inode->i_ctime;
281         err = ubifs_jnl_update(c, dir, &dentry->d_name, inode, 0, 0);
282         if (err)
283                 goto out_cancel;
284         mutex_unlock(&dir_ui->ui_mutex);
285
286         ubifs_release_budget(c, &req);
287         insert_inode_hash(inode);
288         d_instantiate(dentry, inode);
289         return 0;
290
291 out_cancel:
292         dir->i_size -= sz_change;
293         dir_ui->ui_size = dir->i_size;
294         mutex_unlock(&dir_ui->ui_mutex);
295 out_inode:
296         make_bad_inode(inode);
297         iput(inode);
298 out_budg:
299         ubifs_release_budget(c, &req);
300         ubifs_err(c, "cannot create regular file, error %d", err);
301         return err;
302 }
303
304 static int do_tmpfile(struct inode *dir, struct dentry *dentry,
305                       umode_t mode, struct inode **whiteout)
306 {
307         struct inode *inode;
308         struct ubifs_info *c = dir->i_sb->s_fs_info;
309         struct ubifs_budget_req req = { .new_ino = 1, .new_dent = 1};
310         struct ubifs_budget_req ino_req = { .dirtied_ino = 1 };
311         struct ubifs_inode *ui, *dir_ui = ubifs_inode(dir);
312         int err, instantiated = 0;
313
314         /*
315          * Budget request settings: new dirty inode, new direntry,
316          * budget for dirtied inode will be released via writeback.
317          */
318
319         dbg_gen("dent '%pd', mode %#hx in dir ino %lu",
320                 dentry, mode, dir->i_ino);
321
322         err = ubifs_budget_space(c, &req);
323         if (err)
324                 return err;
325
326         err = ubifs_budget_space(c, &ino_req);
327         if (err) {
328                 ubifs_release_budget(c, &req);
329                 return err;
330         }
331
332         inode = ubifs_new_inode(c, dir, mode);
333         if (IS_ERR(inode)) {
334                 err = PTR_ERR(inode);
335                 goto out_budg;
336         }
337         ui = ubifs_inode(inode);
338
339         if (whiteout) {
340                 init_special_inode(inode, inode->i_mode, WHITEOUT_DEV);
341                 ubifs_assert(inode->i_op == &ubifs_file_inode_operations);
342         }
343
344         err = ubifs_init_security(dir, inode, &dentry->d_name);
345         if (err)
346                 goto out_inode;
347
348         mutex_lock(&ui->ui_mutex);
349         insert_inode_hash(inode);
350
351         if (whiteout) {
352                 mark_inode_dirty(inode);
353                 drop_nlink(inode);
354                 *whiteout = inode;
355         } else {
356                 d_tmpfile(dentry, inode);
357         }
358         ubifs_assert(ui->dirty);
359
360         instantiated = 1;
361         mutex_unlock(&ui->ui_mutex);
362
363         mutex_lock(&dir_ui->ui_mutex);
364         err = ubifs_jnl_update(c, dir, &dentry->d_name, inode, 1, 0);
365         if (err)
366                 goto out_cancel;
367         mutex_unlock(&dir_ui->ui_mutex);
368
369         ubifs_release_budget(c, &req);
370
371         return 0;
372
373 out_cancel:
374         mutex_unlock(&dir_ui->ui_mutex);
375 out_inode:
376         make_bad_inode(inode);
377         if (!instantiated)
378                 iput(inode);
379         else if (whiteout)
380                 iput(*whiteout);
381 out_budg:
382         ubifs_release_budget(c, &req);
383         if (!instantiated)
384                 ubifs_release_budget(c, &ino_req);
385         ubifs_err(c, "cannot create temporary file, error %d", err);
386         return err;
387 }
388
389 static int ubifs_tmpfile(struct inode *dir, struct dentry *dentry,
390                          umode_t mode)
391 {
392         return do_tmpfile(dir, dentry, mode, NULL);
393 }
394
395 /**
396  * vfs_dent_type - get VFS directory entry type.
397  * @type: UBIFS directory entry type
398  *
399  * This function converts UBIFS directory entry type into VFS directory entry
400  * type.
401  */
402 static unsigned int vfs_dent_type(uint8_t type)
403 {
404         switch (type) {
405         case UBIFS_ITYPE_REG:
406                 return DT_REG;
407         case UBIFS_ITYPE_DIR:
408                 return DT_DIR;
409         case UBIFS_ITYPE_LNK:
410                 return DT_LNK;
411         case UBIFS_ITYPE_BLK:
412                 return DT_BLK;
413         case UBIFS_ITYPE_CHR:
414                 return DT_CHR;
415         case UBIFS_ITYPE_FIFO:
416                 return DT_FIFO;
417         case UBIFS_ITYPE_SOCK:
418                 return DT_SOCK;
419         default:
420                 BUG();
421         }
422         return 0;
423 }
424
425 /*
426  * The classical Unix view for directory is that it is a linear array of
427  * (name, inode number) entries. Linux/VFS assumes this model as well.
428  * Particularly, 'readdir()' call wants us to return a directory entry offset
429  * which later may be used to continue 'readdir()'ing the directory or to
430  * 'seek()' to that specific direntry. Obviously UBIFS does not really fit this
431  * model because directory entries are identified by keys, which may collide.
432  *
433  * UBIFS uses directory entry hash value for directory offsets, so
434  * 'seekdir()'/'telldir()' may not always work because of possible key
435  * collisions. But UBIFS guarantees that consecutive 'readdir()' calls work
436  * properly by means of saving full directory entry name in the private field
437  * of the file description object.
438  *
439  * This means that UBIFS cannot support NFS which requires full
440  * 'seekdir()'/'telldir()' support.
441  */
442 static int ubifs_readdir(struct file *file, struct dir_context *ctx)
443 {
444         int err = 0;
445         struct qstr nm;
446         union ubifs_key key;
447         struct ubifs_dent_node *dent;
448         struct inode *dir = file_inode(file);
449         struct ubifs_info *c = dir->i_sb->s_fs_info;
450
451         dbg_gen("dir ino %lu, f_pos %#llx", dir->i_ino, ctx->pos);
452
453         if (ctx->pos > UBIFS_S_KEY_HASH_MASK || ctx->pos == 2)
454                 /*
455                  * The directory was seek'ed to a senseless position or there
456                  * are no more entries.
457                  */
458                 return 0;
459
460         if (file->f_version == 0) {
461                 /*
462                  * The file was seek'ed, which means that @file->private_data
463                  * is now invalid. This may also be just the first
464                  * 'ubifs_readdir()' invocation, in which case
465                  * @file->private_data is NULL, and the below code is
466                  * basically a no-op.
467                  */
468                 kfree(file->private_data);
469                 file->private_data = NULL;
470         }
471
472         /*
473          * 'generic_file_llseek()' unconditionally sets @file->f_version to
474          * zero, and we use this for detecting whether the file was seek'ed.
475          */
476         file->f_version = 1;
477
478         /* File positions 0 and 1 correspond to "." and ".." */
479         if (ctx->pos < 2) {
480                 ubifs_assert(!file->private_data);
481                 if (!dir_emit_dots(file, ctx))
482                         return 0;
483
484                 /* Find the first entry in TNC and save it */
485                 lowest_dent_key(c, &key, dir->i_ino);
486                 nm.name = NULL;
487                 dent = ubifs_tnc_next_ent(c, &key, &nm);
488                 if (IS_ERR(dent)) {
489                         err = PTR_ERR(dent);
490                         goto out;
491                 }
492
493                 ctx->pos = key_hash_flash(c, &dent->key);
494                 file->private_data = dent;
495         }
496
497         dent = file->private_data;
498         if (!dent) {
499                 /*
500                  * The directory was seek'ed to and is now readdir'ed.
501                  * Find the entry corresponding to @ctx->pos or the closest one.
502                  */
503                 dent_key_init_hash(c, &key, dir->i_ino, ctx->pos);
504                 nm.name = NULL;
505                 dent = ubifs_tnc_next_ent(c, &key, &nm);
506                 if (IS_ERR(dent)) {
507                         err = PTR_ERR(dent);
508                         goto out;
509                 }
510                 ctx->pos = key_hash_flash(c, &dent->key);
511                 file->private_data = dent;
512         }
513
514         while (1) {
515                 dbg_gen("feed '%s', ino %llu, new f_pos %#x",
516                         dent->name, (unsigned long long)le64_to_cpu(dent->inum),
517                         key_hash_flash(c, &dent->key));
518                 ubifs_assert(le64_to_cpu(dent->ch.sqnum) >
519                              ubifs_inode(dir)->creat_sqnum);
520
521                 nm.len = le16_to_cpu(dent->nlen);
522                 if (!dir_emit(ctx, dent->name, nm.len,
523                                le64_to_cpu(dent->inum),
524                                vfs_dent_type(dent->type)))
525                         return 0;
526
527                 /* Switch to the next entry */
528                 key_read(c, &dent->key, &key);
529                 nm.name = dent->name;
530                 dent = ubifs_tnc_next_ent(c, &key, &nm);
531                 if (IS_ERR(dent)) {
532                         err = PTR_ERR(dent);
533                         goto out;
534                 }
535
536                 kfree(file->private_data);
537                 ctx->pos = key_hash_flash(c, &dent->key);
538                 file->private_data = dent;
539                 cond_resched();
540         }
541
542 out:
543         kfree(file->private_data);
544         file->private_data = NULL;
545
546         if (err != -ENOENT)
547                 ubifs_err(c, "cannot find next direntry, error %d", err);
548         else
549                 /*
550                  * -ENOENT is a non-fatal error in this context, the TNC uses
551                  * it to indicate that the cursor moved past the current directory
552                  * and readdir() has to stop.
553                  */
554                 err = 0;
555
556
557         /* 2 is a special value indicating that there are no more direntries */
558         ctx->pos = 2;
559         return err;
560 }
561
562 /* Free saved readdir() state when the directory is closed */
563 static int ubifs_dir_release(struct inode *dir, struct file *file)
564 {
565         kfree(file->private_data);
566         file->private_data = NULL;
567         return 0;
568 }
569
570 /**
571  * lock_2_inodes - a wrapper for locking two UBIFS inodes.
572  * @inode1: first inode
573  * @inode2: second inode
574  *
575  * We do not implement any tricks to guarantee strict lock ordering, because
576  * VFS has already done it for us on the @i_mutex. So this is just a simple
577  * wrapper function.
578  */
579 static void lock_2_inodes(struct inode *inode1, struct inode *inode2)
580 {
581         mutex_lock_nested(&ubifs_inode(inode1)->ui_mutex, WB_MUTEX_1);
582         mutex_lock_nested(&ubifs_inode(inode2)->ui_mutex, WB_MUTEX_2);
583 }
584
585 /**
586  * unlock_2_inodes - a wrapper for unlocking two UBIFS inodes.
587  * @inode1: first inode
588  * @inode2: second inode
589  */
590 static void unlock_2_inodes(struct inode *inode1, struct inode *inode2)
591 {
592         mutex_unlock(&ubifs_inode(inode2)->ui_mutex);
593         mutex_unlock(&ubifs_inode(inode1)->ui_mutex);
594 }
595
596 static int ubifs_link(struct dentry *old_dentry, struct inode *dir,
597                       struct dentry *dentry)
598 {
599         struct ubifs_info *c = dir->i_sb->s_fs_info;
600         struct inode *inode = d_inode(old_dentry);
601         struct ubifs_inode *ui = ubifs_inode(inode);
602         struct ubifs_inode *dir_ui = ubifs_inode(dir);
603         int err, sz_change = CALC_DENT_SIZE(dentry->d_name.len);
604         struct ubifs_budget_req req = { .new_dent = 1, .dirtied_ino = 2,
605                                 .dirtied_ino_d = ALIGN(ui->data_len, 8) };
606
607         /*
608          * Budget request settings: new direntry, changing the target inode,
609          * changing the parent inode.
610          */
611
612         dbg_gen("dent '%pd' to ino %lu (nlink %d) in dir ino %lu",
613                 dentry, inode->i_ino,
614                 inode->i_nlink, dir->i_ino);
615         ubifs_assert(inode_is_locked(dir));
616         ubifs_assert(inode_is_locked(inode));
617
618         err = dbg_check_synced_i_size(c, inode);
619         if (err)
620                 return err;
621
622         err = ubifs_budget_space(c, &req);
623         if (err)
624                 return err;
625
626         lock_2_inodes(dir, inode);
627
628         /* Handle O_TMPFILE corner case, it is allowed to link a O_TMPFILE. */
629         if (inode->i_nlink == 0)
630                 ubifs_delete_orphan(c, inode->i_ino);
631
632         inc_nlink(inode);
633         ihold(inode);
634         inode->i_ctime = ubifs_current_time(inode);
635         dir->i_size += sz_change;
636         dir_ui->ui_size = dir->i_size;
637         dir->i_mtime = dir->i_ctime = inode->i_ctime;
638         err = ubifs_jnl_update(c, dir, &dentry->d_name, inode, 0, 0);
639         if (err)
640                 goto out_cancel;
641         unlock_2_inodes(dir, inode);
642
643         ubifs_release_budget(c, &req);
644         d_instantiate(dentry, inode);
645         return 0;
646
647 out_cancel:
648         dir->i_size -= sz_change;
649         dir_ui->ui_size = dir->i_size;
650         drop_nlink(inode);
651         if (inode->i_nlink == 0)
652                 ubifs_add_orphan(c, inode->i_ino);
653         unlock_2_inodes(dir, inode);
654         ubifs_release_budget(c, &req);
655         iput(inode);
656         return err;
657 }
658
659 static int ubifs_unlink(struct inode *dir, struct dentry *dentry)
660 {
661         struct ubifs_info *c = dir->i_sb->s_fs_info;
662         struct inode *inode = d_inode(dentry);
663         struct ubifs_inode *dir_ui = ubifs_inode(dir);
664         int sz_change = CALC_DENT_SIZE(dentry->d_name.len);
665         int err, budgeted = 1;
666         struct ubifs_budget_req req = { .mod_dent = 1, .dirtied_ino = 2 };
667         unsigned int saved_nlink = inode->i_nlink;
668
669         /*
670          * Budget request settings: deletion direntry, deletion inode (+1 for
671          * @dirtied_ino), changing the parent directory inode. If budgeting
672          * fails, go ahead anyway because we have extra space reserved for
673          * deletions.
674          */
675
676         dbg_gen("dent '%pd' from ino %lu (nlink %d) in dir ino %lu",
677                 dentry, inode->i_ino,
678                 inode->i_nlink, dir->i_ino);
679         ubifs_assert(inode_is_locked(dir));
680         ubifs_assert(inode_is_locked(inode));
681         err = dbg_check_synced_i_size(c, inode);
682         if (err)
683                 return err;
684
685         err = ubifs_budget_space(c, &req);
686         if (err) {
687                 if (err != -ENOSPC)
688                         return err;
689                 budgeted = 0;
690         }
691
692         lock_2_inodes(dir, inode);
693         inode->i_ctime = ubifs_current_time(dir);
694         drop_nlink(inode);
695         dir->i_size -= sz_change;
696         dir_ui->ui_size = dir->i_size;
697         dir->i_mtime = dir->i_ctime = inode->i_ctime;
698         err = ubifs_jnl_update(c, dir, &dentry->d_name, inode, 1, 0);
699         if (err)
700                 goto out_cancel;
701         unlock_2_inodes(dir, inode);
702
703         if (budgeted)
704                 ubifs_release_budget(c, &req);
705         else {
706                 /* We've deleted something - clean the "no space" flags */
707                 c->bi.nospace = c->bi.nospace_rp = 0;
708                 smp_wmb();
709         }
710         return 0;
711
712 out_cancel:
713         dir->i_size += sz_change;
714         dir_ui->ui_size = dir->i_size;
715         set_nlink(inode, saved_nlink);
716         unlock_2_inodes(dir, inode);
717         if (budgeted)
718                 ubifs_release_budget(c, &req);
719         return err;
720 }
721
722 /**
723  * check_dir_empty - check if a directory is empty or not.
724  * @c: UBIFS file-system description object
725  * @dir: VFS inode object of the directory to check
726  *
727  * This function checks if directory @dir is empty. Returns zero if the
728  * directory is empty, %-ENOTEMPTY if it is not, and other negative error codes
729  * in case of of errors.
730  */
731 static int check_dir_empty(struct ubifs_info *c, struct inode *dir)
732 {
733         struct qstr nm = { .name = NULL };
734         struct ubifs_dent_node *dent;
735         union ubifs_key key;
736         int err;
737
738         lowest_dent_key(c, &key, dir->i_ino);
739         dent = ubifs_tnc_next_ent(c, &key, &nm);
740         if (IS_ERR(dent)) {
741                 err = PTR_ERR(dent);
742                 if (err == -ENOENT)
743                         err = 0;
744         } else {
745                 kfree(dent);
746                 err = -ENOTEMPTY;
747         }
748         return err;
749 }
750
751 static int ubifs_rmdir(struct inode *dir, struct dentry *dentry)
752 {
753         struct ubifs_info *c = dir->i_sb->s_fs_info;
754         struct inode *inode = d_inode(dentry);
755         int sz_change = CALC_DENT_SIZE(dentry->d_name.len);
756         int err, budgeted = 1;
757         struct ubifs_inode *dir_ui = ubifs_inode(dir);
758         struct ubifs_budget_req req = { .mod_dent = 1, .dirtied_ino = 2 };
759
760         /*
761          * Budget request settings: deletion direntry, deletion inode and
762          * changing the parent inode. If budgeting fails, go ahead anyway
763          * because we have extra space reserved for deletions.
764          */
765
766         dbg_gen("directory '%pd', ino %lu in dir ino %lu", dentry,
767                 inode->i_ino, dir->i_ino);
768         ubifs_assert(inode_is_locked(dir));
769         ubifs_assert(inode_is_locked(inode));
770         err = check_dir_empty(c, d_inode(dentry));
771         if (err)
772                 return err;
773
774         err = ubifs_budget_space(c, &req);
775         if (err) {
776                 if (err != -ENOSPC)
777                         return err;
778                 budgeted = 0;
779         }
780
781         lock_2_inodes(dir, inode);
782         inode->i_ctime = ubifs_current_time(dir);
783         clear_nlink(inode);
784         drop_nlink(dir);
785         dir->i_size -= sz_change;
786         dir_ui->ui_size = dir->i_size;
787         dir->i_mtime = dir->i_ctime = inode->i_ctime;
788         err = ubifs_jnl_update(c, dir, &dentry->d_name, inode, 1, 0);
789         if (err)
790                 goto out_cancel;
791         unlock_2_inodes(dir, inode);
792
793         if (budgeted)
794                 ubifs_release_budget(c, &req);
795         else {
796                 /* We've deleted something - clean the "no space" flags */
797                 c->bi.nospace = c->bi.nospace_rp = 0;
798                 smp_wmb();
799         }
800         return 0;
801
802 out_cancel:
803         dir->i_size += sz_change;
804         dir_ui->ui_size = dir->i_size;
805         inc_nlink(dir);
806         set_nlink(inode, 2);
807         unlock_2_inodes(dir, inode);
808         if (budgeted)
809                 ubifs_release_budget(c, &req);
810         return err;
811 }
812
813 static int ubifs_mkdir(struct inode *dir, struct dentry *dentry, umode_t mode)
814 {
815         struct inode *inode;
816         struct ubifs_inode *dir_ui = ubifs_inode(dir);
817         struct ubifs_info *c = dir->i_sb->s_fs_info;
818         int err, sz_change = CALC_DENT_SIZE(dentry->d_name.len);
819         struct ubifs_budget_req req = { .new_ino = 1, .new_dent = 1 };
820
821         /*
822          * Budget request settings: new inode, new direntry and changing parent
823          * directory inode.
824          */
825
826         dbg_gen("dent '%pd', mode %#hx in dir ino %lu",
827                 dentry, mode, dir->i_ino);
828
829         err = ubifs_budget_space(c, &req);
830         if (err)
831                 return err;
832
833         inode = ubifs_new_inode(c, dir, S_IFDIR | mode);
834         if (IS_ERR(inode)) {
835                 err = PTR_ERR(inode);
836                 goto out_budg;
837         }
838
839         err = ubifs_init_security(dir, inode, &dentry->d_name);
840         if (err)
841                 goto out_inode;
842
843         mutex_lock(&dir_ui->ui_mutex);
844         insert_inode_hash(inode);
845         inc_nlink(inode);
846         inc_nlink(dir);
847         dir->i_size += sz_change;
848         dir_ui->ui_size = dir->i_size;
849         dir->i_mtime = dir->i_ctime = inode->i_ctime;
850         err = ubifs_jnl_update(c, dir, &dentry->d_name, inode, 0, 0);
851         if (err) {
852                 ubifs_err(c, "cannot create directory, error %d", err);
853                 goto out_cancel;
854         }
855         mutex_unlock(&dir_ui->ui_mutex);
856
857         ubifs_release_budget(c, &req);
858         d_instantiate(dentry, inode);
859         return 0;
860
861 out_cancel:
862         dir->i_size -= sz_change;
863         dir_ui->ui_size = dir->i_size;
864         drop_nlink(dir);
865         mutex_unlock(&dir_ui->ui_mutex);
866 out_inode:
867         make_bad_inode(inode);
868         iput(inode);
869 out_budg:
870         ubifs_release_budget(c, &req);
871         return err;
872 }
873
874 static int ubifs_mknod(struct inode *dir, struct dentry *dentry,
875                        umode_t mode, dev_t rdev)
876 {
877         struct inode *inode;
878         struct ubifs_inode *ui;
879         struct ubifs_inode *dir_ui = ubifs_inode(dir);
880         struct ubifs_info *c = dir->i_sb->s_fs_info;
881         union ubifs_dev_desc *dev = NULL;
882         int sz_change = CALC_DENT_SIZE(dentry->d_name.len);
883         int err, devlen = 0;
884         struct ubifs_budget_req req = { .new_ino = 1, .new_dent = 1,
885                                         .new_ino_d = ALIGN(devlen, 8),
886                                         .dirtied_ino = 1 };
887
888         /*
889          * Budget request settings: new inode, new direntry and changing parent
890          * directory inode.
891          */
892
893         dbg_gen("dent '%pd' in dir ino %lu", dentry, dir->i_ino);
894
895         if (S_ISBLK(mode) || S_ISCHR(mode)) {
896                 dev = kmalloc(sizeof(union ubifs_dev_desc), GFP_NOFS);
897                 if (!dev)
898                         return -ENOMEM;
899                 devlen = ubifs_encode_dev(dev, rdev);
900         }
901
902         err = ubifs_budget_space(c, &req);
903         if (err) {
904                 kfree(dev);
905                 return err;
906         }
907
908         inode = ubifs_new_inode(c, dir, mode);
909         if (IS_ERR(inode)) {
910                 kfree(dev);
911                 err = PTR_ERR(inode);
912                 goto out_budg;
913         }
914
915         init_special_inode(inode, inode->i_mode, rdev);
916         inode->i_size = ubifs_inode(inode)->ui_size = devlen;
917         ui = ubifs_inode(inode);
918         ui->data = dev;
919         ui->data_len = devlen;
920
921         err = ubifs_init_security(dir, inode, &dentry->d_name);
922         if (err)
923                 goto out_inode;
924
925         mutex_lock(&dir_ui->ui_mutex);
926         dir->i_size += sz_change;
927         dir_ui->ui_size = dir->i_size;
928         dir->i_mtime = dir->i_ctime = inode->i_ctime;
929         err = ubifs_jnl_update(c, dir, &dentry->d_name, inode, 0, 0);
930         if (err)
931                 goto out_cancel;
932         mutex_unlock(&dir_ui->ui_mutex);
933
934         ubifs_release_budget(c, &req);
935         insert_inode_hash(inode);
936         d_instantiate(dentry, inode);
937         return 0;
938
939 out_cancel:
940         dir->i_size -= sz_change;
941         dir_ui->ui_size = dir->i_size;
942         mutex_unlock(&dir_ui->ui_mutex);
943 out_inode:
944         make_bad_inode(inode);
945         iput(inode);
946 out_budg:
947         ubifs_release_budget(c, &req);
948         return err;
949 }
950
951 static int ubifs_symlink(struct inode *dir, struct dentry *dentry,
952                          const char *symname)
953 {
954         struct inode *inode;
955         struct ubifs_inode *ui;
956         struct ubifs_inode *dir_ui = ubifs_inode(dir);
957         struct ubifs_info *c = dir->i_sb->s_fs_info;
958         int err, len = strlen(symname);
959         int sz_change = CALC_DENT_SIZE(dentry->d_name.len);
960         struct ubifs_budget_req req = { .new_ino = 1, .new_dent = 1,
961                                         .new_ino_d = ALIGN(len, 8),
962                                         .dirtied_ino = 1 };
963
964         /*
965          * Budget request settings: new inode, new direntry and changing parent
966          * directory inode.
967          */
968
969         dbg_gen("dent '%pd', target '%s' in dir ino %lu", dentry,
970                 symname, dir->i_ino);
971
972         if (len > UBIFS_MAX_INO_DATA)
973                 return -ENAMETOOLONG;
974
975         err = ubifs_budget_space(c, &req);
976         if (err)
977                 return err;
978
979         inode = ubifs_new_inode(c, dir, S_IFLNK | S_IRWXUGO);
980         if (IS_ERR(inode)) {
981                 err = PTR_ERR(inode);
982                 goto out_budg;
983         }
984
985         ui = ubifs_inode(inode);
986         ui->data = kmalloc(len + 1, GFP_NOFS);
987         if (!ui->data) {
988                 err = -ENOMEM;
989                 goto out_inode;
990         }
991
992         memcpy(ui->data, symname, len);
993         ((char *)ui->data)[len] = '\0';
994         inode->i_link = ui->data;
995         /*
996          * The terminating zero byte is not written to the flash media and it
997          * is put just to make later in-memory string processing simpler. Thus,
998          * data length is @len, not @len + %1.
999          */
1000         ui->data_len = len;
1001         inode->i_size = ubifs_inode(inode)->ui_size = len;
1002
1003         err = ubifs_init_security(dir, inode, &dentry->d_name);
1004         if (err)
1005                 goto out_inode;
1006
1007         mutex_lock(&dir_ui->ui_mutex);
1008         dir->i_size += sz_change;
1009         dir_ui->ui_size = dir->i_size;
1010         dir->i_mtime = dir->i_ctime = inode->i_ctime;
1011         err = ubifs_jnl_update(c, dir, &dentry->d_name, inode, 0, 0);
1012         if (err)
1013                 goto out_cancel;
1014         mutex_unlock(&dir_ui->ui_mutex);
1015
1016         ubifs_release_budget(c, &req);
1017         insert_inode_hash(inode);
1018         d_instantiate(dentry, inode);
1019         return 0;
1020
1021 out_cancel:
1022         dir->i_size -= sz_change;
1023         dir_ui->ui_size = dir->i_size;
1024         mutex_unlock(&dir_ui->ui_mutex);
1025 out_inode:
1026         make_bad_inode(inode);
1027         iput(inode);
1028 out_budg:
1029         ubifs_release_budget(c, &req);
1030         return err;
1031 }
1032
1033 /**
1034  * lock_4_inodes - a wrapper for locking three UBIFS inodes.
1035  * @inode1: first inode
1036  * @inode2: second inode
1037  * @inode3: third inode
1038  * @inode4: fouth inode
1039  *
1040  * This function is used for 'ubifs_rename()' and @inode1 may be the same as
1041  * @inode2 whereas @inode3 and @inode4 may be %NULL.
1042  *
1043  * We do not implement any tricks to guarantee strict lock ordering, because
1044  * VFS has already done it for us on the @i_mutex. So this is just a simple
1045  * wrapper function.
1046  */
1047 static void lock_4_inodes(struct inode *inode1, struct inode *inode2,
1048                           struct inode *inode3, struct inode *inode4)
1049 {
1050         mutex_lock_nested(&ubifs_inode(inode1)->ui_mutex, WB_MUTEX_1);
1051         if (inode2 != inode1)
1052                 mutex_lock_nested(&ubifs_inode(inode2)->ui_mutex, WB_MUTEX_2);
1053         if (inode3)
1054                 mutex_lock_nested(&ubifs_inode(inode3)->ui_mutex, WB_MUTEX_3);
1055         if (inode4)
1056                 mutex_lock_nested(&ubifs_inode(inode4)->ui_mutex, WB_MUTEX_4);
1057 }
1058
1059 /**
1060  * unlock_4_inodes - a wrapper for unlocking three UBIFS inodes for rename.
1061  * @inode1: first inode
1062  * @inode2: second inode
1063  * @inode3: third inode
1064  * @inode4: fouth inode
1065  */
1066 static void unlock_4_inodes(struct inode *inode1, struct inode *inode2,
1067                             struct inode *inode3, struct inode *inode4)
1068 {
1069         if (inode4)
1070                 mutex_unlock(&ubifs_inode(inode4)->ui_mutex);
1071         if (inode3)
1072                 mutex_unlock(&ubifs_inode(inode3)->ui_mutex);
1073         if (inode1 != inode2)
1074                 mutex_unlock(&ubifs_inode(inode2)->ui_mutex);
1075         mutex_unlock(&ubifs_inode(inode1)->ui_mutex);
1076 }
1077
1078 static int do_rename(struct inode *old_dir, struct dentry *old_dentry,
1079                      struct inode *new_dir, struct dentry *new_dentry,
1080                      unsigned int flags)
1081 {
1082         struct ubifs_info *c = old_dir->i_sb->s_fs_info;
1083         struct inode *old_inode = d_inode(old_dentry);
1084         struct inode *new_inode = d_inode(new_dentry);
1085         struct inode *whiteout = NULL;
1086         struct ubifs_inode *old_inode_ui = ubifs_inode(old_inode);
1087         struct ubifs_inode *whiteout_ui = NULL;
1088         int err, release, sync = 0, move = (new_dir != old_dir);
1089         int is_dir = S_ISDIR(old_inode->i_mode);
1090         int unlink = !!new_inode;
1091         int new_sz = CALC_DENT_SIZE(new_dentry->d_name.len);
1092         int old_sz = CALC_DENT_SIZE(old_dentry->d_name.len);
1093         struct ubifs_budget_req req = { .new_dent = 1, .mod_dent = 1,
1094                                         .dirtied_ino = 3 };
1095         struct ubifs_budget_req ino_req = { .dirtied_ino = 1,
1096                         .dirtied_ino_d = ALIGN(old_inode_ui->data_len, 8) };
1097         struct timespec time;
1098         unsigned int uninitialized_var(saved_nlink);
1099
1100         /*
1101          * Budget request settings: deletion direntry, new direntry, removing
1102          * the old inode, and changing old and new parent directory inodes.
1103          *
1104          * However, this operation also marks the target inode as dirty and
1105          * does not write it, so we allocate budget for the target inode
1106          * separately.
1107          */
1108
1109         dbg_gen("dent '%pd' ino %lu in dir ino %lu to dent '%pd' in dir ino %lu flags 0x%x",
1110                 old_dentry, old_inode->i_ino, old_dir->i_ino,
1111                 new_dentry, new_dir->i_ino, flags);
1112
1113         if (unlink)
1114                 ubifs_assert(inode_is_locked(new_inode));
1115
1116         if (unlink && is_dir) {
1117                 err = check_dir_empty(c, new_inode);
1118                 if (err)
1119                         return err;
1120         }
1121
1122         err = ubifs_budget_space(c, &req);
1123         if (err)
1124                 return err;
1125         err = ubifs_budget_space(c, &ino_req);
1126         if (err) {
1127                 ubifs_release_budget(c, &req);
1128                 return err;
1129         }
1130
1131         if (flags & RENAME_WHITEOUT) {
1132                 union ubifs_dev_desc *dev = NULL;
1133
1134                 dev = kmalloc(sizeof(union ubifs_dev_desc), GFP_NOFS);
1135                 if (!dev) {
1136                         ubifs_release_budget(c, &req);
1137                         ubifs_release_budget(c, &ino_req);
1138                         return -ENOMEM;
1139                 }
1140
1141                 err = do_tmpfile(old_dir, old_dentry, S_IFCHR | WHITEOUT_MODE, &whiteout);
1142                 if (err) {
1143                         ubifs_release_budget(c, &req);
1144                         ubifs_release_budget(c, &ino_req);
1145                         kfree(dev);
1146                         return err;
1147                 }
1148
1149                 spin_lock(&whiteout->i_lock);
1150                 whiteout->i_state |= I_LINKABLE;
1151                 spin_unlock(&whiteout->i_lock);
1152
1153                 whiteout_ui = ubifs_inode(whiteout);
1154                 whiteout_ui->data = dev;
1155                 whiteout_ui->data_len = ubifs_encode_dev(dev, MKDEV(0, 0));
1156                 ubifs_assert(!whiteout_ui->dirty);
1157         }
1158
1159         lock_4_inodes(old_dir, new_dir, new_inode, whiteout);
1160
1161         /*
1162          * Like most other Unix systems, set the @i_ctime for inodes on a
1163          * rename.
1164          */
1165         time = ubifs_current_time(old_dir);
1166         old_inode->i_ctime = time;
1167
1168         /* We must adjust parent link count when renaming directories */
1169         if (is_dir) {
1170                 if (move) {
1171                         /*
1172                          * @old_dir loses a link because we are moving
1173                          * @old_inode to a different directory.
1174                          */
1175                         drop_nlink(old_dir);
1176                         /*
1177                          * @new_dir only gains a link if we are not also
1178                          * overwriting an existing directory.
1179                          */
1180                         if (!unlink)
1181                                 inc_nlink(new_dir);
1182                 } else {
1183                         /*
1184                          * @old_inode is not moving to a different directory,
1185                          * but @old_dir still loses a link if we are
1186                          * overwriting an existing directory.
1187                          */
1188                         if (unlink)
1189                                 drop_nlink(old_dir);
1190                 }
1191         }
1192
1193         old_dir->i_size -= old_sz;
1194         ubifs_inode(old_dir)->ui_size = old_dir->i_size;
1195         old_dir->i_mtime = old_dir->i_ctime = time;
1196         new_dir->i_mtime = new_dir->i_ctime = time;
1197
1198         /*
1199          * And finally, if we unlinked a direntry which happened to have the
1200          * same name as the moved direntry, we have to decrement @i_nlink of
1201          * the unlinked inode and change its ctime.
1202          */
1203         if (unlink) {
1204                 /*
1205                  * Directories cannot have hard-links, so if this is a
1206                  * directory, just clear @i_nlink.
1207                  */
1208                 saved_nlink = new_inode->i_nlink;
1209                 if (is_dir)
1210                         clear_nlink(new_inode);
1211                 else
1212                         drop_nlink(new_inode);
1213                 new_inode->i_ctime = time;
1214         } else {
1215                 new_dir->i_size += new_sz;
1216                 ubifs_inode(new_dir)->ui_size = new_dir->i_size;
1217         }
1218
1219         /*
1220          * Do not ask 'ubifs_jnl_rename()' to flush write-buffer if @old_inode
1221          * is dirty, because this will be done later on at the end of
1222          * 'ubifs_rename()'.
1223          */
1224         if (IS_SYNC(old_inode)) {
1225                 sync = IS_DIRSYNC(old_dir) || IS_DIRSYNC(new_dir);
1226                 if (unlink && IS_SYNC(new_inode))
1227                         sync = 1;
1228         }
1229
1230         if (whiteout) {
1231                 struct ubifs_budget_req wht_req = { .dirtied_ino = 1,
1232                                 .dirtied_ino_d = \
1233                                 ALIGN(ubifs_inode(whiteout)->data_len, 8) };
1234
1235                 err = ubifs_budget_space(c, &wht_req);
1236                 if (err) {
1237                         ubifs_release_budget(c, &req);
1238                         ubifs_release_budget(c, &ino_req);
1239                         kfree(whiteout_ui->data);
1240                         whiteout_ui->data_len = 0;
1241                         iput(whiteout);
1242                         return err;
1243                 }
1244
1245                 inc_nlink(whiteout);
1246                 mark_inode_dirty(whiteout);
1247
1248                 spin_lock(&whiteout->i_lock);
1249                 whiteout->i_state &= ~I_LINKABLE;
1250                 spin_unlock(&whiteout->i_lock);
1251
1252                 iput(whiteout);
1253         }
1254
1255         err = ubifs_jnl_rename(c, old_dir, old_dentry, new_dir, new_dentry, whiteout,
1256                                sync);
1257         if (err)
1258                 goto out_cancel;
1259
1260         unlock_4_inodes(old_dir, new_dir, new_inode, whiteout);
1261         ubifs_release_budget(c, &req);
1262
1263         mutex_lock(&old_inode_ui->ui_mutex);
1264         release = old_inode_ui->dirty;
1265         mark_inode_dirty_sync(old_inode);
1266         mutex_unlock(&old_inode_ui->ui_mutex);
1267
1268         if (release)
1269                 ubifs_release_budget(c, &ino_req);
1270         if (IS_SYNC(old_inode))
1271                 err = old_inode->i_sb->s_op->write_inode(old_inode, NULL);
1272         return err;
1273
1274 out_cancel:
1275         if (unlink) {
1276                 set_nlink(new_inode, saved_nlink);
1277         } else {
1278                 new_dir->i_size -= new_sz;
1279                 ubifs_inode(new_dir)->ui_size = new_dir->i_size;
1280         }
1281         old_dir->i_size += old_sz;
1282         ubifs_inode(old_dir)->ui_size = old_dir->i_size;
1283         if (is_dir) {
1284                 if (move) {
1285                         inc_nlink(old_dir);
1286                         if (!unlink)
1287                                 drop_nlink(new_dir);
1288                 } else {
1289                         if (unlink)
1290                                 inc_nlink(old_dir);
1291                 }
1292         }
1293         if (whiteout) {
1294                 drop_nlink(whiteout);
1295                 iput(whiteout);
1296         }
1297         unlock_4_inodes(old_dir, new_dir, new_inode, whiteout);
1298         ubifs_release_budget(c, &ino_req);
1299         ubifs_release_budget(c, &req);
1300         return err;
1301 }
1302
1303 static int ubifs_xrename(struct inode *old_dir, struct dentry *old_dentry,
1304                         struct inode *new_dir, struct dentry *new_dentry)
1305 {
1306         struct ubifs_info *c = old_dir->i_sb->s_fs_info;
1307         struct ubifs_budget_req req = { .new_dent = 1, .mod_dent = 1,
1308                                 .dirtied_ino = 2 };
1309         int sync = IS_DIRSYNC(old_dir) || IS_DIRSYNC(new_dir);
1310         struct inode *fst_inode = d_inode(old_dentry);
1311         struct inode *snd_inode = d_inode(new_dentry);
1312         struct timespec time;
1313         int err;
1314
1315         ubifs_assert(fst_inode && snd_inode);
1316
1317         lock_4_inodes(old_dir, new_dir, NULL, NULL);
1318
1319         time = ubifs_current_time(old_dir);
1320         fst_inode->i_ctime = time;
1321         snd_inode->i_ctime = time;
1322         old_dir->i_mtime = old_dir->i_ctime = time;
1323         new_dir->i_mtime = new_dir->i_ctime = time;
1324
1325         if (old_dir != new_dir) {
1326                 if (S_ISDIR(fst_inode->i_mode) && !S_ISDIR(snd_inode->i_mode)) {
1327                         inc_nlink(new_dir);
1328                         drop_nlink(old_dir);
1329                 }
1330                 else if (!S_ISDIR(fst_inode->i_mode) && S_ISDIR(snd_inode->i_mode)) {
1331                         drop_nlink(new_dir);
1332                         inc_nlink(old_dir);
1333                 }
1334         }
1335
1336         err = ubifs_jnl_xrename(c, old_dir, old_dentry, new_dir, new_dentry,
1337                                 sync);
1338
1339         unlock_4_inodes(old_dir, new_dir, NULL, NULL);
1340         ubifs_release_budget(c, &req);
1341
1342         return err;
1343 }
1344
1345 static int ubifs_rename(struct inode *old_dir, struct dentry *old_dentry,
1346                         struct inode *new_dir, struct dentry *new_dentry,
1347                         unsigned int flags)
1348 {
1349         if (flags & ~(RENAME_NOREPLACE | RENAME_WHITEOUT | RENAME_EXCHANGE))
1350                 return -EINVAL;
1351
1352         ubifs_assert(inode_is_locked(old_dir));
1353         ubifs_assert(inode_is_locked(new_dir));
1354
1355         if (flags & RENAME_EXCHANGE)
1356                 return ubifs_xrename(old_dir, old_dentry, new_dir, new_dentry);
1357
1358         return do_rename(old_dir, old_dentry, new_dir, new_dentry, flags);
1359 }
1360
1361 int ubifs_getattr(struct vfsmount *mnt, struct dentry *dentry,
1362                   struct kstat *stat)
1363 {
1364         loff_t size;
1365         struct inode *inode = d_inode(dentry);
1366         struct ubifs_inode *ui = ubifs_inode(inode);
1367
1368         mutex_lock(&ui->ui_mutex);
1369         generic_fillattr(inode, stat);
1370         stat->blksize = UBIFS_BLOCK_SIZE;
1371         stat->size = ui->ui_size;
1372
1373         /*
1374          * Unfortunately, the 'stat()' system call was designed for block
1375          * device based file systems, and it is not appropriate for UBIFS,
1376          * because UBIFS does not have notion of "block". For example, it is
1377          * difficult to tell how many block a directory takes - it actually
1378          * takes less than 300 bytes, but we have to round it to block size,
1379          * which introduces large mistake. This makes utilities like 'du' to
1380          * report completely senseless numbers. This is the reason why UBIFS
1381          * goes the same way as JFFS2 - it reports zero blocks for everything
1382          * but regular files, which makes more sense than reporting completely
1383          * wrong sizes.
1384          */
1385         if (S_ISREG(inode->i_mode)) {
1386                 size = ui->xattr_size;
1387                 size += stat->size;
1388                 size = ALIGN(size, UBIFS_BLOCK_SIZE);
1389                 /*
1390                  * Note, user-space expects 512-byte blocks count irrespectively
1391                  * of what was reported in @stat->size.
1392                  */
1393                 stat->blocks = size >> 9;
1394         } else
1395                 stat->blocks = 0;
1396         mutex_unlock(&ui->ui_mutex);
1397         return 0;
1398 }
1399
1400 const struct inode_operations ubifs_dir_inode_operations = {
1401         .lookup      = ubifs_lookup,
1402         .create      = ubifs_create,
1403         .link        = ubifs_link,
1404         .symlink     = ubifs_symlink,
1405         .unlink      = ubifs_unlink,
1406         .mkdir       = ubifs_mkdir,
1407         .rmdir       = ubifs_rmdir,
1408         .mknod       = ubifs_mknod,
1409         .rename      = ubifs_rename,
1410         .setattr     = ubifs_setattr,
1411         .getattr     = ubifs_getattr,
1412         .listxattr   = ubifs_listxattr,
1413 #ifdef CONFIG_UBIFS_ATIME_SUPPORT
1414         .update_time = ubifs_update_time,
1415 #endif
1416         .tmpfile     = ubifs_tmpfile,
1417 };
1418
1419 const struct file_operations ubifs_dir_operations = {
1420         .llseek         = generic_file_llseek,
1421         .release        = ubifs_dir_release,
1422         .read           = generic_read_dir,
1423         .iterate_shared = ubifs_readdir,
1424         .fsync          = ubifs_fsync,
1425         .unlocked_ioctl = ubifs_ioctl,
1426 #ifdef CONFIG_COMPAT
1427         .compat_ioctl   = ubifs_compat_ioctl,
1428 #endif
1429 };