xref: /kernel/linux/linux-6.6/fs/exfat/namei.c (revision 62306a36)
1// SPDX-License-Identifier: GPL-2.0-or-later
2/*
3 * Copyright (C) 2012-2013 Samsung Electronics Co., Ltd.
4 */
5
6#include <linux/iversion.h>
7#include <linux/namei.h>
8#include <linux/slab.h>
9#include <linux/buffer_head.h>
10#include <linux/nls.h>
11
12#include "exfat_raw.h"
13#include "exfat_fs.h"
14
15static inline unsigned long exfat_d_version(struct dentry *dentry)
16{
17	return (unsigned long) dentry->d_fsdata;
18}
19
20static inline void exfat_d_version_set(struct dentry *dentry,
21		unsigned long version)
22{
23	dentry->d_fsdata = (void *) version;
24}
25
26/*
27 * If new entry was created in the parent, it could create the 8.3 alias (the
28 * shortname of logname).  So, the parent may have the negative-dentry which
29 * matches the created 8.3 alias.
30 *
31 * If it happened, the negative dentry isn't actually negative anymore.  So,
32 * drop it.
33 */
34static int exfat_d_revalidate(struct dentry *dentry, unsigned int flags)
35{
36	int ret;
37
38	if (flags & LOOKUP_RCU)
39		return -ECHILD;
40
41	/*
42	 * This is not negative dentry. Always valid.
43	 *
44	 * Note, rename() to existing directory entry will have ->d_inode, and
45	 * will use existing name which isn't specified name by user.
46	 *
47	 * We may be able to drop this positive dentry here. But dropping
48	 * positive dentry isn't good idea. So it's unsupported like
49	 * rename("filename", "FILENAME") for now.
50	 */
51	if (d_really_is_positive(dentry))
52		return 1;
53
54	/*
55	 * Drop the negative dentry, in order to make sure to use the case
56	 * sensitive name which is specified by user if this is for creation.
57	 */
58	if (flags & (LOOKUP_CREATE | LOOKUP_RENAME_TARGET))
59		return 0;
60
61	spin_lock(&dentry->d_lock);
62	ret = inode_eq_iversion(d_inode(dentry->d_parent),
63			exfat_d_version(dentry));
64	spin_unlock(&dentry->d_lock);
65	return ret;
66}
67
68/* returns the length of a struct qstr, ignoring trailing dots if necessary */
69static unsigned int exfat_striptail_len(unsigned int len, const char *name,
70					bool keep_last_dots)
71{
72	if (!keep_last_dots) {
73		while (len && name[len - 1] == '.')
74			len--;
75	}
76	return len;
77}
78
79/*
80 * Compute the hash for the exfat name corresponding to the dentry.  If the name
81 * is invalid, we leave the hash code unchanged so that the existing dentry can
82 * be used. The exfat fs routines will return ENOENT or EINVAL as appropriate.
83 */
84static int exfat_d_hash(const struct dentry *dentry, struct qstr *qstr)
85{
86	struct super_block *sb = dentry->d_sb;
87	struct nls_table *t = EXFAT_SB(sb)->nls_io;
88	const unsigned char *name = qstr->name;
89	unsigned int len = exfat_striptail_len(qstr->len, qstr->name,
90			   EXFAT_SB(sb)->options.keep_last_dots);
91	unsigned long hash = init_name_hash(dentry);
92	int i, charlen;
93	wchar_t c;
94
95	for (i = 0; i < len; i += charlen) {
96		charlen = t->char2uni(&name[i], len - i, &c);
97		if (charlen < 0)
98			return charlen;
99		hash = partial_name_hash(exfat_toupper(sb, c), hash);
100	}
101
102	qstr->hash = end_name_hash(hash);
103	return 0;
104}
105
106static int exfat_d_cmp(const struct dentry *dentry, unsigned int len,
107		const char *str, const struct qstr *name)
108{
109	struct super_block *sb = dentry->d_sb;
110	struct nls_table *t = EXFAT_SB(sb)->nls_io;
111	unsigned int alen = exfat_striptail_len(name->len, name->name,
112				EXFAT_SB(sb)->options.keep_last_dots);
113	unsigned int blen = exfat_striptail_len(len, str,
114				EXFAT_SB(sb)->options.keep_last_dots);
115	wchar_t c1, c2;
116	int charlen, i;
117
118	if (alen != blen)
119		return 1;
120
121	for (i = 0; i < len; i += charlen) {
122		charlen = t->char2uni(&name->name[i], alen - i, &c1);
123		if (charlen < 0)
124			return 1;
125		if (charlen != t->char2uni(&str[i], blen - i, &c2))
126			return 1;
127
128		if (exfat_toupper(sb, c1) != exfat_toupper(sb, c2))
129			return 1;
130	}
131
132	return 0;
133}
134
135const struct dentry_operations exfat_dentry_ops = {
136	.d_revalidate	= exfat_d_revalidate,
137	.d_hash		= exfat_d_hash,
138	.d_compare	= exfat_d_cmp,
139};
140
141static int exfat_utf8_d_hash(const struct dentry *dentry, struct qstr *qstr)
142{
143	struct super_block *sb = dentry->d_sb;
144	const unsigned char *name = qstr->name;
145	unsigned int len = exfat_striptail_len(qstr->len, qstr->name,
146			       EXFAT_SB(sb)->options.keep_last_dots);
147	unsigned long hash = init_name_hash(dentry);
148	int i, charlen;
149	unicode_t u;
150
151	for (i = 0; i < len; i += charlen) {
152		charlen = utf8_to_utf32(&name[i], len - i, &u);
153		if (charlen < 0)
154			return charlen;
155
156		/*
157		 * exfat_toupper() works only for code points up to the U+FFFF.
158		 */
159		hash = partial_name_hash(u <= 0xFFFF ? exfat_toupper(sb, u) : u,
160					 hash);
161	}
162
163	qstr->hash = end_name_hash(hash);
164	return 0;
165}
166
167static int exfat_utf8_d_cmp(const struct dentry *dentry, unsigned int len,
168		const char *str, const struct qstr *name)
169{
170	struct super_block *sb = dentry->d_sb;
171	unsigned int alen = exfat_striptail_len(name->len, name->name,
172				EXFAT_SB(sb)->options.keep_last_dots);
173	unsigned int blen = exfat_striptail_len(len, str,
174				EXFAT_SB(sb)->options.keep_last_dots);
175
176	unicode_t u_a, u_b;
177	int charlen, i;
178
179	if (alen != blen)
180		return 1;
181
182	for (i = 0; i < alen; i += charlen) {
183		charlen = utf8_to_utf32(&name->name[i], alen - i, &u_a);
184		if (charlen < 0)
185			return 1;
186		if (charlen != utf8_to_utf32(&str[i], blen - i, &u_b))
187			return 1;
188
189		if (u_a <= 0xFFFF && u_b <= 0xFFFF) {
190			if (exfat_toupper(sb, u_a) != exfat_toupper(sb, u_b))
191				return 1;
192		} else {
193			if (u_a != u_b)
194				return 1;
195		}
196	}
197
198	return 0;
199}
200
201const struct dentry_operations exfat_utf8_dentry_ops = {
202	.d_revalidate	= exfat_d_revalidate,
203	.d_hash		= exfat_utf8_d_hash,
204	.d_compare	= exfat_utf8_d_cmp,
205};
206
207/* used only in search empty_slot() */
208#define CNT_UNUSED_NOHIT        (-1)
209#define CNT_UNUSED_HIT          (-2)
210/* search EMPTY CONTINUOUS "num_entries" entries */
211static int exfat_search_empty_slot(struct super_block *sb,
212		struct exfat_hint_femp *hint_femp, struct exfat_chain *p_dir,
213		int num_entries)
214{
215	int i, dentry, num_empty = 0;
216	int dentries_per_clu;
217	unsigned int type;
218	struct exfat_chain clu;
219	struct exfat_dentry *ep;
220	struct exfat_sb_info *sbi = EXFAT_SB(sb);
221	struct buffer_head *bh;
222
223	dentries_per_clu = sbi->dentries_per_clu;
224
225	if (hint_femp->eidx != EXFAT_HINT_NONE) {
226		dentry = hint_femp->eidx;
227
228		/*
229		 * If hint_femp->count is enough, it is needed to check if
230		 * there are actual empty entries.
231		 * Otherwise, and if "dentry + hint_famp->count" is also equal
232		 * to "p_dir->size * dentries_per_clu", it means ENOSPC.
233		 */
234		if (dentry + hint_femp->count == p_dir->size * dentries_per_clu &&
235		    num_entries > hint_femp->count)
236			return -ENOSPC;
237
238		hint_femp->eidx = EXFAT_HINT_NONE;
239		exfat_chain_dup(&clu, &hint_femp->cur);
240	} else {
241		exfat_chain_dup(&clu, p_dir);
242		dentry = 0;
243	}
244
245	while (clu.dir != EXFAT_EOF_CLUSTER) {
246		i = dentry & (dentries_per_clu - 1);
247
248		for (; i < dentries_per_clu; i++, dentry++) {
249			ep = exfat_get_dentry(sb, &clu, i, &bh);
250			if (!ep)
251				return -EIO;
252			type = exfat_get_entry_type(ep);
253			brelse(bh);
254
255			if (type == TYPE_UNUSED || type == TYPE_DELETED) {
256				num_empty++;
257				if (hint_femp->eidx == EXFAT_HINT_NONE) {
258					hint_femp->eidx = dentry;
259					hint_femp->count = CNT_UNUSED_NOHIT;
260					exfat_chain_set(&hint_femp->cur,
261						clu.dir, clu.size, clu.flags);
262				}
263
264				if (type == TYPE_UNUSED &&
265				    hint_femp->count != CNT_UNUSED_HIT)
266					hint_femp->count = CNT_UNUSED_HIT;
267			} else {
268				if (hint_femp->eidx != EXFAT_HINT_NONE &&
269				    hint_femp->count == CNT_UNUSED_HIT) {
270					/* unused empty group means
271					 * an empty group which includes
272					 * unused dentry
273					 */
274					exfat_fs_error(sb,
275						"found bogus dentry(%d) beyond unused empty group(%d) (start_clu : %u, cur_clu : %u)",
276						dentry, hint_femp->eidx,
277						p_dir->dir, clu.dir);
278					return -EIO;
279				}
280
281				num_empty = 0;
282				hint_femp->eidx = EXFAT_HINT_NONE;
283			}
284
285			if (num_empty >= num_entries) {
286				/* found and invalidate hint_femp */
287				hint_femp->eidx = EXFAT_HINT_NONE;
288				return (dentry - (num_entries - 1));
289			}
290		}
291
292		if (clu.flags == ALLOC_NO_FAT_CHAIN) {
293			if (--clu.size > 0)
294				clu.dir++;
295			else
296				clu.dir = EXFAT_EOF_CLUSTER;
297		} else {
298			if (exfat_get_next_cluster(sb, &clu.dir))
299				return -EIO;
300		}
301	}
302
303	hint_femp->eidx = p_dir->size * dentries_per_clu - num_empty;
304	hint_femp->count = num_empty;
305	if (num_empty == 0)
306		exfat_chain_set(&hint_femp->cur, EXFAT_EOF_CLUSTER, 0,
307				clu.flags);
308
309	return -ENOSPC;
310}
311
312static int exfat_check_max_dentries(struct inode *inode)
313{
314	if (EXFAT_B_TO_DEN(i_size_read(inode)) >= MAX_EXFAT_DENTRIES) {
315		/*
316		 * exFAT spec allows a dir to grow up to 8388608(256MB)
317		 * dentries
318		 */
319		return -ENOSPC;
320	}
321	return 0;
322}
323
324/* find empty directory entry.
325 * if there isn't any empty slot, expand cluster chain.
326 */
327static int exfat_find_empty_entry(struct inode *inode,
328		struct exfat_chain *p_dir, int num_entries)
329{
330	int dentry;
331	unsigned int ret, last_clu;
332	loff_t size = 0;
333	struct exfat_chain clu;
334	struct super_block *sb = inode->i_sb;
335	struct exfat_sb_info *sbi = EXFAT_SB(sb);
336	struct exfat_inode_info *ei = EXFAT_I(inode);
337	struct exfat_hint_femp hint_femp;
338
339	hint_femp.eidx = EXFAT_HINT_NONE;
340
341	if (ei->hint_femp.eidx != EXFAT_HINT_NONE) {
342		hint_femp = ei->hint_femp;
343		ei->hint_femp.eidx = EXFAT_HINT_NONE;
344	}
345
346	while ((dentry = exfat_search_empty_slot(sb, &hint_femp, p_dir,
347					num_entries)) < 0) {
348		if (dentry == -EIO)
349			break;
350
351		if (exfat_check_max_dentries(inode))
352			return -ENOSPC;
353
354		/*
355		 * Allocate new cluster to this directory
356		 */
357		if (ei->start_clu != EXFAT_EOF_CLUSTER) {
358			/* we trust p_dir->size regardless of FAT type */
359			if (exfat_find_last_cluster(sb, p_dir, &last_clu))
360				return -EIO;
361
362			exfat_chain_set(&clu, last_clu + 1, 0, p_dir->flags);
363		} else {
364			/* This directory is empty */
365			exfat_chain_set(&clu, EXFAT_EOF_CLUSTER, 0,
366					ALLOC_NO_FAT_CHAIN);
367		}
368
369		/* allocate a cluster */
370		ret = exfat_alloc_cluster(inode, 1, &clu, IS_DIRSYNC(inode));
371		if (ret)
372			return ret;
373
374		if (exfat_zeroed_cluster(inode, clu.dir))
375			return -EIO;
376
377		if (ei->start_clu == EXFAT_EOF_CLUSTER) {
378			ei->start_clu = clu.dir;
379			p_dir->dir = clu.dir;
380		}
381
382		/* append to the FAT chain */
383		if (clu.flags != p_dir->flags) {
384			/* no-fat-chain bit is disabled,
385			 * so fat-chain should be synced with alloc-bitmap
386			 */
387			exfat_chain_cont_cluster(sb, p_dir->dir, p_dir->size);
388			p_dir->flags = ALLOC_FAT_CHAIN;
389			hint_femp.cur.flags = ALLOC_FAT_CHAIN;
390		}
391
392		if (clu.flags == ALLOC_FAT_CHAIN)
393			if (exfat_ent_set(sb, last_clu, clu.dir))
394				return -EIO;
395
396		if (hint_femp.cur.dir == EXFAT_EOF_CLUSTER)
397			exfat_chain_set(&hint_femp.cur, clu.dir, 0, clu.flags);
398
399		hint_femp.count += sbi->dentries_per_clu;
400
401		hint_femp.cur.size++;
402		p_dir->size++;
403		size = EXFAT_CLU_TO_B(p_dir->size, sbi);
404
405		/* directory inode should be updated in here */
406		i_size_write(inode, size);
407		ei->i_size_ondisk += sbi->cluster_size;
408		ei->i_size_aligned += sbi->cluster_size;
409		ei->flags = p_dir->flags;
410		inode->i_blocks += sbi->cluster_size >> 9;
411	}
412
413	return dentry;
414}
415
416/*
417 * Name Resolution Functions :
418 * Zero if it was successful; otherwise nonzero.
419 */
420static int __exfat_resolve_path(struct inode *inode, const unsigned char *path,
421		struct exfat_chain *p_dir, struct exfat_uni_name *p_uniname,
422		int lookup)
423{
424	int namelen;
425	int lossy = NLS_NAME_NO_LOSSY;
426	struct super_block *sb = inode->i_sb;
427	struct exfat_sb_info *sbi = EXFAT_SB(sb);
428	struct exfat_inode_info *ei = EXFAT_I(inode);
429	int pathlen = strlen(path);
430
431	/*
432	 * get the length of the pathname excluding
433	 * trailing periods, if any.
434	 */
435	namelen = exfat_striptail_len(pathlen, path, false);
436	if (EXFAT_SB(sb)->options.keep_last_dots) {
437		/*
438		 * Do not allow the creation of files with names
439		 * ending with period(s).
440		 */
441		if (!lookup && (namelen < pathlen))
442			return -EINVAL;
443		namelen = pathlen;
444	}
445	if (!namelen)
446		return -ENOENT;
447	if (pathlen > (MAX_NAME_LENGTH * MAX_CHARSET_SIZE))
448		return -ENAMETOOLONG;
449
450	/*
451	 * strip all leading spaces :
452	 * "MS windows 7" supports leading spaces.
453	 * So we should skip this preprocessing for compatibility.
454	 */
455
456	/* file name conversion :
457	 * If lookup case, we allow bad-name for compatibility.
458	 */
459	namelen = exfat_nls_to_utf16(sb, path, namelen, p_uniname,
460			&lossy);
461	if (namelen < 0)
462		return namelen; /* return error value */
463
464	if ((lossy && !lookup) || !namelen)
465		return (lossy & NLS_NAME_OVERLEN) ? -ENAMETOOLONG : -EINVAL;
466
467	exfat_chain_set(p_dir, ei->start_clu,
468		EXFAT_B_TO_CLU(i_size_read(inode), sbi), ei->flags);
469
470	return 0;
471}
472
473static inline int exfat_resolve_path(struct inode *inode,
474		const unsigned char *path, struct exfat_chain *dir,
475		struct exfat_uni_name *uni)
476{
477	return __exfat_resolve_path(inode, path, dir, uni, 0);
478}
479
480static inline int exfat_resolve_path_for_lookup(struct inode *inode,
481		const unsigned char *path, struct exfat_chain *dir,
482		struct exfat_uni_name *uni)
483{
484	return __exfat_resolve_path(inode, path, dir, uni, 1);
485}
486
487static inline loff_t exfat_make_i_pos(struct exfat_dir_entry *info)
488{
489	return ((loff_t) info->dir.dir << 32) | (info->entry & 0xffffffff);
490}
491
492static int exfat_add_entry(struct inode *inode, const char *path,
493		struct exfat_chain *p_dir, unsigned int type,
494		struct exfat_dir_entry *info)
495{
496	int ret, dentry, num_entries;
497	struct super_block *sb = inode->i_sb;
498	struct exfat_sb_info *sbi = EXFAT_SB(sb);
499	struct exfat_uni_name uniname;
500	struct exfat_chain clu;
501	int clu_size = 0;
502	unsigned int start_clu = EXFAT_FREE_CLUSTER;
503
504	ret = exfat_resolve_path(inode, path, p_dir, &uniname);
505	if (ret)
506		goto out;
507
508	num_entries = exfat_calc_num_entries(&uniname);
509	if (num_entries < 0) {
510		ret = num_entries;
511		goto out;
512	}
513
514	/* exfat_find_empty_entry must be called before alloc_cluster() */
515	dentry = exfat_find_empty_entry(inode, p_dir, num_entries);
516	if (dentry < 0) {
517		ret = dentry; /* -EIO or -ENOSPC */
518		goto out;
519	}
520
521	if (type == TYPE_DIR) {
522		ret = exfat_alloc_new_dir(inode, &clu);
523		if (ret)
524			goto out;
525		start_clu = clu.dir;
526		clu_size = sbi->cluster_size;
527	}
528
529	/* update the directory entry */
530	/* fill the dos name directory entry information of the created file.
531	 * the first cluster is not determined yet. (0)
532	 */
533	ret = exfat_init_dir_entry(inode, p_dir, dentry, type,
534		start_clu, clu_size);
535	if (ret)
536		goto out;
537
538	ret = exfat_init_ext_entry(inode, p_dir, dentry, num_entries, &uniname);
539	if (ret)
540		goto out;
541
542	info->dir = *p_dir;
543	info->entry = dentry;
544	info->flags = ALLOC_NO_FAT_CHAIN;
545	info->type = type;
546
547	if (type == TYPE_FILE) {
548		info->attr = ATTR_ARCHIVE;
549		info->start_clu = EXFAT_EOF_CLUSTER;
550		info->size = 0;
551		info->num_subdirs = 0;
552	} else {
553		info->attr = ATTR_SUBDIR;
554		info->start_clu = start_clu;
555		info->size = clu_size;
556		info->num_subdirs = EXFAT_MIN_SUBDIR;
557	}
558	memset(&info->crtime, 0, sizeof(info->crtime));
559	memset(&info->mtime, 0, sizeof(info->mtime));
560	memset(&info->atime, 0, sizeof(info->atime));
561out:
562	return ret;
563}
564
565static int exfat_create(struct mnt_idmap *idmap, struct inode *dir,
566			struct dentry *dentry, umode_t mode, bool excl)
567{
568	struct super_block *sb = dir->i_sb;
569	struct inode *inode;
570	struct exfat_chain cdir;
571	struct exfat_dir_entry info;
572	loff_t i_pos;
573	int err;
574
575	mutex_lock(&EXFAT_SB(sb)->s_lock);
576	exfat_set_volume_dirty(sb);
577	err = exfat_add_entry(dir, dentry->d_name.name, &cdir, TYPE_FILE,
578		&info);
579	if (err)
580		goto unlock;
581
582	inode_inc_iversion(dir);
583	dir->i_mtime = inode_set_ctime_current(dir);
584	if (IS_DIRSYNC(dir))
585		exfat_sync_inode(dir);
586	else
587		mark_inode_dirty(dir);
588
589	i_pos = exfat_make_i_pos(&info);
590	inode = exfat_build_inode(sb, &info, i_pos);
591	err = PTR_ERR_OR_ZERO(inode);
592	if (err)
593		goto unlock;
594
595	inode_inc_iversion(inode);
596	inode->i_mtime = inode->i_atime = EXFAT_I(inode)->i_crtime = inode_set_ctime_current(inode);
597	exfat_truncate_atime(&inode->i_atime);
598	/* timestamp is already written, so mark_inode_dirty() is unneeded. */
599
600	d_instantiate(dentry, inode);
601unlock:
602	mutex_unlock(&EXFAT_SB(sb)->s_lock);
603	return err;
604}
605
606/* lookup a file */
607static int exfat_find(struct inode *dir, struct qstr *qname,
608		struct exfat_dir_entry *info)
609{
610	int ret, dentry, count;
611	struct exfat_chain cdir;
612	struct exfat_uni_name uni_name;
613	struct super_block *sb = dir->i_sb;
614	struct exfat_sb_info *sbi = EXFAT_SB(sb);
615	struct exfat_inode_info *ei = EXFAT_I(dir);
616	struct exfat_dentry *ep, *ep2;
617	struct exfat_entry_set_cache es;
618	/* for optimized dir & entry to prevent long traverse of cluster chain */
619	struct exfat_hint hint_opt;
620
621	if (qname->len == 0)
622		return -ENOENT;
623
624	/* check the validity of directory name in the given pathname */
625	ret = exfat_resolve_path_for_lookup(dir, qname->name, &cdir, &uni_name);
626	if (ret)
627		return ret;
628
629	/* check the validation of hint_stat and initialize it if required */
630	if (ei->version != (inode_peek_iversion_raw(dir) & 0xffffffff)) {
631		ei->hint_stat.clu = cdir.dir;
632		ei->hint_stat.eidx = 0;
633		ei->version = (inode_peek_iversion_raw(dir) & 0xffffffff);
634		ei->hint_femp.eidx = EXFAT_HINT_NONE;
635	}
636
637	/* search the file name for directories */
638	dentry = exfat_find_dir_entry(sb, ei, &cdir, &uni_name, &hint_opt);
639	if (dentry < 0)
640		return dentry; /* -error value */
641
642	info->dir = cdir;
643	info->entry = dentry;
644	info->num_subdirs = 0;
645
646	/* adjust cdir to the optimized value */
647	cdir.dir = hint_opt.clu;
648	if (cdir.flags & ALLOC_NO_FAT_CHAIN)
649		cdir.size -= dentry / sbi->dentries_per_clu;
650	dentry = hint_opt.eidx;
651	if (exfat_get_dentry_set(&es, sb, &cdir, dentry, ES_2_ENTRIES))
652		return -EIO;
653	ep = exfat_get_dentry_cached(&es, ES_IDX_FILE);
654	ep2 = exfat_get_dentry_cached(&es, ES_IDX_STREAM);
655
656	info->type = exfat_get_entry_type(ep);
657	info->attr = le16_to_cpu(ep->dentry.file.attr);
658	info->size = le64_to_cpu(ep2->dentry.stream.valid_size);
659	if (info->size == 0) {
660		info->flags = ALLOC_NO_FAT_CHAIN;
661		info->start_clu = EXFAT_EOF_CLUSTER;
662	} else {
663		info->flags = ep2->dentry.stream.flags;
664		info->start_clu =
665			le32_to_cpu(ep2->dentry.stream.start_clu);
666	}
667
668	exfat_get_entry_time(sbi, &info->crtime,
669			     ep->dentry.file.create_tz,
670			     ep->dentry.file.create_time,
671			     ep->dentry.file.create_date,
672			     ep->dentry.file.create_time_cs);
673	exfat_get_entry_time(sbi, &info->mtime,
674			     ep->dentry.file.modify_tz,
675			     ep->dentry.file.modify_time,
676			     ep->dentry.file.modify_date,
677			     ep->dentry.file.modify_time_cs);
678	exfat_get_entry_time(sbi, &info->atime,
679			     ep->dentry.file.access_tz,
680			     ep->dentry.file.access_time,
681			     ep->dentry.file.access_date,
682			     0);
683	exfat_put_dentry_set(&es, false);
684
685	if (ei->start_clu == EXFAT_FREE_CLUSTER) {
686		exfat_fs_error(sb,
687			       "non-zero size file starts with zero cluster (size : %llu, p_dir : %u, entry : 0x%08x)",
688			       i_size_read(dir), ei->dir.dir, ei->entry);
689		return -EIO;
690	}
691
692	if (info->type == TYPE_DIR) {
693		exfat_chain_set(&cdir, info->start_clu,
694				EXFAT_B_TO_CLU(info->size, sbi), info->flags);
695		count = exfat_count_dir_entries(sb, &cdir);
696		if (count < 0)
697			return -EIO;
698
699		info->num_subdirs = count + EXFAT_MIN_SUBDIR;
700	}
701	return 0;
702}
703
704static int exfat_d_anon_disconn(struct dentry *dentry)
705{
706	return IS_ROOT(dentry) && (dentry->d_flags & DCACHE_DISCONNECTED);
707}
708
709static struct dentry *exfat_lookup(struct inode *dir, struct dentry *dentry,
710		unsigned int flags)
711{
712	struct super_block *sb = dir->i_sb;
713	struct inode *inode;
714	struct dentry *alias;
715	struct exfat_dir_entry info;
716	int err;
717	loff_t i_pos;
718	mode_t i_mode;
719
720	mutex_lock(&EXFAT_SB(sb)->s_lock);
721	err = exfat_find(dir, &dentry->d_name, &info);
722	if (err) {
723		if (err == -ENOENT) {
724			inode = NULL;
725			goto out;
726		}
727		goto unlock;
728	}
729
730	i_pos = exfat_make_i_pos(&info);
731	inode = exfat_build_inode(sb, &info, i_pos);
732	err = PTR_ERR_OR_ZERO(inode);
733	if (err)
734		goto unlock;
735
736	i_mode = inode->i_mode;
737	alias = d_find_alias(inode);
738
739	/*
740	 * Checking "alias->d_parent == dentry->d_parent" to make sure
741	 * FS is not corrupted (especially double linked dir).
742	 */
743	if (alias && alias->d_parent == dentry->d_parent &&
744			!exfat_d_anon_disconn(alias)) {
745
746		/*
747		 * Unhashed alias is able to exist because of revalidate()
748		 * called by lookup_fast. You can easily make this status
749		 * by calling create and lookup concurrently
750		 * In such case, we reuse an alias instead of new dentry
751		 */
752		if (d_unhashed(alias)) {
753			WARN_ON(alias->d_name.hash_len !=
754				dentry->d_name.hash_len);
755			exfat_info(sb, "rehashed a dentry(%p) in read lookup",
756				   alias);
757			d_drop(dentry);
758			d_rehash(alias);
759		} else if (!S_ISDIR(i_mode)) {
760			/*
761			 * This inode has non anonymous-DCACHE_DISCONNECTED
762			 * dentry. This means, the user did ->lookup() by an
763			 * another name (longname vs 8.3 alias of it) in past.
764			 *
765			 * Switch to new one for reason of locality if possible.
766			 */
767			d_move(alias, dentry);
768		}
769		iput(inode);
770		mutex_unlock(&EXFAT_SB(sb)->s_lock);
771		return alias;
772	}
773	dput(alias);
774out:
775	mutex_unlock(&EXFAT_SB(sb)->s_lock);
776	if (!inode)
777		exfat_d_version_set(dentry, inode_query_iversion(dir));
778
779	return d_splice_alias(inode, dentry);
780unlock:
781	mutex_unlock(&EXFAT_SB(sb)->s_lock);
782	return ERR_PTR(err);
783}
784
785/* remove an entry, BUT don't truncate */
786static int exfat_unlink(struct inode *dir, struct dentry *dentry)
787{
788	struct exfat_chain cdir;
789	struct exfat_dentry *ep;
790	struct super_block *sb = dir->i_sb;
791	struct inode *inode = dentry->d_inode;
792	struct exfat_inode_info *ei = EXFAT_I(inode);
793	struct buffer_head *bh;
794	int num_entries, entry, err = 0;
795
796	mutex_lock(&EXFAT_SB(sb)->s_lock);
797	exfat_chain_dup(&cdir, &ei->dir);
798	entry = ei->entry;
799	if (ei->dir.dir == DIR_DELETED) {
800		exfat_err(sb, "abnormal access to deleted dentry");
801		err = -ENOENT;
802		goto unlock;
803	}
804
805	ep = exfat_get_dentry(sb, &cdir, entry, &bh);
806	if (!ep) {
807		err = -EIO;
808		goto unlock;
809	}
810	num_entries = exfat_count_ext_entries(sb, &cdir, entry, ep);
811	if (num_entries < 0) {
812		err = -EIO;
813		brelse(bh);
814		goto unlock;
815	}
816	num_entries++;
817	brelse(bh);
818
819	exfat_set_volume_dirty(sb);
820	/* update the directory entry */
821	if (exfat_remove_entries(dir, &cdir, entry, 0, num_entries)) {
822		err = -EIO;
823		goto unlock;
824	}
825
826	/* This doesn't modify ei */
827	ei->dir.dir = DIR_DELETED;
828
829	inode_inc_iversion(dir);
830	dir->i_mtime = dir->i_atime = inode_set_ctime_current(dir);
831	exfat_truncate_atime(&dir->i_atime);
832	if (IS_DIRSYNC(dir))
833		exfat_sync_inode(dir);
834	else
835		mark_inode_dirty(dir);
836
837	clear_nlink(inode);
838	inode->i_mtime = inode->i_atime = inode_set_ctime_current(inode);
839	exfat_truncate_atime(&inode->i_atime);
840	exfat_unhash_inode(inode);
841	exfat_d_version_set(dentry, inode_query_iversion(dir));
842unlock:
843	mutex_unlock(&EXFAT_SB(sb)->s_lock);
844	return err;
845}
846
847static int exfat_mkdir(struct mnt_idmap *idmap, struct inode *dir,
848		       struct dentry *dentry, umode_t mode)
849{
850	struct super_block *sb = dir->i_sb;
851	struct inode *inode;
852	struct exfat_dir_entry info;
853	struct exfat_chain cdir;
854	loff_t i_pos;
855	int err;
856
857	mutex_lock(&EXFAT_SB(sb)->s_lock);
858	exfat_set_volume_dirty(sb);
859	err = exfat_add_entry(dir, dentry->d_name.name, &cdir, TYPE_DIR,
860		&info);
861	if (err)
862		goto unlock;
863
864	inode_inc_iversion(dir);
865	dir->i_mtime = inode_set_ctime_current(dir);
866	if (IS_DIRSYNC(dir))
867		exfat_sync_inode(dir);
868	else
869		mark_inode_dirty(dir);
870	inc_nlink(dir);
871
872	i_pos = exfat_make_i_pos(&info);
873	inode = exfat_build_inode(sb, &info, i_pos);
874	err = PTR_ERR_OR_ZERO(inode);
875	if (err)
876		goto unlock;
877
878	inode_inc_iversion(inode);
879	inode->i_mtime = inode->i_atime = EXFAT_I(inode)->i_crtime = inode_set_ctime_current(inode);
880	exfat_truncate_atime(&inode->i_atime);
881	/* timestamp is already written, so mark_inode_dirty() is unneeded. */
882
883	d_instantiate(dentry, inode);
884
885unlock:
886	mutex_unlock(&EXFAT_SB(sb)->s_lock);
887	return err;
888}
889
890static int exfat_check_dir_empty(struct super_block *sb,
891		struct exfat_chain *p_dir)
892{
893	int i, dentries_per_clu;
894	unsigned int type;
895	struct exfat_chain clu;
896	struct exfat_dentry *ep;
897	struct exfat_sb_info *sbi = EXFAT_SB(sb);
898	struct buffer_head *bh;
899
900	dentries_per_clu = sbi->dentries_per_clu;
901
902	if (p_dir->dir == EXFAT_EOF_CLUSTER)
903		return 0;
904
905	exfat_chain_dup(&clu, p_dir);
906
907	while (clu.dir != EXFAT_EOF_CLUSTER) {
908		for (i = 0; i < dentries_per_clu; i++) {
909			ep = exfat_get_dentry(sb, &clu, i, &bh);
910			if (!ep)
911				return -EIO;
912			type = exfat_get_entry_type(ep);
913			brelse(bh);
914			if (type == TYPE_UNUSED)
915				return 0;
916
917			if (type != TYPE_FILE && type != TYPE_DIR)
918				continue;
919
920			return -ENOTEMPTY;
921		}
922
923		if (clu.flags == ALLOC_NO_FAT_CHAIN) {
924			if (--clu.size > 0)
925				clu.dir++;
926			else
927				clu.dir = EXFAT_EOF_CLUSTER;
928		} else {
929			if (exfat_get_next_cluster(sb, &(clu.dir)))
930				return -EIO;
931		}
932	}
933
934	return 0;
935}
936
937static int exfat_rmdir(struct inode *dir, struct dentry *dentry)
938{
939	struct inode *inode = dentry->d_inode;
940	struct exfat_dentry *ep;
941	struct exfat_chain cdir, clu_to_free;
942	struct super_block *sb = inode->i_sb;
943	struct exfat_sb_info *sbi = EXFAT_SB(sb);
944	struct exfat_inode_info *ei = EXFAT_I(inode);
945	struct buffer_head *bh;
946	int num_entries, entry, err;
947
948	mutex_lock(&EXFAT_SB(inode->i_sb)->s_lock);
949
950	exfat_chain_dup(&cdir, &ei->dir);
951	entry = ei->entry;
952
953	if (ei->dir.dir == DIR_DELETED) {
954		exfat_err(sb, "abnormal access to deleted dentry");
955		err = -ENOENT;
956		goto unlock;
957	}
958
959	exfat_chain_set(&clu_to_free, ei->start_clu,
960		EXFAT_B_TO_CLU_ROUND_UP(i_size_read(inode), sbi), ei->flags);
961
962	err = exfat_check_dir_empty(sb, &clu_to_free);
963	if (err) {
964		if (err == -EIO)
965			exfat_err(sb, "failed to exfat_check_dir_empty : err(%d)",
966				  err);
967		goto unlock;
968	}
969
970	ep = exfat_get_dentry(sb, &cdir, entry, &bh);
971	if (!ep) {
972		err = -EIO;
973		goto unlock;
974	}
975
976	num_entries = exfat_count_ext_entries(sb, &cdir, entry, ep);
977	if (num_entries < 0) {
978		err = -EIO;
979		brelse(bh);
980		goto unlock;
981	}
982	num_entries++;
983	brelse(bh);
984
985	exfat_set_volume_dirty(sb);
986	err = exfat_remove_entries(dir, &cdir, entry, 0, num_entries);
987	if (err) {
988		exfat_err(sb, "failed to exfat_remove_entries : err(%d)", err);
989		goto unlock;
990	}
991	ei->dir.dir = DIR_DELETED;
992
993	inode_inc_iversion(dir);
994	dir->i_mtime = dir->i_atime = inode_set_ctime_current(dir);
995	exfat_truncate_atime(&dir->i_atime);
996	if (IS_DIRSYNC(dir))
997		exfat_sync_inode(dir);
998	else
999		mark_inode_dirty(dir);
1000	drop_nlink(dir);
1001
1002	clear_nlink(inode);
1003	inode->i_mtime = inode->i_atime = inode_set_ctime_current(inode);
1004	exfat_truncate_atime(&inode->i_atime);
1005	exfat_unhash_inode(inode);
1006	exfat_d_version_set(dentry, inode_query_iversion(dir));
1007unlock:
1008	mutex_unlock(&EXFAT_SB(inode->i_sb)->s_lock);
1009	return err;
1010}
1011
1012static int exfat_rename_file(struct inode *inode, struct exfat_chain *p_dir,
1013		int oldentry, struct exfat_uni_name *p_uniname,
1014		struct exfat_inode_info *ei)
1015{
1016	int ret, num_old_entries, num_new_entries;
1017	struct exfat_dentry *epold, *epnew;
1018	struct super_block *sb = inode->i_sb;
1019	struct buffer_head *new_bh, *old_bh;
1020	int sync = IS_DIRSYNC(inode);
1021
1022	epold = exfat_get_dentry(sb, p_dir, oldentry, &old_bh);
1023	if (!epold)
1024		return -EIO;
1025
1026	num_old_entries = exfat_count_ext_entries(sb, p_dir, oldentry, epold);
1027	if (num_old_entries < 0)
1028		return -EIO;
1029	num_old_entries++;
1030
1031	num_new_entries = exfat_calc_num_entries(p_uniname);
1032	if (num_new_entries < 0)
1033		return num_new_entries;
1034
1035	if (num_old_entries < num_new_entries) {
1036		int newentry;
1037
1038		newentry =
1039			exfat_find_empty_entry(inode, p_dir, num_new_entries);
1040		if (newentry < 0)
1041			return newentry; /* -EIO or -ENOSPC */
1042
1043		epnew = exfat_get_dentry(sb, p_dir, newentry, &new_bh);
1044		if (!epnew)
1045			return -EIO;
1046
1047		*epnew = *epold;
1048		if (exfat_get_entry_type(epnew) == TYPE_FILE) {
1049			epnew->dentry.file.attr |= cpu_to_le16(ATTR_ARCHIVE);
1050			ei->attr |= ATTR_ARCHIVE;
1051		}
1052		exfat_update_bh(new_bh, sync);
1053		brelse(old_bh);
1054		brelse(new_bh);
1055
1056		epold = exfat_get_dentry(sb, p_dir, oldentry + 1, &old_bh);
1057		if (!epold)
1058			return -EIO;
1059		epnew = exfat_get_dentry(sb, p_dir, newentry + 1, &new_bh);
1060		if (!epnew) {
1061			brelse(old_bh);
1062			return -EIO;
1063		}
1064
1065		*epnew = *epold;
1066		exfat_update_bh(new_bh, sync);
1067		brelse(old_bh);
1068		brelse(new_bh);
1069
1070		ret = exfat_init_ext_entry(inode, p_dir, newentry,
1071			num_new_entries, p_uniname);
1072		if (ret)
1073			return ret;
1074
1075		exfat_remove_entries(inode, p_dir, oldentry, 0,
1076			num_old_entries);
1077		ei->dir = *p_dir;
1078		ei->entry = newentry;
1079	} else {
1080		if (exfat_get_entry_type(epold) == TYPE_FILE) {
1081			epold->dentry.file.attr |= cpu_to_le16(ATTR_ARCHIVE);
1082			ei->attr |= ATTR_ARCHIVE;
1083		}
1084		exfat_update_bh(old_bh, sync);
1085		brelse(old_bh);
1086		ret = exfat_init_ext_entry(inode, p_dir, oldentry,
1087			num_new_entries, p_uniname);
1088		if (ret)
1089			return ret;
1090
1091		exfat_remove_entries(inode, p_dir, oldentry, num_new_entries,
1092			num_old_entries);
1093	}
1094	return 0;
1095}
1096
1097static int exfat_move_file(struct inode *inode, struct exfat_chain *p_olddir,
1098		int oldentry, struct exfat_chain *p_newdir,
1099		struct exfat_uni_name *p_uniname, struct exfat_inode_info *ei)
1100{
1101	int ret, newentry, num_new_entries, num_old_entries;
1102	struct exfat_dentry *epmov, *epnew;
1103	struct super_block *sb = inode->i_sb;
1104	struct buffer_head *mov_bh, *new_bh;
1105
1106	epmov = exfat_get_dentry(sb, p_olddir, oldentry, &mov_bh);
1107	if (!epmov)
1108		return -EIO;
1109
1110	num_old_entries = exfat_count_ext_entries(sb, p_olddir, oldentry,
1111		epmov);
1112	if (num_old_entries < 0)
1113		return -EIO;
1114	num_old_entries++;
1115
1116	num_new_entries = exfat_calc_num_entries(p_uniname);
1117	if (num_new_entries < 0)
1118		return num_new_entries;
1119
1120	newentry = exfat_find_empty_entry(inode, p_newdir, num_new_entries);
1121	if (newentry < 0)
1122		return newentry; /* -EIO or -ENOSPC */
1123
1124	epnew = exfat_get_dentry(sb, p_newdir, newentry, &new_bh);
1125	if (!epnew)
1126		return -EIO;
1127
1128	*epnew = *epmov;
1129	if (exfat_get_entry_type(epnew) == TYPE_FILE) {
1130		epnew->dentry.file.attr |= cpu_to_le16(ATTR_ARCHIVE);
1131		ei->attr |= ATTR_ARCHIVE;
1132	}
1133	exfat_update_bh(new_bh, IS_DIRSYNC(inode));
1134	brelse(mov_bh);
1135	brelse(new_bh);
1136
1137	epmov = exfat_get_dentry(sb, p_olddir, oldentry + 1, &mov_bh);
1138	if (!epmov)
1139		return -EIO;
1140	epnew = exfat_get_dentry(sb, p_newdir, newentry + 1, &new_bh);
1141	if (!epnew) {
1142		brelse(mov_bh);
1143		return -EIO;
1144	}
1145
1146	*epnew = *epmov;
1147	exfat_update_bh(new_bh, IS_DIRSYNC(inode));
1148	brelse(mov_bh);
1149	brelse(new_bh);
1150
1151	ret = exfat_init_ext_entry(inode, p_newdir, newentry, num_new_entries,
1152		p_uniname);
1153	if (ret)
1154		return ret;
1155
1156	exfat_remove_entries(inode, p_olddir, oldentry, 0, num_old_entries);
1157
1158	exfat_chain_set(&ei->dir, p_newdir->dir, p_newdir->size,
1159		p_newdir->flags);
1160
1161	ei->entry = newentry;
1162	return 0;
1163}
1164
1165/* rename or move a old file into a new file */
1166static int __exfat_rename(struct inode *old_parent_inode,
1167		struct exfat_inode_info *ei, struct inode *new_parent_inode,
1168		struct dentry *new_dentry)
1169{
1170	int ret;
1171	int dentry;
1172	struct exfat_chain olddir, newdir;
1173	struct exfat_chain *p_dir = NULL;
1174	struct exfat_uni_name uni_name;
1175	struct exfat_dentry *ep;
1176	struct super_block *sb = old_parent_inode->i_sb;
1177	struct exfat_sb_info *sbi = EXFAT_SB(sb);
1178	const unsigned char *new_path = new_dentry->d_name.name;
1179	struct inode *new_inode = new_dentry->d_inode;
1180	int num_entries;
1181	struct exfat_inode_info *new_ei = NULL;
1182	unsigned int new_entry_type = TYPE_UNUSED;
1183	int new_entry = 0;
1184	struct buffer_head *new_bh = NULL;
1185
1186	/* check the validity of pointer parameters */
1187	if (new_path == NULL || strlen(new_path) == 0)
1188		return -EINVAL;
1189
1190	if (ei->dir.dir == DIR_DELETED) {
1191		exfat_err(sb, "abnormal access to deleted source dentry");
1192		return -ENOENT;
1193	}
1194
1195	exfat_chain_set(&olddir, EXFAT_I(old_parent_inode)->start_clu,
1196		EXFAT_B_TO_CLU_ROUND_UP(i_size_read(old_parent_inode), sbi),
1197		EXFAT_I(old_parent_inode)->flags);
1198	dentry = ei->entry;
1199
1200	/* check whether new dir is existing directory and empty */
1201	if (new_inode) {
1202		ret = -EIO;
1203		new_ei = EXFAT_I(new_inode);
1204
1205		if (new_ei->dir.dir == DIR_DELETED) {
1206			exfat_err(sb, "abnormal access to deleted target dentry");
1207			goto out;
1208		}
1209
1210		p_dir = &(new_ei->dir);
1211		new_entry = new_ei->entry;
1212		ep = exfat_get_dentry(sb, p_dir, new_entry, &new_bh);
1213		if (!ep)
1214			goto out;
1215
1216		new_entry_type = exfat_get_entry_type(ep);
1217		brelse(new_bh);
1218
1219		/* if new_inode exists, update ei */
1220		if (new_entry_type == TYPE_DIR) {
1221			struct exfat_chain new_clu;
1222
1223			new_clu.dir = new_ei->start_clu;
1224			new_clu.size =
1225				EXFAT_B_TO_CLU_ROUND_UP(i_size_read(new_inode),
1226				sbi);
1227			new_clu.flags = new_ei->flags;
1228
1229			ret = exfat_check_dir_empty(sb, &new_clu);
1230			if (ret)
1231				goto out;
1232		}
1233	}
1234
1235	/* check the validity of directory name in the given new pathname */
1236	ret = exfat_resolve_path(new_parent_inode, new_path, &newdir,
1237			&uni_name);
1238	if (ret)
1239		goto out;
1240
1241	exfat_set_volume_dirty(sb);
1242
1243	if (olddir.dir == newdir.dir)
1244		ret = exfat_rename_file(new_parent_inode, &olddir, dentry,
1245				&uni_name, ei);
1246	else
1247		ret = exfat_move_file(new_parent_inode, &olddir, dentry,
1248				&newdir, &uni_name, ei);
1249
1250	if (!ret && new_inode) {
1251		/* delete entries of new_dir */
1252		ep = exfat_get_dentry(sb, p_dir, new_entry, &new_bh);
1253		if (!ep) {
1254			ret = -EIO;
1255			goto del_out;
1256		}
1257
1258		num_entries = exfat_count_ext_entries(sb, p_dir, new_entry, ep);
1259		if (num_entries < 0) {
1260			ret = -EIO;
1261			goto del_out;
1262		}
1263		brelse(new_bh);
1264
1265		if (exfat_remove_entries(new_inode, p_dir, new_entry, 0,
1266				num_entries + 1)) {
1267			ret = -EIO;
1268			goto del_out;
1269		}
1270
1271		/* Free the clusters if new_inode is a dir(as if exfat_rmdir) */
1272		if (new_entry_type == TYPE_DIR &&
1273		    new_ei->start_clu != EXFAT_EOF_CLUSTER) {
1274			/* new_ei, new_clu_to_free */
1275			struct exfat_chain new_clu_to_free;
1276
1277			exfat_chain_set(&new_clu_to_free, new_ei->start_clu,
1278				EXFAT_B_TO_CLU_ROUND_UP(i_size_read(new_inode),
1279				sbi), new_ei->flags);
1280
1281			if (exfat_free_cluster(new_inode, &new_clu_to_free)) {
1282				/* just set I/O error only */
1283				ret = -EIO;
1284			}
1285
1286			i_size_write(new_inode, 0);
1287			new_ei->start_clu = EXFAT_EOF_CLUSTER;
1288			new_ei->flags = ALLOC_NO_FAT_CHAIN;
1289		}
1290del_out:
1291		/* Update new_inode ei
1292		 * Prevent syncing removed new_inode
1293		 * (new_ei is already initialized above code ("if (new_inode)")
1294		 */
1295		new_ei->dir.dir = DIR_DELETED;
1296	}
1297out:
1298	return ret;
1299}
1300
1301static int exfat_rename(struct mnt_idmap *idmap,
1302			struct inode *old_dir, struct dentry *old_dentry,
1303			struct inode *new_dir, struct dentry *new_dentry,
1304			unsigned int flags)
1305{
1306	struct inode *old_inode, *new_inode;
1307	struct super_block *sb = old_dir->i_sb;
1308	loff_t i_pos;
1309	int err;
1310
1311	/*
1312	 * The VFS already checks for existence, so for local filesystems
1313	 * the RENAME_NOREPLACE implementation is equivalent to plain rename.
1314	 * Don't support any other flags
1315	 */
1316	if (flags & ~RENAME_NOREPLACE)
1317		return -EINVAL;
1318
1319	mutex_lock(&EXFAT_SB(sb)->s_lock);
1320	old_inode = old_dentry->d_inode;
1321	new_inode = new_dentry->d_inode;
1322
1323	err = __exfat_rename(old_dir, EXFAT_I(old_inode), new_dir, new_dentry);
1324	if (err)
1325		goto unlock;
1326
1327	inode_inc_iversion(new_dir);
1328	simple_rename_timestamp(old_dir, old_dentry, new_dir, new_dentry);
1329	EXFAT_I(new_dir)->i_crtime = current_time(new_dir);
1330	exfat_truncate_atime(&new_dir->i_atime);
1331	if (IS_DIRSYNC(new_dir))
1332		exfat_sync_inode(new_dir);
1333	else
1334		mark_inode_dirty(new_dir);
1335
1336	i_pos = ((loff_t)EXFAT_I(old_inode)->dir.dir << 32) |
1337		(EXFAT_I(old_inode)->entry & 0xffffffff);
1338	exfat_unhash_inode(old_inode);
1339	exfat_hash_inode(old_inode, i_pos);
1340	if (IS_DIRSYNC(new_dir))
1341		exfat_sync_inode(old_inode);
1342	else
1343		mark_inode_dirty(old_inode);
1344
1345	if (S_ISDIR(old_inode->i_mode) && old_dir != new_dir) {
1346		drop_nlink(old_dir);
1347		if (!new_inode)
1348			inc_nlink(new_dir);
1349	}
1350
1351	inode_inc_iversion(old_dir);
1352	if (IS_DIRSYNC(old_dir))
1353		exfat_sync_inode(old_dir);
1354	else
1355		mark_inode_dirty(old_dir);
1356
1357	if (new_inode) {
1358		exfat_unhash_inode(new_inode);
1359
1360		/* skip drop_nlink if new_inode already has been dropped */
1361		if (new_inode->i_nlink) {
1362			drop_nlink(new_inode);
1363			if (S_ISDIR(new_inode->i_mode))
1364				drop_nlink(new_inode);
1365		} else {
1366			exfat_warn(sb, "abnormal access to an inode dropped");
1367			WARN_ON(new_inode->i_nlink == 0);
1368		}
1369		EXFAT_I(new_inode)->i_crtime = current_time(new_inode);
1370	}
1371
1372unlock:
1373	mutex_unlock(&EXFAT_SB(sb)->s_lock);
1374	return err;
1375}
1376
1377const struct inode_operations exfat_dir_inode_operations = {
1378	.create		= exfat_create,
1379	.lookup		= exfat_lookup,
1380	.unlink		= exfat_unlink,
1381	.mkdir		= exfat_mkdir,
1382	.rmdir		= exfat_rmdir,
1383	.rename		= exfat_rename,
1384	.setattr	= exfat_setattr,
1385	.getattr	= exfat_getattr,
1386};
1387