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