1 // SPDX-License-Identifier: GPL-2.0-or-later
2 /*
3  * inode.c
4  *
5  * vfs' aops, fops, dops and iops
6  *
7  * Copyright (C) 2002, 2004 Oracle.  All rights reserved.
8  */
9 
10 #include <linux/fs.h>
11 #include <linux/types.h>
12 #include <linux/highmem.h>
13 #include <linux/pagemap.h>
14 #include <linux/quotaops.h>
15 #include <linux/iversion.h>
16 
17 #include <asm/byteorder.h>
18 
19 #include <cluster/masklog.h>
20 
21 #include "ocfs2.h"
22 
23 #include "alloc.h"
24 #include "dir.h"
25 #include "blockcheck.h"
26 #include "dlmglue.h"
27 #include "extent_map.h"
28 #include "file.h"
29 #include "heartbeat.h"
30 #include "inode.h"
31 #include "journal.h"
32 #include "namei.h"
33 #include "suballoc.h"
34 #include "super.h"
35 #include "symlink.h"
36 #include "sysfile.h"
37 #include "uptodate.h"
38 #include "xattr.h"
39 #include "refcounttree.h"
40 #include "ocfs2_trace.h"
41 #include "filecheck.h"
42 
43 #include "buffer_head_io.h"
44 
45 struct ocfs2_find_inode_args
46 {
47 	u64		fi_blkno;
48 	unsigned long	fi_ino;
49 	unsigned int	fi_flags;
50 	unsigned int	fi_sysfile_type;
51 };
52 
53 static struct lock_class_key ocfs2_sysfile_lock_key[NUM_SYSTEM_INODES];
54 
55 static int ocfs2_read_locked_inode(struct inode *inode,
56 				   struct ocfs2_find_inode_args *args);
57 static int ocfs2_init_locked_inode(struct inode *inode, void *opaque);
58 static int ocfs2_find_actor(struct inode *inode, void *opaque);
59 static int ocfs2_truncate_for_delete(struct ocfs2_super *osb,
60 				    struct inode *inode,
61 				    struct buffer_head *fe_bh);
62 
63 static int ocfs2_filecheck_read_inode_block_full(struct inode *inode,
64 						 struct buffer_head **bh,
65 						 int flags, int type);
66 static int ocfs2_filecheck_validate_inode_block(struct super_block *sb,
67 						struct buffer_head *bh);
68 static int ocfs2_filecheck_repair_inode_block(struct super_block *sb,
69 					      struct buffer_head *bh);
70 
ocfs2_set_inode_flags(struct inode * inode)71 void ocfs2_set_inode_flags(struct inode *inode)
72 {
73 	unsigned int flags = OCFS2_I(inode)->ip_attr;
74 
75 	inode->i_flags &= ~(S_IMMUTABLE |
76 		S_SYNC | S_APPEND | S_NOATIME | S_DIRSYNC);
77 
78 	if (flags & OCFS2_IMMUTABLE_FL)
79 		inode->i_flags |= S_IMMUTABLE;
80 
81 	if (flags & OCFS2_SYNC_FL)
82 		inode->i_flags |= S_SYNC;
83 	if (flags & OCFS2_APPEND_FL)
84 		inode->i_flags |= S_APPEND;
85 	if (flags & OCFS2_NOATIME_FL)
86 		inode->i_flags |= S_NOATIME;
87 	if (flags & OCFS2_DIRSYNC_FL)
88 		inode->i_flags |= S_DIRSYNC;
89 }
90 
91 /* Propagate flags from i_flags to OCFS2_I(inode)->ip_attr */
ocfs2_get_inode_flags(struct ocfs2_inode_info * oi)92 void ocfs2_get_inode_flags(struct ocfs2_inode_info *oi)
93 {
94 	unsigned int flags = oi->vfs_inode.i_flags;
95 
96 	oi->ip_attr &= ~(OCFS2_SYNC_FL|OCFS2_APPEND_FL|
97 			OCFS2_IMMUTABLE_FL|OCFS2_NOATIME_FL|OCFS2_DIRSYNC_FL);
98 	if (flags & S_SYNC)
99 		oi->ip_attr |= OCFS2_SYNC_FL;
100 	if (flags & S_APPEND)
101 		oi->ip_attr |= OCFS2_APPEND_FL;
102 	if (flags & S_IMMUTABLE)
103 		oi->ip_attr |= OCFS2_IMMUTABLE_FL;
104 	if (flags & S_NOATIME)
105 		oi->ip_attr |= OCFS2_NOATIME_FL;
106 	if (flags & S_DIRSYNC)
107 		oi->ip_attr |= OCFS2_DIRSYNC_FL;
108 }
109 
ocfs2_ilookup(struct super_block * sb,u64 blkno)110 struct inode *ocfs2_ilookup(struct super_block *sb, u64 blkno)
111 {
112 	struct ocfs2_find_inode_args args;
113 
114 	args.fi_blkno = blkno;
115 	args.fi_flags = 0;
116 	args.fi_ino = ino_from_blkno(sb, blkno);
117 	args.fi_sysfile_type = 0;
118 
119 	return ilookup5(sb, blkno, ocfs2_find_actor, &args);
120 }
ocfs2_iget(struct ocfs2_super * osb,u64 blkno,unsigned flags,int sysfile_type)121 struct inode *ocfs2_iget(struct ocfs2_super *osb, u64 blkno, unsigned flags,
122 			 int sysfile_type)
123 {
124 	int rc = -ESTALE;
125 	struct inode *inode = NULL;
126 	struct super_block *sb = osb->sb;
127 	struct ocfs2_find_inode_args args;
128 	journal_t *journal = osb->journal->j_journal;
129 
130 	trace_ocfs2_iget_begin((unsigned long long)blkno, flags,
131 			       sysfile_type);
132 
133 	/* Ok. By now we've either got the offsets passed to us by the
134 	 * caller, or we just pulled them off the bh. Lets do some
135 	 * sanity checks to make sure they're OK. */
136 	if (blkno == 0) {
137 		inode = ERR_PTR(-EINVAL);
138 		mlog_errno(PTR_ERR(inode));
139 		goto bail;
140 	}
141 
142 	args.fi_blkno = blkno;
143 	args.fi_flags = flags;
144 	args.fi_ino = ino_from_blkno(sb, blkno);
145 	args.fi_sysfile_type = sysfile_type;
146 
147 	inode = iget5_locked(sb, args.fi_ino, ocfs2_find_actor,
148 			     ocfs2_init_locked_inode, &args);
149 	/* inode was *not* in the inode cache. 2.6.x requires
150 	 * us to do our own read_inode call and unlock it
151 	 * afterwards. */
152 	if (inode == NULL) {
153 		inode = ERR_PTR(-ENOMEM);
154 		mlog_errno(PTR_ERR(inode));
155 		goto bail;
156 	}
157 	trace_ocfs2_iget5_locked(inode->i_state);
158 	if (inode->i_state & I_NEW) {
159 		rc = ocfs2_read_locked_inode(inode, &args);
160 		unlock_new_inode(inode);
161 	}
162 	if (is_bad_inode(inode)) {
163 		iput(inode);
164 		inode = ERR_PTR(rc);
165 		goto bail;
166 	}
167 
168 	/*
169 	 * Set transaction id's of transactions that have to be committed
170 	 * to finish f[data]sync. We set them to currently running transaction
171 	 * as we cannot be sure that the inode or some of its metadata isn't
172 	 * part of the transaction - the inode could have been reclaimed and
173 	 * now it is reread from disk.
174 	 */
175 	if (journal) {
176 		transaction_t *transaction;
177 		tid_t tid;
178 		struct ocfs2_inode_info *oi = OCFS2_I(inode);
179 
180 		read_lock(&journal->j_state_lock);
181 		if (journal->j_running_transaction)
182 			transaction = journal->j_running_transaction;
183 		else
184 			transaction = journal->j_committing_transaction;
185 		if (transaction)
186 			tid = transaction->t_tid;
187 		else
188 			tid = journal->j_commit_sequence;
189 		read_unlock(&journal->j_state_lock);
190 		oi->i_sync_tid = tid;
191 		oi->i_datasync_tid = tid;
192 	}
193 
194 bail:
195 	if (!IS_ERR(inode)) {
196 		trace_ocfs2_iget_end(inode,
197 			(unsigned long long)OCFS2_I(inode)->ip_blkno);
198 	}
199 
200 	return inode;
201 }
202 
ocfs2_dinode_has_extents(struct ocfs2_dinode * di)203 static int ocfs2_dinode_has_extents(struct ocfs2_dinode *di)
204 {
205 	/* inodes flagged with other stuff in id2 */
206 	if (di->i_flags & (OCFS2_SUPER_BLOCK_FL | OCFS2_LOCAL_ALLOC_FL |
207 			   OCFS2_CHAIN_FL | OCFS2_DEALLOC_FL))
208 		return 0;
209 	/* i_flags doesn't indicate when id2 is a fast symlink */
210 	if (S_ISLNK(di->i_mode) && di->i_size && di->i_clusters == 0)
211 		return 0;
212 	if (di->i_dyn_features & OCFS2_INLINE_DATA_FL)
213 		return 0;
214 
215 	return 1;
216 }
217 
218 /*
219  * here's how inodes get read from disk:
220  * iget5_locked -> find_actor -> OCFS2_FIND_ACTOR
221  * found? : return the in-memory inode
222  * not found? : get_new_inode -> OCFS2_INIT_LOCKED_INODE
223  */
224 
ocfs2_find_actor(struct inode * inode,void * opaque)225 static int ocfs2_find_actor(struct inode *inode, void *opaque)
226 {
227 	struct ocfs2_find_inode_args *args = NULL;
228 	struct ocfs2_inode_info *oi = OCFS2_I(inode);
229 	int ret = 0;
230 
231 	args = opaque;
232 
233 	mlog_bug_on_msg(!inode, "No inode in find actor!\n");
234 
235 	trace_ocfs2_find_actor(inode, inode->i_ino, opaque, args->fi_blkno);
236 
237 	if (oi->ip_blkno != args->fi_blkno)
238 		goto bail;
239 
240 	ret = 1;
241 bail:
242 	return ret;
243 }
244 
245 /*
246  * initialize the new inode, but don't do anything that would cause
247  * us to sleep.
248  * return 0 on success, 1 on failure
249  */
ocfs2_init_locked_inode(struct inode * inode,void * opaque)250 static int ocfs2_init_locked_inode(struct inode *inode, void *opaque)
251 {
252 	struct ocfs2_find_inode_args *args = opaque;
253 	static struct lock_class_key ocfs2_quota_ip_alloc_sem_key,
254 				     ocfs2_file_ip_alloc_sem_key;
255 
256 	inode->i_ino = args->fi_ino;
257 	OCFS2_I(inode)->ip_blkno = args->fi_blkno;
258 	if (args->fi_sysfile_type != 0)
259 		lockdep_set_class(&inode->i_rwsem,
260 			&ocfs2_sysfile_lock_key[args->fi_sysfile_type]);
261 	if (args->fi_sysfile_type == USER_QUOTA_SYSTEM_INODE ||
262 	    args->fi_sysfile_type == GROUP_QUOTA_SYSTEM_INODE ||
263 	    args->fi_sysfile_type == LOCAL_USER_QUOTA_SYSTEM_INODE ||
264 	    args->fi_sysfile_type == LOCAL_GROUP_QUOTA_SYSTEM_INODE)
265 		lockdep_set_class(&OCFS2_I(inode)->ip_alloc_sem,
266 				  &ocfs2_quota_ip_alloc_sem_key);
267 	else
268 		lockdep_set_class(&OCFS2_I(inode)->ip_alloc_sem,
269 				  &ocfs2_file_ip_alloc_sem_key);
270 
271 	return 0;
272 }
273 
ocfs2_populate_inode(struct inode * inode,struct ocfs2_dinode * fe,int create_ino)274 void ocfs2_populate_inode(struct inode *inode, struct ocfs2_dinode *fe,
275 			  int create_ino)
276 {
277 	struct super_block *sb;
278 	struct ocfs2_super *osb;
279 	int use_plocks = 1;
280 
281 	sb = inode->i_sb;
282 	osb = OCFS2_SB(sb);
283 
284 	if ((osb->s_mount_opt & OCFS2_MOUNT_LOCALFLOCKS) ||
285 	    ocfs2_mount_local(osb) || !ocfs2_stack_supports_plocks())
286 		use_plocks = 0;
287 
288 	/*
289 	 * These have all been checked by ocfs2_read_inode_block() or set
290 	 * by ocfs2_mknod_locked(), so a failure is a code bug.
291 	 */
292 	BUG_ON(!OCFS2_IS_VALID_DINODE(fe));  /* This means that read_inode
293 						cannot create a superblock
294 						inode today.  change if
295 						that is needed. */
296 	BUG_ON(!(fe->i_flags & cpu_to_le32(OCFS2_VALID_FL)));
297 	BUG_ON(le32_to_cpu(fe->i_fs_generation) != osb->fs_generation);
298 
299 
300 	OCFS2_I(inode)->ip_clusters = le32_to_cpu(fe->i_clusters);
301 	OCFS2_I(inode)->ip_attr = le32_to_cpu(fe->i_attr);
302 	OCFS2_I(inode)->ip_dyn_features = le16_to_cpu(fe->i_dyn_features);
303 
304 	inode_set_iversion(inode, 1);
305 	inode->i_generation = le32_to_cpu(fe->i_generation);
306 	inode->i_rdev = huge_decode_dev(le64_to_cpu(fe->id1.dev1.i_rdev));
307 	inode->i_mode = le16_to_cpu(fe->i_mode);
308 	i_uid_write(inode, le32_to_cpu(fe->i_uid));
309 	i_gid_write(inode, le32_to_cpu(fe->i_gid));
310 
311 	/* Fast symlinks will have i_size but no allocated clusters. */
312 	if (S_ISLNK(inode->i_mode) && !fe->i_clusters) {
313 		inode->i_blocks = 0;
314 		inode->i_mapping->a_ops = &ocfs2_fast_symlink_aops;
315 	} else {
316 		inode->i_blocks = ocfs2_inode_sector_count(inode);
317 		inode->i_mapping->a_ops = &ocfs2_aops;
318 	}
319 	inode_set_atime(inode, le64_to_cpu(fe->i_atime),
320 		        le32_to_cpu(fe->i_atime_nsec));
321 	inode_set_mtime(inode, le64_to_cpu(fe->i_mtime),
322 		        le32_to_cpu(fe->i_mtime_nsec));
323 	inode_set_ctime(inode, le64_to_cpu(fe->i_ctime),
324 		        le32_to_cpu(fe->i_ctime_nsec));
325 
326 	if (OCFS2_I(inode)->ip_blkno != le64_to_cpu(fe->i_blkno))
327 		mlog(ML_ERROR,
328 		     "ip_blkno %llu != i_blkno %llu!\n",
329 		     (unsigned long long)OCFS2_I(inode)->ip_blkno,
330 		     (unsigned long long)le64_to_cpu(fe->i_blkno));
331 
332 	set_nlink(inode, ocfs2_read_links_count(fe));
333 
334 	trace_ocfs2_populate_inode(OCFS2_I(inode)->ip_blkno,
335 				   le32_to_cpu(fe->i_flags));
336 	if (fe->i_flags & cpu_to_le32(OCFS2_SYSTEM_FL)) {
337 		OCFS2_I(inode)->ip_flags |= OCFS2_INODE_SYSTEM_FILE;
338 		inode->i_flags |= S_NOQUOTA;
339 	}
340 
341 	if (fe->i_flags & cpu_to_le32(OCFS2_LOCAL_ALLOC_FL)) {
342 		OCFS2_I(inode)->ip_flags |= OCFS2_INODE_BITMAP;
343 	} else if (fe->i_flags & cpu_to_le32(OCFS2_BITMAP_FL)) {
344 		OCFS2_I(inode)->ip_flags |= OCFS2_INODE_BITMAP;
345 	} else if (fe->i_flags & cpu_to_le32(OCFS2_QUOTA_FL)) {
346 		inode->i_flags |= S_NOQUOTA;
347 	} else if (fe->i_flags & cpu_to_le32(OCFS2_SUPER_BLOCK_FL)) {
348 		/* we can't actually hit this as read_inode can't
349 		 * handle superblocks today ;-) */
350 		BUG();
351 	}
352 
353 	switch (inode->i_mode & S_IFMT) {
354 	    case S_IFREG:
355 		    if (use_plocks)
356 			    inode->i_fop = &ocfs2_fops;
357 		    else
358 			    inode->i_fop = &ocfs2_fops_no_plocks;
359 		    inode->i_op = &ocfs2_file_iops;
360 		    i_size_write(inode, le64_to_cpu(fe->i_size));
361 		    break;
362 	    case S_IFDIR:
363 		    inode->i_op = &ocfs2_dir_iops;
364 		    if (use_plocks)
365 			    inode->i_fop = &ocfs2_dops;
366 		    else
367 			    inode->i_fop = &ocfs2_dops_no_plocks;
368 		    i_size_write(inode, le64_to_cpu(fe->i_size));
369 		    OCFS2_I(inode)->ip_dir_lock_gen = 1;
370 		    break;
371 	    case S_IFLNK:
372 		    inode->i_op = &ocfs2_symlink_inode_operations;
373 		    inode_nohighmem(inode);
374 		    i_size_write(inode, le64_to_cpu(fe->i_size));
375 		    break;
376 	    default:
377 		    inode->i_op = &ocfs2_special_file_iops;
378 		    init_special_inode(inode, inode->i_mode,
379 				       inode->i_rdev);
380 		    break;
381 	}
382 
383 	if (create_ino) {
384 		inode->i_ino = ino_from_blkno(inode->i_sb,
385 			       le64_to_cpu(fe->i_blkno));
386 
387 		/*
388 		 * If we ever want to create system files from kernel,
389 		 * the generation argument to
390 		 * ocfs2_inode_lock_res_init() will have to change.
391 		 */
392 		BUG_ON(le32_to_cpu(fe->i_flags) & OCFS2_SYSTEM_FL);
393 
394 		ocfs2_inode_lock_res_init(&OCFS2_I(inode)->ip_inode_lockres,
395 					  OCFS2_LOCK_TYPE_META, 0, inode);
396 
397 		ocfs2_inode_lock_res_init(&OCFS2_I(inode)->ip_open_lockres,
398 					  OCFS2_LOCK_TYPE_OPEN, 0, inode);
399 	}
400 
401 	ocfs2_inode_lock_res_init(&OCFS2_I(inode)->ip_rw_lockres,
402 				  OCFS2_LOCK_TYPE_RW, inode->i_generation,
403 				  inode);
404 
405 	ocfs2_set_inode_flags(inode);
406 
407 	OCFS2_I(inode)->ip_last_used_slot = 0;
408 	OCFS2_I(inode)->ip_last_used_group = 0;
409 
410 	if (S_ISDIR(inode->i_mode))
411 		ocfs2_resv_set_type(&OCFS2_I(inode)->ip_la_data_resv,
412 				    OCFS2_RESV_FLAG_DIR);
413 }
414 
ocfs2_read_locked_inode(struct inode * inode,struct ocfs2_find_inode_args * args)415 static int ocfs2_read_locked_inode(struct inode *inode,
416 				   struct ocfs2_find_inode_args *args)
417 {
418 	struct super_block *sb;
419 	struct ocfs2_super *osb;
420 	struct ocfs2_dinode *fe;
421 	struct buffer_head *bh = NULL;
422 	int status, can_lock, lock_level = 0;
423 	u32 generation = 0;
424 
425 	status = -EINVAL;
426 	sb = inode->i_sb;
427 	osb = OCFS2_SB(sb);
428 
429 	/*
430 	 * To improve performance of cold-cache inode stats, we take
431 	 * the cluster lock here if possible.
432 	 *
433 	 * Generally, OCFS2 never trusts the contents of an inode
434 	 * unless it's holding a cluster lock, so taking it here isn't
435 	 * a correctness issue as much as it is a performance
436 	 * improvement.
437 	 *
438 	 * There are three times when taking the lock is not a good idea:
439 	 *
440 	 * 1) During startup, before we have initialized the DLM.
441 	 *
442 	 * 2) If we are reading certain system files which never get
443 	 *    cluster locks (local alloc, truncate log).
444 	 *
445 	 * 3) If the process doing the iget() is responsible for
446 	 *    orphan dir recovery. We're holding the orphan dir lock and
447 	 *    can get into a deadlock with another process on another
448 	 *    node in ->delete_inode().
449 	 *
450 	 * #1 and #2 can be simply solved by never taking the lock
451 	 * here for system files (which are the only type we read
452 	 * during mount). It's a heavier approach, but our main
453 	 * concern is user-accessible files anyway.
454 	 *
455 	 * #3 works itself out because we'll eventually take the
456 	 * cluster lock before trusting anything anyway.
457 	 */
458 	can_lock = !(args->fi_flags & OCFS2_FI_FLAG_SYSFILE)
459 		&& !(args->fi_flags & OCFS2_FI_FLAG_ORPHAN_RECOVERY)
460 		&& !ocfs2_mount_local(osb);
461 
462 	trace_ocfs2_read_locked_inode(
463 		(unsigned long long)OCFS2_I(inode)->ip_blkno, can_lock);
464 
465 	/*
466 	 * To maintain backwards compatibility with older versions of
467 	 * ocfs2-tools, we still store the generation value for system
468 	 * files. The only ones that actually matter to userspace are
469 	 * the journals, but it's easier and inexpensive to just flag
470 	 * all system files similarly.
471 	 */
472 	if (args->fi_flags & OCFS2_FI_FLAG_SYSFILE)
473 		generation = osb->fs_generation;
474 
475 	ocfs2_inode_lock_res_init(&OCFS2_I(inode)->ip_inode_lockres,
476 				  OCFS2_LOCK_TYPE_META,
477 				  generation, inode);
478 
479 	ocfs2_inode_lock_res_init(&OCFS2_I(inode)->ip_open_lockres,
480 				  OCFS2_LOCK_TYPE_OPEN,
481 				  0, inode);
482 
483 	if (can_lock) {
484 		status = ocfs2_open_lock(inode);
485 		if (status) {
486 			make_bad_inode(inode);
487 			mlog_errno(status);
488 			return status;
489 		}
490 		status = ocfs2_inode_lock(inode, NULL, lock_level);
491 		if (status) {
492 			make_bad_inode(inode);
493 			mlog_errno(status);
494 			return status;
495 		}
496 	}
497 
498 	if (args->fi_flags & OCFS2_FI_FLAG_ORPHAN_RECOVERY) {
499 		status = ocfs2_try_open_lock(inode, 0);
500 		if (status) {
501 			make_bad_inode(inode);
502 			return status;
503 		}
504 	}
505 
506 	if (can_lock) {
507 		if (args->fi_flags & OCFS2_FI_FLAG_FILECHECK_CHK)
508 			status = ocfs2_filecheck_read_inode_block_full(inode,
509 						&bh, OCFS2_BH_IGNORE_CACHE, 0);
510 		else if (args->fi_flags & OCFS2_FI_FLAG_FILECHECK_FIX)
511 			status = ocfs2_filecheck_read_inode_block_full(inode,
512 						&bh, OCFS2_BH_IGNORE_CACHE, 1);
513 		else
514 			status = ocfs2_read_inode_block_full(inode,
515 						&bh, OCFS2_BH_IGNORE_CACHE);
516 	} else {
517 		status = ocfs2_read_blocks_sync(osb, args->fi_blkno, 1, &bh);
518 		/*
519 		 * If buffer is in jbd, then its checksum may not have been
520 		 * computed as yet.
521 		 */
522 		if (!status && !buffer_jbd(bh)) {
523 			if (args->fi_flags & OCFS2_FI_FLAG_FILECHECK_CHK)
524 				status = ocfs2_filecheck_validate_inode_block(
525 								osb->sb, bh);
526 			else if (args->fi_flags & OCFS2_FI_FLAG_FILECHECK_FIX)
527 				status = ocfs2_filecheck_repair_inode_block(
528 								osb->sb, bh);
529 			else
530 				status = ocfs2_validate_inode_block(
531 								osb->sb, bh);
532 		}
533 	}
534 	if (status < 0) {
535 		mlog_errno(status);
536 		goto bail;
537 	}
538 
539 	status = -EINVAL;
540 	fe = (struct ocfs2_dinode *) bh->b_data;
541 
542 	/*
543 	 * This is a code bug. Right now the caller needs to
544 	 * understand whether it is asking for a system file inode or
545 	 * not so the proper lock names can be built.
546 	 */
547 	mlog_bug_on_msg(!!(fe->i_flags & cpu_to_le32(OCFS2_SYSTEM_FL)) !=
548 			!!(args->fi_flags & OCFS2_FI_FLAG_SYSFILE),
549 			"Inode %llu: system file state is ambiguous\n",
550 			(unsigned long long)args->fi_blkno);
551 
552 	if (S_ISCHR(le16_to_cpu(fe->i_mode)) ||
553 	    S_ISBLK(le16_to_cpu(fe->i_mode)))
554 		inode->i_rdev = huge_decode_dev(le64_to_cpu(fe->id1.dev1.i_rdev));
555 
556 	ocfs2_populate_inode(inode, fe, 0);
557 
558 	BUG_ON(args->fi_blkno != le64_to_cpu(fe->i_blkno));
559 
560 	if (buffer_dirty(bh) && !buffer_jbd(bh)) {
561 		if (can_lock) {
562 			ocfs2_inode_unlock(inode, lock_level);
563 			lock_level = 1;
564 			ocfs2_inode_lock(inode, NULL, lock_level);
565 		}
566 		status = ocfs2_write_block(osb, bh, INODE_CACHE(inode));
567 		if (status < 0) {
568 			mlog_errno(status);
569 			goto bail;
570 		}
571 	}
572 
573 	status = 0;
574 
575 bail:
576 	if (can_lock)
577 		ocfs2_inode_unlock(inode, lock_level);
578 
579 	if (status < 0)
580 		make_bad_inode(inode);
581 
582 	brelse(bh);
583 
584 	return status;
585 }
586 
ocfs2_sync_blockdev(struct super_block * sb)587 void ocfs2_sync_blockdev(struct super_block *sb)
588 {
589 	sync_blockdev(sb->s_bdev);
590 }
591 
ocfs2_truncate_for_delete(struct ocfs2_super * osb,struct inode * inode,struct buffer_head * fe_bh)592 static int ocfs2_truncate_for_delete(struct ocfs2_super *osb,
593 				     struct inode *inode,
594 				     struct buffer_head *fe_bh)
595 {
596 	int status = 0;
597 	struct ocfs2_dinode *fe;
598 	handle_t *handle = NULL;
599 
600 	fe = (struct ocfs2_dinode *) fe_bh->b_data;
601 
602 	/*
603 	 * This check will also skip truncate of inodes with inline
604 	 * data and fast symlinks.
605 	 */
606 	if (fe->i_clusters) {
607 		if (ocfs2_should_order_data(inode))
608 			ocfs2_begin_ordered_truncate(inode, 0);
609 
610 		handle = ocfs2_start_trans(osb, OCFS2_INODE_UPDATE_CREDITS);
611 		if (IS_ERR(handle)) {
612 			status = PTR_ERR(handle);
613 			handle = NULL;
614 			mlog_errno(status);
615 			goto out;
616 		}
617 
618 		status = ocfs2_journal_access_di(handle, INODE_CACHE(inode),
619 						 fe_bh,
620 						 OCFS2_JOURNAL_ACCESS_WRITE);
621 		if (status < 0) {
622 			mlog_errno(status);
623 			goto out;
624 		}
625 
626 		i_size_write(inode, 0);
627 
628 		status = ocfs2_mark_inode_dirty(handle, inode, fe_bh);
629 		if (status < 0) {
630 			mlog_errno(status);
631 			goto out;
632 		}
633 
634 		ocfs2_commit_trans(osb, handle);
635 		handle = NULL;
636 
637 		status = ocfs2_commit_truncate(osb, inode, fe_bh);
638 		if (status < 0)
639 			mlog_errno(status);
640 	}
641 
642 out:
643 	if (handle)
644 		ocfs2_commit_trans(osb, handle);
645 	return status;
646 }
647 
ocfs2_remove_inode(struct inode * inode,struct buffer_head * di_bh,struct inode * orphan_dir_inode,struct buffer_head * orphan_dir_bh)648 static int ocfs2_remove_inode(struct inode *inode,
649 			      struct buffer_head *di_bh,
650 			      struct inode *orphan_dir_inode,
651 			      struct buffer_head *orphan_dir_bh)
652 {
653 	int status;
654 	struct inode *inode_alloc_inode = NULL;
655 	struct buffer_head *inode_alloc_bh = NULL;
656 	handle_t *handle;
657 	struct ocfs2_super *osb = OCFS2_SB(inode->i_sb);
658 	struct ocfs2_dinode *di = (struct ocfs2_dinode *) di_bh->b_data;
659 
660 	inode_alloc_inode =
661 		ocfs2_get_system_file_inode(osb, INODE_ALLOC_SYSTEM_INODE,
662 					    le16_to_cpu(di->i_suballoc_slot));
663 	if (!inode_alloc_inode) {
664 		status = -ENOENT;
665 		mlog_errno(status);
666 		goto bail;
667 	}
668 
669 	inode_lock(inode_alloc_inode);
670 	status = ocfs2_inode_lock(inode_alloc_inode, &inode_alloc_bh, 1);
671 	if (status < 0) {
672 		inode_unlock(inode_alloc_inode);
673 
674 		mlog_errno(status);
675 		goto bail;
676 	}
677 
678 	handle = ocfs2_start_trans(osb, OCFS2_DELETE_INODE_CREDITS +
679 				   ocfs2_quota_trans_credits(inode->i_sb));
680 	if (IS_ERR(handle)) {
681 		status = PTR_ERR(handle);
682 		mlog_errno(status);
683 		goto bail_unlock;
684 	}
685 
686 	if (!(OCFS2_I(inode)->ip_flags & OCFS2_INODE_SKIP_ORPHAN_DIR)) {
687 		status = ocfs2_orphan_del(osb, handle, orphan_dir_inode, inode,
688 					  orphan_dir_bh, false);
689 		if (status < 0) {
690 			mlog_errno(status);
691 			goto bail_commit;
692 		}
693 	}
694 
695 	/* set the inodes dtime */
696 	status = ocfs2_journal_access_di(handle, INODE_CACHE(inode), di_bh,
697 					 OCFS2_JOURNAL_ACCESS_WRITE);
698 	if (status < 0) {
699 		mlog_errno(status);
700 		goto bail_commit;
701 	}
702 
703 	di->i_dtime = cpu_to_le64(ktime_get_real_seconds());
704 	di->i_flags &= cpu_to_le32(~(OCFS2_VALID_FL | OCFS2_ORPHANED_FL));
705 	ocfs2_journal_dirty(handle, di_bh);
706 
707 	ocfs2_remove_from_cache(INODE_CACHE(inode), di_bh);
708 	dquot_free_inode(inode);
709 
710 	status = ocfs2_free_dinode(handle, inode_alloc_inode,
711 				   inode_alloc_bh, di);
712 	if (status < 0)
713 		mlog_errno(status);
714 
715 bail_commit:
716 	ocfs2_commit_trans(osb, handle);
717 bail_unlock:
718 	ocfs2_inode_unlock(inode_alloc_inode, 1);
719 	inode_unlock(inode_alloc_inode);
720 	brelse(inode_alloc_bh);
721 bail:
722 	iput(inode_alloc_inode);
723 
724 	return status;
725 }
726 
727 /*
728  * Serialize with orphan dir recovery. If the process doing
729  * recovery on this orphan dir does an iget() with the dir
730  * i_rwsem held, we'll deadlock here. Instead we detect this
731  * and exit early - recovery will wipe this inode for us.
732  */
ocfs2_check_orphan_recovery_state(struct ocfs2_super * osb,int slot)733 static int ocfs2_check_orphan_recovery_state(struct ocfs2_super *osb,
734 					     int slot)
735 {
736 	int ret = 0;
737 
738 	spin_lock(&osb->osb_lock);
739 	if (ocfs2_node_map_test_bit(osb, &osb->osb_recovering_orphan_dirs, slot)) {
740 		ret = -EDEADLK;
741 		goto out;
742 	}
743 	/* This signals to the orphan recovery process that it should
744 	 * wait for us to handle the wipe. */
745 	osb->osb_orphan_wipes[slot]++;
746 out:
747 	spin_unlock(&osb->osb_lock);
748 	trace_ocfs2_check_orphan_recovery_state(slot, ret);
749 	return ret;
750 }
751 
ocfs2_signal_wipe_completion(struct ocfs2_super * osb,int slot)752 static void ocfs2_signal_wipe_completion(struct ocfs2_super *osb,
753 					 int slot)
754 {
755 	spin_lock(&osb->osb_lock);
756 	osb->osb_orphan_wipes[slot]--;
757 	spin_unlock(&osb->osb_lock);
758 
759 	wake_up(&osb->osb_wipe_event);
760 }
761 
ocfs2_wipe_inode(struct inode * inode,struct buffer_head * di_bh)762 static int ocfs2_wipe_inode(struct inode *inode,
763 			    struct buffer_head *di_bh)
764 {
765 	int status, orphaned_slot = -1;
766 	struct inode *orphan_dir_inode = NULL;
767 	struct buffer_head *orphan_dir_bh = NULL;
768 	struct ocfs2_super *osb = OCFS2_SB(inode->i_sb);
769 	struct ocfs2_dinode *di = (struct ocfs2_dinode *) di_bh->b_data;
770 
771 	if (!(OCFS2_I(inode)->ip_flags & OCFS2_INODE_SKIP_ORPHAN_DIR)) {
772 		orphaned_slot = le16_to_cpu(di->i_orphaned_slot);
773 
774 		status = ocfs2_check_orphan_recovery_state(osb, orphaned_slot);
775 		if (status)
776 			return status;
777 
778 		orphan_dir_inode = ocfs2_get_system_file_inode(osb,
779 							       ORPHAN_DIR_SYSTEM_INODE,
780 							       orphaned_slot);
781 		if (!orphan_dir_inode) {
782 			status = -ENOENT;
783 			mlog_errno(status);
784 			goto bail;
785 		}
786 
787 		/* Lock the orphan dir. The lock will be held for the entire
788 		 * delete_inode operation. We do this now to avoid races with
789 		 * recovery completion on other nodes. */
790 		inode_lock(orphan_dir_inode);
791 		status = ocfs2_inode_lock(orphan_dir_inode, &orphan_dir_bh, 1);
792 		if (status < 0) {
793 			inode_unlock(orphan_dir_inode);
794 
795 			mlog_errno(status);
796 			goto bail;
797 		}
798 	}
799 
800 	/* we do this while holding the orphan dir lock because we
801 	 * don't want recovery being run from another node to try an
802 	 * inode delete underneath us -- this will result in two nodes
803 	 * truncating the same file! */
804 	status = ocfs2_truncate_for_delete(osb, inode, di_bh);
805 	if (status < 0) {
806 		mlog_errno(status);
807 		goto bail_unlock_dir;
808 	}
809 
810 	/* Remove any dir index tree */
811 	if (S_ISDIR(inode->i_mode)) {
812 		status = ocfs2_dx_dir_truncate(inode, di_bh);
813 		if (status) {
814 			mlog_errno(status);
815 			goto bail_unlock_dir;
816 		}
817 	}
818 
819 	/*Free extended attribute resources associated with this inode.*/
820 	status = ocfs2_xattr_remove(inode, di_bh);
821 	if (status < 0) {
822 		mlog_errno(status);
823 		goto bail_unlock_dir;
824 	}
825 
826 	status = ocfs2_remove_refcount_tree(inode, di_bh);
827 	if (status < 0) {
828 		mlog_errno(status);
829 		goto bail_unlock_dir;
830 	}
831 
832 	status = ocfs2_remove_inode(inode, di_bh, orphan_dir_inode,
833 				    orphan_dir_bh);
834 	if (status < 0)
835 		mlog_errno(status);
836 
837 bail_unlock_dir:
838 	if (OCFS2_I(inode)->ip_flags & OCFS2_INODE_SKIP_ORPHAN_DIR)
839 		return status;
840 
841 	ocfs2_inode_unlock(orphan_dir_inode, 1);
842 	inode_unlock(orphan_dir_inode);
843 	brelse(orphan_dir_bh);
844 bail:
845 	iput(orphan_dir_inode);
846 	ocfs2_signal_wipe_completion(osb, orphaned_slot);
847 
848 	return status;
849 }
850 
851 /* There is a series of simple checks that should be done before a
852  * trylock is even considered. Encapsulate those in this function. */
ocfs2_inode_is_valid_to_delete(struct inode * inode)853 static int ocfs2_inode_is_valid_to_delete(struct inode *inode)
854 {
855 	int ret = 0;
856 	struct ocfs2_inode_info *oi = OCFS2_I(inode);
857 	struct ocfs2_super *osb = OCFS2_SB(inode->i_sb);
858 
859 	trace_ocfs2_inode_is_valid_to_delete(current, osb->dc_task,
860 					     (unsigned long long)oi->ip_blkno,
861 					     oi->ip_flags);
862 
863 	/* We shouldn't be getting here for the root directory
864 	 * inode.. */
865 	if (inode == osb->root_inode) {
866 		mlog(ML_ERROR, "Skipping delete of root inode.\n");
867 		goto bail;
868 	}
869 
870 	/*
871 	 * If we're coming from downconvert_thread we can't go into our own
872 	 * voting [hello, deadlock city!] so we cannot delete the inode. But
873 	 * since we dropped last inode ref when downconverting dentry lock,
874 	 * we cannot have the file open and thus the node doing unlink will
875 	 * take care of deleting the inode.
876 	 */
877 	if (current == osb->dc_task)
878 		goto bail;
879 
880 	spin_lock(&oi->ip_lock);
881 	/* OCFS2 *never* deletes system files. This should technically
882 	 * never get here as system file inodes should always have a
883 	 * positive link count. */
884 	if (oi->ip_flags & OCFS2_INODE_SYSTEM_FILE) {
885 		mlog(ML_ERROR, "Skipping delete of system file %llu\n",
886 		     (unsigned long long)oi->ip_blkno);
887 		goto bail_unlock;
888 	}
889 
890 	ret = 1;
891 bail_unlock:
892 	spin_unlock(&oi->ip_lock);
893 bail:
894 	return ret;
895 }
896 
897 /* Query the cluster to determine whether we should wipe an inode from
898  * disk or not.
899  *
900  * Requires the inode to have the cluster lock. */
ocfs2_query_inode_wipe(struct inode * inode,struct buffer_head * di_bh,int * wipe)901 static int ocfs2_query_inode_wipe(struct inode *inode,
902 				  struct buffer_head *di_bh,
903 				  int *wipe)
904 {
905 	int status = 0, reason = 0;
906 	struct ocfs2_inode_info *oi = OCFS2_I(inode);
907 	struct ocfs2_dinode *di;
908 
909 	*wipe = 0;
910 
911 	trace_ocfs2_query_inode_wipe_begin((unsigned long long)oi->ip_blkno,
912 					   inode->i_nlink);
913 
914 	/* While we were waiting for the cluster lock in
915 	 * ocfs2_delete_inode, another node might have asked to delete
916 	 * the inode. Recheck our flags to catch this. */
917 	if (!ocfs2_inode_is_valid_to_delete(inode)) {
918 		reason = 1;
919 		goto bail;
920 	}
921 
922 	/* Now that we have an up to date inode, we can double check
923 	 * the link count. */
924 	if (inode->i_nlink)
925 		goto bail;
926 
927 	/* Do some basic inode verification... */
928 	di = (struct ocfs2_dinode *) di_bh->b_data;
929 	if (!(di->i_flags & cpu_to_le32(OCFS2_ORPHANED_FL)) &&
930 	    !(oi->ip_flags & OCFS2_INODE_SKIP_ORPHAN_DIR)) {
931 		/*
932 		 * Inodes in the orphan dir must have ORPHANED_FL.  The only
933 		 * inodes that come back out of the orphan dir are reflink
934 		 * targets. A reflink target may be moved out of the orphan
935 		 * dir between the time we scan the directory and the time we
936 		 * process it. This would lead to HAS_REFCOUNT_FL being set but
937 		 * ORPHANED_FL not.
938 		 */
939 		if (di->i_dyn_features & cpu_to_le16(OCFS2_HAS_REFCOUNT_FL)) {
940 			reason = 2;
941 			goto bail;
942 		}
943 
944 		/* for lack of a better error? */
945 		status = -EEXIST;
946 		mlog(ML_ERROR,
947 		     "Inode %llu (on-disk %llu) not orphaned! "
948 		     "Disk flags  0x%x, inode flags 0x%x\n",
949 		     (unsigned long long)oi->ip_blkno,
950 		     (unsigned long long)le64_to_cpu(di->i_blkno),
951 		     le32_to_cpu(di->i_flags), oi->ip_flags);
952 		goto bail;
953 	}
954 
955 	/* has someone already deleted us?! baaad... */
956 	if (di->i_dtime) {
957 		status = -EEXIST;
958 		mlog_errno(status);
959 		goto bail;
960 	}
961 
962 	/*
963 	 * This is how ocfs2 determines whether an inode is still live
964 	 * within the cluster. Every node takes a shared read lock on
965 	 * the inode open lock in ocfs2_read_locked_inode(). When we
966 	 * get to ->delete_inode(), each node tries to convert it's
967 	 * lock to an exclusive. Trylocks are serialized by the inode
968 	 * meta data lock. If the upconvert succeeds, we know the inode
969 	 * is no longer live and can be deleted.
970 	 *
971 	 * Though we call this with the meta data lock held, the
972 	 * trylock keeps us from ABBA deadlock.
973 	 */
974 	status = ocfs2_try_open_lock(inode, 1);
975 	if (status == -EAGAIN) {
976 		status = 0;
977 		reason = 3;
978 		goto bail;
979 	}
980 	if (status < 0) {
981 		mlog_errno(status);
982 		goto bail;
983 	}
984 
985 	*wipe = 1;
986 	trace_ocfs2_query_inode_wipe_succ(le16_to_cpu(di->i_orphaned_slot));
987 
988 bail:
989 	trace_ocfs2_query_inode_wipe_end(status, reason);
990 	return status;
991 }
992 
993 /* Support function for ocfs2_delete_inode. Will help us keep the
994  * inode data in a consistent state for clear_inode. Always truncates
995  * pages, optionally sync's them first. */
ocfs2_cleanup_delete_inode(struct inode * inode,int sync_data)996 static void ocfs2_cleanup_delete_inode(struct inode *inode,
997 				       int sync_data)
998 {
999 	trace_ocfs2_cleanup_delete_inode(
1000 		(unsigned long long)OCFS2_I(inode)->ip_blkno, sync_data);
1001 	if (sync_data)
1002 		filemap_write_and_wait(inode->i_mapping);
1003 	truncate_inode_pages_final(&inode->i_data);
1004 }
1005 
ocfs2_delete_inode(struct inode * inode)1006 static void ocfs2_delete_inode(struct inode *inode)
1007 {
1008 	int wipe, status;
1009 	sigset_t oldset;
1010 	struct buffer_head *di_bh = NULL;
1011 	struct ocfs2_dinode *di = NULL;
1012 
1013 	trace_ocfs2_delete_inode(inode->i_ino,
1014 				 (unsigned long long)OCFS2_I(inode)->ip_blkno,
1015 				 is_bad_inode(inode));
1016 
1017 	/* When we fail in read_inode() we mark inode as bad. The second test
1018 	 * catches the case when inode allocation fails before allocating
1019 	 * a block for inode. */
1020 	if (is_bad_inode(inode) || !OCFS2_I(inode)->ip_blkno)
1021 		goto bail;
1022 
1023 	if (!ocfs2_inode_is_valid_to_delete(inode)) {
1024 		/* It's probably not necessary to truncate_inode_pages
1025 		 * here but we do it for safety anyway (it will most
1026 		 * likely be a no-op anyway) */
1027 		ocfs2_cleanup_delete_inode(inode, 0);
1028 		goto bail;
1029 	}
1030 
1031 	dquot_initialize(inode);
1032 
1033 	/* We want to block signals in delete_inode as the lock and
1034 	 * messaging paths may return us -ERESTARTSYS. Which would
1035 	 * cause us to exit early, resulting in inodes being orphaned
1036 	 * forever. */
1037 	ocfs2_block_signals(&oldset);
1038 
1039 	/*
1040 	 * Synchronize us against ocfs2_get_dentry. We take this in
1041 	 * shared mode so that all nodes can still concurrently
1042 	 * process deletes.
1043 	 */
1044 	status = ocfs2_nfs_sync_lock(OCFS2_SB(inode->i_sb), 0);
1045 	if (status < 0) {
1046 		mlog(ML_ERROR, "getting nfs sync lock(PR) failed %d\n", status);
1047 		ocfs2_cleanup_delete_inode(inode, 0);
1048 		goto bail_unblock;
1049 	}
1050 	/* Lock down the inode. This gives us an up to date view of
1051 	 * it's metadata (for verification), and allows us to
1052 	 * serialize delete_inode on multiple nodes.
1053 	 *
1054 	 * Even though we might be doing a truncate, we don't take the
1055 	 * allocation lock here as it won't be needed - nobody will
1056 	 * have the file open.
1057 	 */
1058 	status = ocfs2_inode_lock(inode, &di_bh, 1);
1059 	if (status < 0) {
1060 		if (status != -ENOENT)
1061 			mlog_errno(status);
1062 		ocfs2_cleanup_delete_inode(inode, 0);
1063 		goto bail_unlock_nfs_sync;
1064 	}
1065 
1066 	di = (struct ocfs2_dinode *)di_bh->b_data;
1067 	/* Skip inode deletion and wait for dio orphan entry recovered
1068 	 * first */
1069 	if (unlikely(di->i_flags & cpu_to_le32(OCFS2_DIO_ORPHANED_FL))) {
1070 		ocfs2_cleanup_delete_inode(inode, 0);
1071 		goto bail_unlock_inode;
1072 	}
1073 
1074 	/* Query the cluster. This will be the final decision made
1075 	 * before we go ahead and wipe the inode. */
1076 	status = ocfs2_query_inode_wipe(inode, di_bh, &wipe);
1077 	if (!wipe || status < 0) {
1078 		/* Error and remote inode busy both mean we won't be
1079 		 * removing the inode, so they take almost the same
1080 		 * path. */
1081 		if (status < 0)
1082 			mlog_errno(status);
1083 
1084 		/* Someone in the cluster has disallowed a wipe of
1085 		 * this inode, or it was never completely
1086 		 * orphaned. Write out the pages and exit now. */
1087 		ocfs2_cleanup_delete_inode(inode, 1);
1088 		goto bail_unlock_inode;
1089 	}
1090 
1091 	ocfs2_cleanup_delete_inode(inode, 0);
1092 
1093 	status = ocfs2_wipe_inode(inode, di_bh);
1094 	if (status < 0) {
1095 		if (status != -EDEADLK)
1096 			mlog_errno(status);
1097 		goto bail_unlock_inode;
1098 	}
1099 
1100 	/*
1101 	 * Mark the inode as successfully deleted.
1102 	 *
1103 	 * This is important for ocfs2_clear_inode() as it will check
1104 	 * this flag and skip any checkpointing work
1105 	 *
1106 	 * ocfs2_stuff_meta_lvb() also uses this flag to invalidate
1107 	 * the LVB for other nodes.
1108 	 */
1109 	OCFS2_I(inode)->ip_flags |= OCFS2_INODE_DELETED;
1110 
1111 bail_unlock_inode:
1112 	ocfs2_inode_unlock(inode, 1);
1113 	brelse(di_bh);
1114 
1115 bail_unlock_nfs_sync:
1116 	ocfs2_nfs_sync_unlock(OCFS2_SB(inode->i_sb), 0);
1117 
1118 bail_unblock:
1119 	ocfs2_unblock_signals(&oldset);
1120 bail:
1121 	return;
1122 }
1123 
ocfs2_clear_inode(struct inode * inode)1124 static void ocfs2_clear_inode(struct inode *inode)
1125 {
1126 	int status;
1127 	struct ocfs2_inode_info *oi = OCFS2_I(inode);
1128 	struct ocfs2_super *osb = OCFS2_SB(inode->i_sb);
1129 
1130 	clear_inode(inode);
1131 	trace_ocfs2_clear_inode((unsigned long long)oi->ip_blkno,
1132 				inode->i_nlink);
1133 
1134 	mlog_bug_on_msg(osb == NULL,
1135 			"Inode=%lu\n", inode->i_ino);
1136 
1137 	dquot_drop(inode);
1138 
1139 	/* To prevent remote deletes we hold open lock before, now it
1140 	 * is time to unlock PR and EX open locks. */
1141 	ocfs2_open_unlock(inode);
1142 
1143 	/* Do these before all the other work so that we don't bounce
1144 	 * the downconvert thread while waiting to destroy the locks. */
1145 	ocfs2_mark_lockres_freeing(osb, &oi->ip_rw_lockres);
1146 	ocfs2_mark_lockres_freeing(osb, &oi->ip_inode_lockres);
1147 	ocfs2_mark_lockres_freeing(osb, &oi->ip_open_lockres);
1148 
1149 	ocfs2_resv_discard(&osb->osb_la_resmap,
1150 			   &oi->ip_la_data_resv);
1151 	ocfs2_resv_init_once(&oi->ip_la_data_resv);
1152 
1153 	/* We very well may get a clear_inode before all an inodes
1154 	 * metadata has hit disk. Of course, we can't drop any cluster
1155 	 * locks until the journal has finished with it. The only
1156 	 * exception here are successfully wiped inodes - their
1157 	 * metadata can now be considered to be part of the system
1158 	 * inodes from which it came. */
1159 	if (!(oi->ip_flags & OCFS2_INODE_DELETED))
1160 		ocfs2_checkpoint_inode(inode);
1161 
1162 	mlog_bug_on_msg(!list_empty(&oi->ip_io_markers),
1163 			"Clear inode of %llu, inode has io markers\n",
1164 			(unsigned long long)oi->ip_blkno);
1165 	mlog_bug_on_msg(!list_empty(&oi->ip_unwritten_list),
1166 			"Clear inode of %llu, inode has unwritten extents\n",
1167 			(unsigned long long)oi->ip_blkno);
1168 
1169 	ocfs2_extent_map_trunc(inode, 0);
1170 
1171 	status = ocfs2_drop_inode_locks(inode);
1172 	if (status < 0)
1173 		mlog_errno(status);
1174 
1175 	ocfs2_lock_res_free(&oi->ip_rw_lockres);
1176 	ocfs2_lock_res_free(&oi->ip_inode_lockres);
1177 	ocfs2_lock_res_free(&oi->ip_open_lockres);
1178 
1179 	ocfs2_metadata_cache_exit(INODE_CACHE(inode));
1180 
1181 	mlog_bug_on_msg(INODE_CACHE(inode)->ci_num_cached,
1182 			"Clear inode of %llu, inode has %u cache items\n",
1183 			(unsigned long long)oi->ip_blkno,
1184 			INODE_CACHE(inode)->ci_num_cached);
1185 
1186 	mlog_bug_on_msg(!(INODE_CACHE(inode)->ci_flags & OCFS2_CACHE_FL_INLINE),
1187 			"Clear inode of %llu, inode has a bad flag\n",
1188 			(unsigned long long)oi->ip_blkno);
1189 
1190 	mlog_bug_on_msg(spin_is_locked(&oi->ip_lock),
1191 			"Clear inode of %llu, inode is locked\n",
1192 			(unsigned long long)oi->ip_blkno);
1193 
1194 	mlog_bug_on_msg(!mutex_trylock(&oi->ip_io_mutex),
1195 			"Clear inode of %llu, io_mutex is locked\n",
1196 			(unsigned long long)oi->ip_blkno);
1197 	mutex_unlock(&oi->ip_io_mutex);
1198 
1199 	/*
1200 	 * down_trylock() returns 0, down_write_trylock() returns 1
1201 	 * kernel 1, world 0
1202 	 */
1203 	mlog_bug_on_msg(!down_write_trylock(&oi->ip_alloc_sem),
1204 			"Clear inode of %llu, alloc_sem is locked\n",
1205 			(unsigned long long)oi->ip_blkno);
1206 	up_write(&oi->ip_alloc_sem);
1207 
1208 	mlog_bug_on_msg(oi->ip_open_count,
1209 			"Clear inode of %llu has open count %d\n",
1210 			(unsigned long long)oi->ip_blkno, oi->ip_open_count);
1211 
1212 	/* Clear all other flags. */
1213 	oi->ip_flags = 0;
1214 	oi->ip_dir_start_lookup = 0;
1215 	oi->ip_blkno = 0ULL;
1216 
1217 	/*
1218 	 * ip_jinode is used to track txns against this inode. We ensure that
1219 	 * the journal is flushed before journal shutdown. Thus it is safe to
1220 	 * have inodes get cleaned up after journal shutdown.
1221 	 */
1222 	jbd2_journal_release_jbd_inode(osb->journal->j_journal,
1223 				       &oi->ip_jinode);
1224 }
1225 
ocfs2_evict_inode(struct inode * inode)1226 void ocfs2_evict_inode(struct inode *inode)
1227 {
1228 	if (!inode->i_nlink ||
1229 	    (OCFS2_I(inode)->ip_flags & OCFS2_INODE_MAYBE_ORPHANED)) {
1230 		ocfs2_delete_inode(inode);
1231 	} else {
1232 		truncate_inode_pages_final(&inode->i_data);
1233 	}
1234 	ocfs2_clear_inode(inode);
1235 }
1236 
1237 /* Called under inode_lock, with no more references on the
1238  * struct inode, so it's safe here to check the flags field
1239  * and to manipulate i_nlink without any other locks. */
ocfs2_drop_inode(struct inode * inode)1240 int ocfs2_drop_inode(struct inode *inode)
1241 {
1242 	struct ocfs2_inode_info *oi = OCFS2_I(inode);
1243 
1244 	trace_ocfs2_drop_inode((unsigned long long)oi->ip_blkno,
1245 				inode->i_nlink, oi->ip_flags);
1246 
1247 	assert_spin_locked(&inode->i_lock);
1248 	inode->i_state |= I_WILL_FREE;
1249 	spin_unlock(&inode->i_lock);
1250 	write_inode_now(inode, 1);
1251 	spin_lock(&inode->i_lock);
1252 	WARN_ON(inode->i_state & I_NEW);
1253 	inode->i_state &= ~I_WILL_FREE;
1254 
1255 	return 1;
1256 }
1257 
1258 /*
1259  * This is called from our getattr.
1260  */
ocfs2_inode_revalidate(struct dentry * dentry)1261 int ocfs2_inode_revalidate(struct dentry *dentry)
1262 {
1263 	struct inode *inode = d_inode(dentry);
1264 	int status = 0;
1265 
1266 	trace_ocfs2_inode_revalidate(inode,
1267 		inode ? (unsigned long long)OCFS2_I(inode)->ip_blkno : 0ULL,
1268 		inode ? (unsigned long long)OCFS2_I(inode)->ip_flags : 0);
1269 
1270 	if (!inode) {
1271 		status = -ENOENT;
1272 		goto bail;
1273 	}
1274 
1275 	spin_lock(&OCFS2_I(inode)->ip_lock);
1276 	if (OCFS2_I(inode)->ip_flags & OCFS2_INODE_DELETED) {
1277 		spin_unlock(&OCFS2_I(inode)->ip_lock);
1278 		status = -ENOENT;
1279 		goto bail;
1280 	}
1281 	spin_unlock(&OCFS2_I(inode)->ip_lock);
1282 
1283 	/* Let ocfs2_inode_lock do the work of updating our struct
1284 	 * inode for us. */
1285 	status = ocfs2_inode_lock(inode, NULL, 0);
1286 	if (status < 0) {
1287 		if (status != -ENOENT)
1288 			mlog_errno(status);
1289 		goto bail;
1290 	}
1291 	ocfs2_inode_unlock(inode, 0);
1292 bail:
1293 	return status;
1294 }
1295 
1296 /*
1297  * Updates a disk inode from a
1298  * struct inode.
1299  * Only takes ip_lock.
1300  */
ocfs2_mark_inode_dirty(handle_t * handle,struct inode * inode,struct buffer_head * bh)1301 int ocfs2_mark_inode_dirty(handle_t *handle,
1302 			   struct inode *inode,
1303 			   struct buffer_head *bh)
1304 {
1305 	int status;
1306 	struct ocfs2_dinode *fe = (struct ocfs2_dinode *) bh->b_data;
1307 
1308 	trace_ocfs2_mark_inode_dirty((unsigned long long)OCFS2_I(inode)->ip_blkno);
1309 
1310 	status = ocfs2_journal_access_di(handle, INODE_CACHE(inode), bh,
1311 					 OCFS2_JOURNAL_ACCESS_WRITE);
1312 	if (status < 0) {
1313 		mlog_errno(status);
1314 		goto leave;
1315 	}
1316 
1317 	spin_lock(&OCFS2_I(inode)->ip_lock);
1318 	fe->i_clusters = cpu_to_le32(OCFS2_I(inode)->ip_clusters);
1319 	ocfs2_get_inode_flags(OCFS2_I(inode));
1320 	fe->i_attr = cpu_to_le32(OCFS2_I(inode)->ip_attr);
1321 	fe->i_dyn_features = cpu_to_le16(OCFS2_I(inode)->ip_dyn_features);
1322 	spin_unlock(&OCFS2_I(inode)->ip_lock);
1323 
1324 	fe->i_size = cpu_to_le64(i_size_read(inode));
1325 	ocfs2_set_links_count(fe, inode->i_nlink);
1326 	fe->i_uid = cpu_to_le32(i_uid_read(inode));
1327 	fe->i_gid = cpu_to_le32(i_gid_read(inode));
1328 	fe->i_mode = cpu_to_le16(inode->i_mode);
1329 	fe->i_atime = cpu_to_le64(inode_get_atime_sec(inode));
1330 	fe->i_atime_nsec = cpu_to_le32(inode_get_atime_nsec(inode));
1331 	fe->i_ctime = cpu_to_le64(inode_get_ctime_sec(inode));
1332 	fe->i_ctime_nsec = cpu_to_le32(inode_get_ctime_nsec(inode));
1333 	fe->i_mtime = cpu_to_le64(inode_get_mtime_sec(inode));
1334 	fe->i_mtime_nsec = cpu_to_le32(inode_get_mtime_nsec(inode));
1335 
1336 	ocfs2_journal_dirty(handle, bh);
1337 	ocfs2_update_inode_fsync_trans(handle, inode, 1);
1338 leave:
1339 	return status;
1340 }
1341 
1342 /*
1343  *
1344  * Updates a struct inode from a disk inode.
1345  * does no i/o, only takes ip_lock.
1346  */
ocfs2_refresh_inode(struct inode * inode,struct ocfs2_dinode * fe)1347 void ocfs2_refresh_inode(struct inode *inode,
1348 			 struct ocfs2_dinode *fe)
1349 {
1350 	spin_lock(&OCFS2_I(inode)->ip_lock);
1351 
1352 	OCFS2_I(inode)->ip_clusters = le32_to_cpu(fe->i_clusters);
1353 	OCFS2_I(inode)->ip_attr = le32_to_cpu(fe->i_attr);
1354 	OCFS2_I(inode)->ip_dyn_features = le16_to_cpu(fe->i_dyn_features);
1355 	ocfs2_set_inode_flags(inode);
1356 	i_size_write(inode, le64_to_cpu(fe->i_size));
1357 	set_nlink(inode, ocfs2_read_links_count(fe));
1358 	i_uid_write(inode, le32_to_cpu(fe->i_uid));
1359 	i_gid_write(inode, le32_to_cpu(fe->i_gid));
1360 	inode->i_mode = le16_to_cpu(fe->i_mode);
1361 	if (S_ISLNK(inode->i_mode) && le32_to_cpu(fe->i_clusters) == 0)
1362 		inode->i_blocks = 0;
1363 	else
1364 		inode->i_blocks = ocfs2_inode_sector_count(inode);
1365 	inode_set_atime(inode, le64_to_cpu(fe->i_atime),
1366 			le32_to_cpu(fe->i_atime_nsec));
1367 	inode_set_mtime(inode, le64_to_cpu(fe->i_mtime),
1368 			le32_to_cpu(fe->i_mtime_nsec));
1369 	inode_set_ctime(inode, le64_to_cpu(fe->i_ctime),
1370 			le32_to_cpu(fe->i_ctime_nsec));
1371 
1372 	spin_unlock(&OCFS2_I(inode)->ip_lock);
1373 }
1374 
ocfs2_validate_inode_block(struct super_block * sb,struct buffer_head * bh)1375 int ocfs2_validate_inode_block(struct super_block *sb,
1376 			       struct buffer_head *bh)
1377 {
1378 	int rc;
1379 	struct ocfs2_dinode *di = (struct ocfs2_dinode *)bh->b_data;
1380 
1381 	trace_ocfs2_validate_inode_block((unsigned long long)bh->b_blocknr);
1382 
1383 	BUG_ON(!buffer_uptodate(bh));
1384 
1385 	/*
1386 	 * If the ecc fails, we return the error but otherwise
1387 	 * leave the filesystem running.  We know any error is
1388 	 * local to this block.
1389 	 */
1390 	rc = ocfs2_validate_meta_ecc(sb, bh->b_data, &di->i_check);
1391 	if (rc) {
1392 		mlog(ML_ERROR, "Checksum failed for dinode %llu\n",
1393 		     (unsigned long long)bh->b_blocknr);
1394 		goto bail;
1395 	}
1396 
1397 	/*
1398 	 * Errors after here are fatal.
1399 	 */
1400 
1401 	rc = -EINVAL;
1402 
1403 	if (!OCFS2_IS_VALID_DINODE(di)) {
1404 		rc = ocfs2_error(sb, "Invalid dinode #%llu: signature = %.*s\n",
1405 				 (unsigned long long)bh->b_blocknr, 7,
1406 				 di->i_signature);
1407 		goto bail;
1408 	}
1409 
1410 	if (le64_to_cpu(di->i_blkno) != bh->b_blocknr) {
1411 		rc = ocfs2_error(sb, "Invalid dinode #%llu: i_blkno is %llu\n",
1412 				 (unsigned long long)bh->b_blocknr,
1413 				 (unsigned long long)le64_to_cpu(di->i_blkno));
1414 		goto bail;
1415 	}
1416 
1417 	if (!(di->i_flags & cpu_to_le32(OCFS2_VALID_FL))) {
1418 		rc = ocfs2_error(sb,
1419 				 "Invalid dinode #%llu: OCFS2_VALID_FL not set\n",
1420 				 (unsigned long long)bh->b_blocknr);
1421 		goto bail;
1422 	}
1423 
1424 	if (le32_to_cpu(di->i_fs_generation) !=
1425 	    OCFS2_SB(sb)->fs_generation) {
1426 		rc = ocfs2_error(sb,
1427 				 "Invalid dinode #%llu: fs_generation is %u\n",
1428 				 (unsigned long long)bh->b_blocknr,
1429 				 le32_to_cpu(di->i_fs_generation));
1430 		goto bail;
1431 	}
1432 
1433 	rc = 0;
1434 
1435 bail:
1436 	return rc;
1437 }
1438 
ocfs2_filecheck_validate_inode_block(struct super_block * sb,struct buffer_head * bh)1439 static int ocfs2_filecheck_validate_inode_block(struct super_block *sb,
1440 						struct buffer_head *bh)
1441 {
1442 	int rc = 0;
1443 	struct ocfs2_dinode *di = (struct ocfs2_dinode *)bh->b_data;
1444 
1445 	trace_ocfs2_filecheck_validate_inode_block(
1446 		(unsigned long long)bh->b_blocknr);
1447 
1448 	BUG_ON(!buffer_uptodate(bh));
1449 
1450 	/*
1451 	 * Call ocfs2_validate_meta_ecc() first since it has ecc repair
1452 	 * function, but we should not return error immediately when ecc
1453 	 * validation fails, because the reason is quite likely the invalid
1454 	 * inode number inputted.
1455 	 */
1456 	rc = ocfs2_validate_meta_ecc(sb, bh->b_data, &di->i_check);
1457 	if (rc) {
1458 		mlog(ML_ERROR,
1459 		     "Filecheck: checksum failed for dinode %llu\n",
1460 		     (unsigned long long)bh->b_blocknr);
1461 		rc = -OCFS2_FILECHECK_ERR_BLOCKECC;
1462 	}
1463 
1464 	if (!OCFS2_IS_VALID_DINODE(di)) {
1465 		mlog(ML_ERROR,
1466 		     "Filecheck: invalid dinode #%llu: signature = %.*s\n",
1467 		     (unsigned long long)bh->b_blocknr, 7, di->i_signature);
1468 		rc = -OCFS2_FILECHECK_ERR_INVALIDINO;
1469 		goto bail;
1470 	} else if (rc)
1471 		goto bail;
1472 
1473 	if (le64_to_cpu(di->i_blkno) != bh->b_blocknr) {
1474 		mlog(ML_ERROR,
1475 		     "Filecheck: invalid dinode #%llu: i_blkno is %llu\n",
1476 		     (unsigned long long)bh->b_blocknr,
1477 		     (unsigned long long)le64_to_cpu(di->i_blkno));
1478 		rc = -OCFS2_FILECHECK_ERR_BLOCKNO;
1479 		goto bail;
1480 	}
1481 
1482 	if (!(di->i_flags & cpu_to_le32(OCFS2_VALID_FL))) {
1483 		mlog(ML_ERROR,
1484 		     "Filecheck: invalid dinode #%llu: OCFS2_VALID_FL "
1485 		     "not set\n",
1486 		     (unsigned long long)bh->b_blocknr);
1487 		rc = -OCFS2_FILECHECK_ERR_VALIDFLAG;
1488 		goto bail;
1489 	}
1490 
1491 	if (le32_to_cpu(di->i_fs_generation) !=
1492 	    OCFS2_SB(sb)->fs_generation) {
1493 		mlog(ML_ERROR,
1494 		     "Filecheck: invalid dinode #%llu: fs_generation is %u\n",
1495 		     (unsigned long long)bh->b_blocknr,
1496 		     le32_to_cpu(di->i_fs_generation));
1497 		rc = -OCFS2_FILECHECK_ERR_GENERATION;
1498 	}
1499 
1500 bail:
1501 	return rc;
1502 }
1503 
ocfs2_filecheck_repair_inode_block(struct super_block * sb,struct buffer_head * bh)1504 static int ocfs2_filecheck_repair_inode_block(struct super_block *sb,
1505 					      struct buffer_head *bh)
1506 {
1507 	int changed = 0;
1508 	struct ocfs2_dinode *di = (struct ocfs2_dinode *)bh->b_data;
1509 
1510 	if (!ocfs2_filecheck_validate_inode_block(sb, bh))
1511 		return 0;
1512 
1513 	trace_ocfs2_filecheck_repair_inode_block(
1514 		(unsigned long long)bh->b_blocknr);
1515 
1516 	if (ocfs2_is_hard_readonly(OCFS2_SB(sb)) ||
1517 	    ocfs2_is_soft_readonly(OCFS2_SB(sb))) {
1518 		mlog(ML_ERROR,
1519 		     "Filecheck: cannot repair dinode #%llu "
1520 		     "on readonly filesystem\n",
1521 		     (unsigned long long)bh->b_blocknr);
1522 		return -OCFS2_FILECHECK_ERR_READONLY;
1523 	}
1524 
1525 	if (buffer_jbd(bh)) {
1526 		mlog(ML_ERROR,
1527 		     "Filecheck: cannot repair dinode #%llu, "
1528 		     "its buffer is in jbd\n",
1529 		     (unsigned long long)bh->b_blocknr);
1530 		return -OCFS2_FILECHECK_ERR_INJBD;
1531 	}
1532 
1533 	if (!OCFS2_IS_VALID_DINODE(di)) {
1534 		/* Cannot fix invalid inode block */
1535 		return -OCFS2_FILECHECK_ERR_INVALIDINO;
1536 	}
1537 
1538 	if (!(di->i_flags & cpu_to_le32(OCFS2_VALID_FL))) {
1539 		/* Cannot just add VALID_FL flag back as a fix,
1540 		 * need more things to check here.
1541 		 */
1542 		return -OCFS2_FILECHECK_ERR_VALIDFLAG;
1543 	}
1544 
1545 	if (le64_to_cpu(di->i_blkno) != bh->b_blocknr) {
1546 		di->i_blkno = cpu_to_le64(bh->b_blocknr);
1547 		changed = 1;
1548 		mlog(ML_ERROR,
1549 		     "Filecheck: reset dinode #%llu: i_blkno to %llu\n",
1550 		     (unsigned long long)bh->b_blocknr,
1551 		     (unsigned long long)le64_to_cpu(di->i_blkno));
1552 	}
1553 
1554 	if (le32_to_cpu(di->i_fs_generation) !=
1555 	    OCFS2_SB(sb)->fs_generation) {
1556 		di->i_fs_generation = cpu_to_le32(OCFS2_SB(sb)->fs_generation);
1557 		changed = 1;
1558 		mlog(ML_ERROR,
1559 		     "Filecheck: reset dinode #%llu: fs_generation to %u\n",
1560 		     (unsigned long long)bh->b_blocknr,
1561 		     le32_to_cpu(di->i_fs_generation));
1562 	}
1563 
1564 	if (ocfs2_dinode_has_extents(di) &&
1565 	    le16_to_cpu(di->id2.i_list.l_next_free_rec) > le16_to_cpu(di->id2.i_list.l_count)) {
1566 		di->id2.i_list.l_next_free_rec = di->id2.i_list.l_count;
1567 		changed = 1;
1568 		mlog(ML_ERROR,
1569 		     "Filecheck: reset dinode #%llu: l_next_free_rec to %u\n",
1570 		     (unsigned long long)bh->b_blocknr,
1571 		     le16_to_cpu(di->id2.i_list.l_next_free_rec));
1572 	}
1573 
1574 	if (changed || ocfs2_validate_meta_ecc(sb, bh->b_data, &di->i_check)) {
1575 		ocfs2_compute_meta_ecc(sb, bh->b_data, &di->i_check);
1576 		mark_buffer_dirty(bh);
1577 		mlog(ML_ERROR,
1578 		     "Filecheck: reset dinode #%llu: compute meta ecc\n",
1579 		     (unsigned long long)bh->b_blocknr);
1580 	}
1581 
1582 	return 0;
1583 }
1584 
1585 static int
ocfs2_filecheck_read_inode_block_full(struct inode * inode,struct buffer_head ** bh,int flags,int type)1586 ocfs2_filecheck_read_inode_block_full(struct inode *inode,
1587 				      struct buffer_head **bh,
1588 				      int flags, int type)
1589 {
1590 	int rc;
1591 	struct buffer_head *tmp = *bh;
1592 
1593 	if (!type) /* Check inode block */
1594 		rc = ocfs2_read_blocks(INODE_CACHE(inode),
1595 				OCFS2_I(inode)->ip_blkno,
1596 				1, &tmp, flags,
1597 				ocfs2_filecheck_validate_inode_block);
1598 	else /* Repair inode block */
1599 		rc = ocfs2_read_blocks(INODE_CACHE(inode),
1600 				OCFS2_I(inode)->ip_blkno,
1601 				1, &tmp, flags,
1602 				ocfs2_filecheck_repair_inode_block);
1603 
1604 	/* If ocfs2_read_blocks() got us a new bh, pass it up. */
1605 	if (!rc && !*bh)
1606 		*bh = tmp;
1607 
1608 	return rc;
1609 }
1610 
ocfs2_read_inode_block_full(struct inode * inode,struct buffer_head ** bh,int flags)1611 int ocfs2_read_inode_block_full(struct inode *inode, struct buffer_head **bh,
1612 				int flags)
1613 {
1614 	int rc;
1615 	struct buffer_head *tmp = *bh;
1616 
1617 	rc = ocfs2_read_blocks(INODE_CACHE(inode), OCFS2_I(inode)->ip_blkno,
1618 			       1, &tmp, flags, ocfs2_validate_inode_block);
1619 
1620 	/* If ocfs2_read_blocks() got us a new bh, pass it up. */
1621 	if (!rc && !*bh)
1622 		*bh = tmp;
1623 
1624 	return rc;
1625 }
1626 
ocfs2_read_inode_block(struct inode * inode,struct buffer_head ** bh)1627 int ocfs2_read_inode_block(struct inode *inode, struct buffer_head **bh)
1628 {
1629 	return ocfs2_read_inode_block_full(inode, bh, 0);
1630 }
1631 
1632 
ocfs2_inode_cache_owner(struct ocfs2_caching_info * ci)1633 static u64 ocfs2_inode_cache_owner(struct ocfs2_caching_info *ci)
1634 {
1635 	struct ocfs2_inode_info *oi = cache_info_to_inode(ci);
1636 
1637 	return oi->ip_blkno;
1638 }
1639 
ocfs2_inode_cache_get_super(struct ocfs2_caching_info * ci)1640 static struct super_block *ocfs2_inode_cache_get_super(struct ocfs2_caching_info *ci)
1641 {
1642 	struct ocfs2_inode_info *oi = cache_info_to_inode(ci);
1643 
1644 	return oi->vfs_inode.i_sb;
1645 }
1646 
ocfs2_inode_cache_lock(struct ocfs2_caching_info * ci)1647 static void ocfs2_inode_cache_lock(struct ocfs2_caching_info *ci)
1648 __acquires(&oi->ip_lock)
1649 {
1650 	struct ocfs2_inode_info *oi = cache_info_to_inode(ci);
1651 
1652 	spin_lock(&oi->ip_lock);
1653 }
1654 
ocfs2_inode_cache_unlock(struct ocfs2_caching_info * ci)1655 static void ocfs2_inode_cache_unlock(struct ocfs2_caching_info *ci)
1656 __releases(&oi->ip_lock)
1657 {
1658 	struct ocfs2_inode_info *oi = cache_info_to_inode(ci);
1659 
1660 	spin_unlock(&oi->ip_lock);
1661 }
1662 
ocfs2_inode_cache_io_lock(struct ocfs2_caching_info * ci)1663 static void ocfs2_inode_cache_io_lock(struct ocfs2_caching_info *ci)
1664 {
1665 	struct ocfs2_inode_info *oi = cache_info_to_inode(ci);
1666 
1667 	mutex_lock(&oi->ip_io_mutex);
1668 }
1669 
ocfs2_inode_cache_io_unlock(struct ocfs2_caching_info * ci)1670 static void ocfs2_inode_cache_io_unlock(struct ocfs2_caching_info *ci)
1671 {
1672 	struct ocfs2_inode_info *oi = cache_info_to_inode(ci);
1673 
1674 	mutex_unlock(&oi->ip_io_mutex);
1675 }
1676 
1677 const struct ocfs2_caching_operations ocfs2_inode_caching_ops = {
1678 	.co_owner		= ocfs2_inode_cache_owner,
1679 	.co_get_super		= ocfs2_inode_cache_get_super,
1680 	.co_cache_lock		= ocfs2_inode_cache_lock,
1681 	.co_cache_unlock	= ocfs2_inode_cache_unlock,
1682 	.co_io_lock		= ocfs2_inode_cache_io_lock,
1683 	.co_io_unlock		= ocfs2_inode_cache_io_unlock,
1684 };
1685 
1686