xref: /kernel/linux/linux-6.6/fs/ubifs/dir.c (revision 62306a36)
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 */
47static 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 */
77struct 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
176out_iput:
177	make_bad_inode(inode);
178	iput(inode);
179	return ERR_PTR(err);
180}
181
182static 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
195static 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
270done:
271	kfree(dent);
272	fscrypt_free_filename(&nm);
273	return d_splice_alias(inode, dentry);
274}
275
276static 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
285static 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
339out_cancel:
340	dir->i_size -= sz_change;
341	dir_ui->ui_size = dir->i_size;
342	mutex_unlock(&dir_ui->ui_mutex);
343out_inode:
344	make_bad_inode(inode);
345	iput(inode);
346out_fname:
347	fscrypt_free_filename(&nm);
348out_budg:
349	ubifs_release_budget(c, &req);
350	ubifs_err(c, "cannot create regular file, error %d", err);
351	return err;
352}
353
354static 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
388out_inode:
389	make_bad_inode(inode);
390	iput(inode);
391out_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 */
405static 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 */
416static 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
422static 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
492out_cancel:
493	unlock_2_inodes(dir, inode);
494out_inode:
495	make_bad_inode(inode);
496	if (!instantiated)
497		iput(inode);
498out_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 */
514static 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 */
554static 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
689out:
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 */
713static 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
720static 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
781out_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);
790out_fname:
791	fscrypt_free_filename(&nm);
792	return err;
793}
794
795static 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
860out_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);
867out_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 */
880int 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
901static 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
963out_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);
971out_fname:
972	fscrypt_free_filename(&nm);
973	return err;
974}
975
976static 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
1034out_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);
1039out_inode:
1040	make_bad_inode(inode);
1041	iput(inode);
1042out_fname:
1043	fscrypt_free_filename(&nm);
1044out_budg:
1045	ubifs_release_budget(c, &req);
1046	return err;
1047}
1048
1049static 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
1124out_cancel:
1125	dir->i_size -= sz_change;
1126	dir_ui->ui_size = dir->i_size;
1127	mutex_unlock(&dir_ui->ui_mutex);
1128out_inode:
1129	make_bad_inode(inode);
1130	iput(inode);
1131out_fname:
1132	fscrypt_free_filename(&nm);
1133out_budg:
1134	ubifs_release_budget(c, &req);
1135	return err;
1136}
1137
1138static 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
1223out_cancel:
1224	dir->i_size -= sz_change;
1225	dir_ui->ui_size = dir->i_size;
1226	mutex_unlock(&dir_ui->ui_mutex);
1227out_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);
1232out_fname:
1233	fscrypt_free_filename(&nm);
1234out_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 */
1253static 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 */
1272static 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
1284static 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
1515out_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	}
1539out_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
1547static 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
1605out:
1606	fscrypt_free_filename(&fst_nm);
1607	fscrypt_free_filename(&snd_nm);
1608	return err;
1609}
1610
1611static 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
1636int 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
1690const 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
1709const 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