xref: /openbmc/linux/fs/exfat/inode.c (revision 21ab7031)
1 // SPDX-License-Identifier: GPL-2.0-or-later
2 /*
3  * Copyright (C) 2012-2013 Samsung Electronics Co., Ltd.
4  */
5 
6 #include <linux/init.h>
7 #include <linux/buffer_head.h>
8 #include <linux/mpage.h>
9 #include <linux/bio.h>
10 #include <linux/blkdev.h>
11 #include <linux/time.h>
12 #include <linux/writeback.h>
13 #include <linux/uio.h>
14 #include <linux/random.h>
15 #include <linux/iversion.h>
16 
17 #include "exfat_raw.h"
18 #include "exfat_fs.h"
19 
20 int __exfat_write_inode(struct inode *inode, int sync)
21 {
22 	unsigned long long on_disk_size;
23 	struct exfat_dentry *ep, *ep2;
24 	struct exfat_entry_set_cache es;
25 	struct super_block *sb = inode->i_sb;
26 	struct exfat_sb_info *sbi = EXFAT_SB(sb);
27 	struct exfat_inode_info *ei = EXFAT_I(inode);
28 	bool is_dir = (ei->type == TYPE_DIR) ? true : false;
29 
30 	if (inode->i_ino == EXFAT_ROOT_INO)
31 		return 0;
32 
33 	/*
34 	 * If the inode is already unlinked, there is no need for updating it.
35 	 */
36 	if (ei->dir.dir == DIR_DELETED)
37 		return 0;
38 
39 	if (is_dir && ei->dir.dir == sbi->root_dir && ei->entry == -1)
40 		return 0;
41 
42 	exfat_set_volume_dirty(sb);
43 
44 	/* get the directory entry of given file or directory */
45 	if (exfat_get_dentry_set(&es, sb, &(ei->dir), ei->entry, ES_ALL_ENTRIES))
46 		return -EIO;
47 	ep = exfat_get_dentry_cached(&es, ES_IDX_FILE);
48 	ep2 = exfat_get_dentry_cached(&es, ES_IDX_STREAM);
49 
50 	ep->dentry.file.attr = cpu_to_le16(exfat_make_attr(inode));
51 
52 	/* set FILE_INFO structure using the acquired struct exfat_dentry */
53 	exfat_set_entry_time(sbi, &ei->i_crtime,
54 			&ep->dentry.file.create_tz,
55 			&ep->dentry.file.create_time,
56 			&ep->dentry.file.create_date,
57 			&ep->dentry.file.create_time_cs);
58 	exfat_set_entry_time(sbi, &inode->i_mtime,
59 			&ep->dentry.file.modify_tz,
60 			&ep->dentry.file.modify_time,
61 			&ep->dentry.file.modify_date,
62 			&ep->dentry.file.modify_time_cs);
63 	exfat_set_entry_time(sbi, &inode->i_atime,
64 			&ep->dentry.file.access_tz,
65 			&ep->dentry.file.access_time,
66 			&ep->dentry.file.access_date,
67 			NULL);
68 
69 	/* File size should be zero if there is no cluster allocated */
70 	on_disk_size = i_size_read(inode);
71 
72 	if (ei->start_clu == EXFAT_EOF_CLUSTER)
73 		on_disk_size = 0;
74 
75 	ep2->dentry.stream.valid_size = cpu_to_le64(on_disk_size);
76 	ep2->dentry.stream.size = ep2->dentry.stream.valid_size;
77 	if (on_disk_size) {
78 		ep2->dentry.stream.flags = ei->flags;
79 		ep2->dentry.stream.start_clu = cpu_to_le32(ei->start_clu);
80 	} else {
81 		ep2->dentry.stream.flags = ALLOC_FAT_CHAIN;
82 		ep2->dentry.stream.start_clu = EXFAT_FREE_CLUSTER;
83 	}
84 
85 	exfat_update_dir_chksum_with_entry_set(&es);
86 	return exfat_put_dentry_set(&es, sync);
87 }
88 
89 int exfat_write_inode(struct inode *inode, struct writeback_control *wbc)
90 {
91 	int ret;
92 
93 	mutex_lock(&EXFAT_SB(inode->i_sb)->s_lock);
94 	ret = __exfat_write_inode(inode, wbc->sync_mode == WB_SYNC_ALL);
95 	mutex_unlock(&EXFAT_SB(inode->i_sb)->s_lock);
96 
97 	return ret;
98 }
99 
100 void exfat_sync_inode(struct inode *inode)
101 {
102 	lockdep_assert_held(&EXFAT_SB(inode->i_sb)->s_lock);
103 	__exfat_write_inode(inode, 1);
104 }
105 
106 /*
107  * Input: inode, (logical) clu_offset, target allocation area
108  * Output: errcode, cluster number
109  * *clu = (~0), if it's unable to allocate a new cluster
110  */
111 static int exfat_map_cluster(struct inode *inode, unsigned int clu_offset,
112 		unsigned int *clu, int create)
113 {
114 	int ret;
115 	unsigned int last_clu;
116 	struct exfat_chain new_clu;
117 	struct super_block *sb = inode->i_sb;
118 	struct exfat_sb_info *sbi = EXFAT_SB(sb);
119 	struct exfat_inode_info *ei = EXFAT_I(inode);
120 	unsigned int local_clu_offset = clu_offset;
121 	unsigned int num_to_be_allocated = 0, num_clusters = 0;
122 
123 	if (ei->i_size_ondisk > 0)
124 		num_clusters =
125 			EXFAT_B_TO_CLU_ROUND_UP(ei->i_size_ondisk, sbi);
126 
127 	if (clu_offset >= num_clusters)
128 		num_to_be_allocated = clu_offset - num_clusters + 1;
129 
130 	if (!create && (num_to_be_allocated > 0)) {
131 		*clu = EXFAT_EOF_CLUSTER;
132 		return 0;
133 	}
134 
135 	*clu = last_clu = ei->start_clu;
136 
137 	if (ei->flags == ALLOC_NO_FAT_CHAIN) {
138 		if (clu_offset > 0 && *clu != EXFAT_EOF_CLUSTER) {
139 			last_clu += clu_offset - 1;
140 
141 			if (clu_offset == num_clusters)
142 				*clu = EXFAT_EOF_CLUSTER;
143 			else
144 				*clu += clu_offset;
145 		}
146 	} else if (ei->type == TYPE_FILE) {
147 		unsigned int fclus = 0;
148 		int err = exfat_get_cluster(inode, clu_offset,
149 				&fclus, clu, &last_clu, 1);
150 		if (err)
151 			return -EIO;
152 
153 		clu_offset -= fclus;
154 	} else {
155 		/* hint information */
156 		if (clu_offset > 0 && ei->hint_bmap.off != EXFAT_EOF_CLUSTER &&
157 		    ei->hint_bmap.off > 0 && clu_offset >= ei->hint_bmap.off) {
158 			clu_offset -= ei->hint_bmap.off;
159 			/* hint_bmap.clu should be valid */
160 			WARN_ON(ei->hint_bmap.clu < 2);
161 			*clu = ei->hint_bmap.clu;
162 		}
163 
164 		while (clu_offset > 0 && *clu != EXFAT_EOF_CLUSTER) {
165 			last_clu = *clu;
166 			if (exfat_get_next_cluster(sb, clu))
167 				return -EIO;
168 			clu_offset--;
169 		}
170 	}
171 
172 	if (*clu == EXFAT_EOF_CLUSTER) {
173 		exfat_set_volume_dirty(sb);
174 
175 		new_clu.dir = (last_clu == EXFAT_EOF_CLUSTER) ?
176 				EXFAT_EOF_CLUSTER : last_clu + 1;
177 		new_clu.size = 0;
178 		new_clu.flags = ei->flags;
179 
180 		/* allocate a cluster */
181 		if (num_to_be_allocated < 1) {
182 			/* Broken FAT (i_sze > allocated FAT) */
183 			exfat_fs_error(sb, "broken FAT chain.");
184 			return -EIO;
185 		}
186 
187 		ret = exfat_alloc_cluster(inode, num_to_be_allocated, &new_clu,
188 				inode_needs_sync(inode));
189 		if (ret)
190 			return ret;
191 
192 		if (new_clu.dir == EXFAT_EOF_CLUSTER ||
193 		    new_clu.dir == EXFAT_FREE_CLUSTER) {
194 			exfat_fs_error(sb,
195 				"bogus cluster new allocated (last_clu : %u, new_clu : %u)",
196 				last_clu, new_clu.dir);
197 			return -EIO;
198 		}
199 
200 		/* append to the FAT chain */
201 		if (last_clu == EXFAT_EOF_CLUSTER) {
202 			if (new_clu.flags == ALLOC_FAT_CHAIN)
203 				ei->flags = ALLOC_FAT_CHAIN;
204 			ei->start_clu = new_clu.dir;
205 		} else {
206 			if (new_clu.flags != ei->flags) {
207 				/* no-fat-chain bit is disabled,
208 				 * so fat-chain should be synced with
209 				 * alloc-bitmap
210 				 */
211 				exfat_chain_cont_cluster(sb, ei->start_clu,
212 					num_clusters);
213 				ei->flags = ALLOC_FAT_CHAIN;
214 			}
215 			if (new_clu.flags == ALLOC_FAT_CHAIN)
216 				if (exfat_ent_set(sb, last_clu, new_clu.dir))
217 					return -EIO;
218 		}
219 
220 		num_clusters += num_to_be_allocated;
221 		*clu = new_clu.dir;
222 
223 		inode->i_blocks +=
224 			num_to_be_allocated << sbi->sect_per_clus_bits;
225 
226 		/*
227 		 * Move *clu pointer along FAT chains (hole care) because the
228 		 * caller of this function expect *clu to be the last cluster.
229 		 * This only works when num_to_be_allocated >= 2,
230 		 * *clu = (the first cluster of the allocated chain) =>
231 		 * (the last cluster of ...)
232 		 */
233 		if (ei->flags == ALLOC_NO_FAT_CHAIN) {
234 			*clu += num_to_be_allocated - 1;
235 		} else {
236 			while (num_to_be_allocated > 1) {
237 				if (exfat_get_next_cluster(sb, clu))
238 					return -EIO;
239 				num_to_be_allocated--;
240 			}
241 		}
242 
243 	}
244 
245 	/* hint information */
246 	ei->hint_bmap.off = local_clu_offset;
247 	ei->hint_bmap.clu = *clu;
248 
249 	return 0;
250 }
251 
252 static int exfat_map_new_buffer(struct exfat_inode_info *ei,
253 		struct buffer_head *bh, loff_t pos)
254 {
255 	if (buffer_delay(bh) && pos > ei->i_size_aligned)
256 		return -EIO;
257 	set_buffer_new(bh);
258 
259 	/*
260 	 * Adjust i_size_aligned if i_size_ondisk is bigger than it.
261 	 */
262 	if (ei->i_size_ondisk > ei->i_size_aligned)
263 		ei->i_size_aligned = ei->i_size_ondisk;
264 	return 0;
265 }
266 
267 static int exfat_get_block(struct inode *inode, sector_t iblock,
268 		struct buffer_head *bh_result, int create)
269 {
270 	struct exfat_inode_info *ei = EXFAT_I(inode);
271 	struct super_block *sb = inode->i_sb;
272 	struct exfat_sb_info *sbi = EXFAT_SB(sb);
273 	unsigned long max_blocks = bh_result->b_size >> inode->i_blkbits;
274 	int err = 0;
275 	unsigned long mapped_blocks = 0;
276 	unsigned int cluster, sec_offset;
277 	sector_t last_block;
278 	sector_t phys = 0;
279 	loff_t pos;
280 
281 	mutex_lock(&sbi->s_lock);
282 	last_block = EXFAT_B_TO_BLK_ROUND_UP(i_size_read(inode), sb);
283 	if (iblock >= last_block && !create)
284 		goto done;
285 
286 	/* Is this block already allocated? */
287 	err = exfat_map_cluster(inode, iblock >> sbi->sect_per_clus_bits,
288 			&cluster, create);
289 	if (err) {
290 		if (err != -ENOSPC)
291 			exfat_fs_error_ratelimit(sb,
292 				"failed to bmap (inode : %p iblock : %llu, err : %d)",
293 				inode, (unsigned long long)iblock, err);
294 		goto unlock_ret;
295 	}
296 
297 	if (cluster == EXFAT_EOF_CLUSTER)
298 		goto done;
299 
300 	/* sector offset in cluster */
301 	sec_offset = iblock & (sbi->sect_per_clus - 1);
302 
303 	phys = exfat_cluster_to_sector(sbi, cluster) + sec_offset;
304 	mapped_blocks = sbi->sect_per_clus - sec_offset;
305 	max_blocks = min(mapped_blocks, max_blocks);
306 
307 	/* Treat newly added block / cluster */
308 	if (iblock < last_block)
309 		create = 0;
310 
311 	if (create || buffer_delay(bh_result)) {
312 		pos = EXFAT_BLK_TO_B((iblock + 1), sb);
313 		if (ei->i_size_ondisk < pos)
314 			ei->i_size_ondisk = pos;
315 	}
316 
317 	if (create) {
318 		err = exfat_map_new_buffer(ei, bh_result, pos);
319 		if (err) {
320 			exfat_fs_error(sb,
321 					"requested for bmap out of range(pos : (%llu) > i_size_aligned(%llu)\n",
322 					pos, ei->i_size_aligned);
323 			goto unlock_ret;
324 		}
325 	}
326 
327 	if (buffer_delay(bh_result))
328 		clear_buffer_delay(bh_result);
329 	map_bh(bh_result, sb, phys);
330 done:
331 	bh_result->b_size = EXFAT_BLK_TO_B(max_blocks, sb);
332 unlock_ret:
333 	mutex_unlock(&sbi->s_lock);
334 	return err;
335 }
336 
337 static int exfat_read_folio(struct file *file, struct folio *folio)
338 {
339 	return mpage_read_folio(folio, exfat_get_block);
340 }
341 
342 static void exfat_readahead(struct readahead_control *rac)
343 {
344 	mpage_readahead(rac, exfat_get_block);
345 }
346 
347 static int exfat_writepages(struct address_space *mapping,
348 		struct writeback_control *wbc)
349 {
350 	return mpage_writepages(mapping, wbc, exfat_get_block);
351 }
352 
353 static void exfat_write_failed(struct address_space *mapping, loff_t to)
354 {
355 	struct inode *inode = mapping->host;
356 
357 	if (to > i_size_read(inode)) {
358 		truncate_pagecache(inode, i_size_read(inode));
359 		inode->i_mtime = inode->i_ctime = current_time(inode);
360 		exfat_truncate(inode);
361 	}
362 }
363 
364 static int exfat_write_begin(struct file *file, struct address_space *mapping,
365 		loff_t pos, unsigned int len,
366 		struct page **pagep, void **fsdata)
367 {
368 	int ret;
369 
370 	*pagep = NULL;
371 	ret = cont_write_begin(file, mapping, pos, len, pagep, fsdata,
372 			       exfat_get_block,
373 			       &EXFAT_I(mapping->host)->i_size_ondisk);
374 
375 	if (ret < 0)
376 		exfat_write_failed(mapping, pos+len);
377 
378 	return ret;
379 }
380 
381 static int exfat_write_end(struct file *file, struct address_space *mapping,
382 		loff_t pos, unsigned int len, unsigned int copied,
383 		struct page *pagep, void *fsdata)
384 {
385 	struct inode *inode = mapping->host;
386 	struct exfat_inode_info *ei = EXFAT_I(inode);
387 	int err;
388 
389 	err = generic_write_end(file, mapping, pos, len, copied, pagep, fsdata);
390 
391 	if (ei->i_size_aligned < i_size_read(inode)) {
392 		exfat_fs_error(inode->i_sb,
393 			"invalid size(size(%llu) > aligned(%llu)\n",
394 			i_size_read(inode), ei->i_size_aligned);
395 		return -EIO;
396 	}
397 
398 	if (err < len)
399 		exfat_write_failed(mapping, pos+len);
400 
401 	if (!(err < 0) && !(ei->attr & ATTR_ARCHIVE)) {
402 		inode->i_mtime = inode->i_ctime = current_time(inode);
403 		ei->attr |= ATTR_ARCHIVE;
404 		mark_inode_dirty(inode);
405 	}
406 
407 	return err;
408 }
409 
410 static ssize_t exfat_direct_IO(struct kiocb *iocb, struct iov_iter *iter)
411 {
412 	struct address_space *mapping = iocb->ki_filp->f_mapping;
413 	struct inode *inode = mapping->host;
414 	loff_t size = iocb->ki_pos + iov_iter_count(iter);
415 	int rw = iov_iter_rw(iter);
416 	ssize_t ret;
417 
418 	if (rw == WRITE) {
419 		/*
420 		 * FIXME: blockdev_direct_IO() doesn't use ->write_begin(),
421 		 * so we need to update the ->i_size_aligned to block boundary.
422 		 *
423 		 * But we must fill the remaining area or hole by nul for
424 		 * updating ->i_size_aligned
425 		 *
426 		 * Return 0, and fallback to normal buffered write.
427 		 */
428 		if (EXFAT_I(inode)->i_size_aligned < size)
429 			return 0;
430 	}
431 
432 	/*
433 	 * Need to use the DIO_LOCKING for avoiding the race
434 	 * condition of exfat_get_block() and ->truncate().
435 	 */
436 	ret = blockdev_direct_IO(iocb, inode, iter, exfat_get_block);
437 	if (ret < 0 && (rw & WRITE))
438 		exfat_write_failed(mapping, size);
439 	return ret;
440 }
441 
442 static sector_t exfat_aop_bmap(struct address_space *mapping, sector_t block)
443 {
444 	sector_t blocknr;
445 
446 	/* exfat_get_cluster() assumes the requested blocknr isn't truncated. */
447 	down_read(&EXFAT_I(mapping->host)->truncate_lock);
448 	blocknr = generic_block_bmap(mapping, block, exfat_get_block);
449 	up_read(&EXFAT_I(mapping->host)->truncate_lock);
450 	return blocknr;
451 }
452 
453 /*
454  * exfat_block_truncate_page() zeroes out a mapping from file offset `from'
455  * up to the end of the block which corresponds to `from'.
456  * This is required during truncate to physically zeroout the tail end
457  * of that block so it doesn't yield old data if the file is later grown.
458  * Also, avoid causing failure from fsx for cases of "data past EOF"
459  */
460 int exfat_block_truncate_page(struct inode *inode, loff_t from)
461 {
462 	return block_truncate_page(inode->i_mapping, from, exfat_get_block);
463 }
464 
465 static const struct address_space_operations exfat_aops = {
466 	.dirty_folio	= block_dirty_folio,
467 	.invalidate_folio = block_invalidate_folio,
468 	.read_folio	= exfat_read_folio,
469 	.readahead	= exfat_readahead,
470 	.writepages	= exfat_writepages,
471 	.write_begin	= exfat_write_begin,
472 	.write_end	= exfat_write_end,
473 	.direct_IO	= exfat_direct_IO,
474 	.bmap		= exfat_aop_bmap,
475 	.migrate_folio	= buffer_migrate_folio,
476 };
477 
478 static inline unsigned long exfat_hash(loff_t i_pos)
479 {
480 	return hash_32(i_pos, EXFAT_HASH_BITS);
481 }
482 
483 void exfat_hash_inode(struct inode *inode, loff_t i_pos)
484 {
485 	struct exfat_sb_info *sbi = EXFAT_SB(inode->i_sb);
486 	struct hlist_head *head = sbi->inode_hashtable + exfat_hash(i_pos);
487 
488 	spin_lock(&sbi->inode_hash_lock);
489 	EXFAT_I(inode)->i_pos = i_pos;
490 	hlist_add_head(&EXFAT_I(inode)->i_hash_fat, head);
491 	spin_unlock(&sbi->inode_hash_lock);
492 }
493 
494 void exfat_unhash_inode(struct inode *inode)
495 {
496 	struct exfat_sb_info *sbi = EXFAT_SB(inode->i_sb);
497 
498 	spin_lock(&sbi->inode_hash_lock);
499 	hlist_del_init(&EXFAT_I(inode)->i_hash_fat);
500 	EXFAT_I(inode)->i_pos = 0;
501 	spin_unlock(&sbi->inode_hash_lock);
502 }
503 
504 struct inode *exfat_iget(struct super_block *sb, loff_t i_pos)
505 {
506 	struct exfat_sb_info *sbi = EXFAT_SB(sb);
507 	struct exfat_inode_info *info;
508 	struct hlist_head *head = sbi->inode_hashtable + exfat_hash(i_pos);
509 	struct inode *inode = NULL;
510 
511 	spin_lock(&sbi->inode_hash_lock);
512 	hlist_for_each_entry(info, head, i_hash_fat) {
513 		WARN_ON(info->vfs_inode.i_sb != sb);
514 
515 		if (i_pos != info->i_pos)
516 			continue;
517 		inode = igrab(&info->vfs_inode);
518 		if (inode)
519 			break;
520 	}
521 	spin_unlock(&sbi->inode_hash_lock);
522 	return inode;
523 }
524 
525 /* doesn't deal with root inode */
526 static int exfat_fill_inode(struct inode *inode, struct exfat_dir_entry *info)
527 {
528 	struct exfat_sb_info *sbi = EXFAT_SB(inode->i_sb);
529 	struct exfat_inode_info *ei = EXFAT_I(inode);
530 	loff_t size = info->size;
531 
532 	ei->dir = info->dir;
533 	ei->entry = info->entry;
534 	ei->attr = info->attr;
535 	ei->start_clu = info->start_clu;
536 	ei->flags = info->flags;
537 	ei->type = info->type;
538 
539 	ei->version = 0;
540 	ei->hint_stat.eidx = 0;
541 	ei->hint_stat.clu = info->start_clu;
542 	ei->hint_femp.eidx = EXFAT_HINT_NONE;
543 	ei->hint_bmap.off = EXFAT_EOF_CLUSTER;
544 	ei->i_pos = 0;
545 
546 	inode->i_uid = sbi->options.fs_uid;
547 	inode->i_gid = sbi->options.fs_gid;
548 	inode_inc_iversion(inode);
549 	inode->i_generation = get_random_u32();
550 
551 	if (info->attr & ATTR_SUBDIR) { /* directory */
552 		inode->i_generation &= ~1;
553 		inode->i_mode = exfat_make_mode(sbi, info->attr, 0777);
554 		inode->i_op = &exfat_dir_inode_operations;
555 		inode->i_fop = &exfat_dir_operations;
556 		set_nlink(inode, info->num_subdirs);
557 	} else { /* regular file */
558 		inode->i_generation |= 1;
559 		inode->i_mode = exfat_make_mode(sbi, info->attr, 0777);
560 		inode->i_op = &exfat_file_inode_operations;
561 		inode->i_fop = &exfat_file_operations;
562 		inode->i_mapping->a_ops = &exfat_aops;
563 		inode->i_mapping->nrpages = 0;
564 	}
565 
566 	i_size_write(inode, size);
567 
568 	/* ondisk and aligned size should be aligned with block size */
569 	if (size & (inode->i_sb->s_blocksize - 1)) {
570 		size |= (inode->i_sb->s_blocksize - 1);
571 		size++;
572 	}
573 
574 	ei->i_size_aligned = size;
575 	ei->i_size_ondisk = size;
576 
577 	exfat_save_attr(inode, info->attr);
578 
579 	inode->i_blocks = round_up(i_size_read(inode), sbi->cluster_size) >>
580 				inode->i_blkbits;
581 	inode->i_mtime = info->mtime;
582 	inode->i_ctime = info->mtime;
583 	ei->i_crtime = info->crtime;
584 	inode->i_atime = info->atime;
585 
586 	return 0;
587 }
588 
589 struct inode *exfat_build_inode(struct super_block *sb,
590 		struct exfat_dir_entry *info, loff_t i_pos)
591 {
592 	struct inode *inode;
593 	int err;
594 
595 	inode = exfat_iget(sb, i_pos);
596 	if (inode)
597 		goto out;
598 	inode = new_inode(sb);
599 	if (!inode) {
600 		inode = ERR_PTR(-ENOMEM);
601 		goto out;
602 	}
603 	inode->i_ino = iunique(sb, EXFAT_ROOT_INO);
604 	inode_set_iversion(inode, 1);
605 	err = exfat_fill_inode(inode, info);
606 	if (err) {
607 		iput(inode);
608 		inode = ERR_PTR(err);
609 		goto out;
610 	}
611 	exfat_hash_inode(inode, i_pos);
612 	insert_inode_hash(inode);
613 out:
614 	return inode;
615 }
616 
617 void exfat_evict_inode(struct inode *inode)
618 {
619 	truncate_inode_pages(&inode->i_data, 0);
620 
621 	if (!inode->i_nlink) {
622 		i_size_write(inode, 0);
623 		mutex_lock(&EXFAT_SB(inode->i_sb)->s_lock);
624 		__exfat_truncate(inode);
625 		mutex_unlock(&EXFAT_SB(inode->i_sb)->s_lock);
626 	}
627 
628 	invalidate_inode_buffers(inode);
629 	clear_inode(inode);
630 	exfat_cache_inval_inode(inode);
631 	exfat_unhash_inode(inode);
632 }
633