1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26#include <linux/fs.h>
27#include <linux/types.h>
28#include <linux/highmem.h>
29#include <linux/pagemap.h>
30#include <linux/quotaops.h>
31
32#include <asm/byteorder.h>
33
34#define MLOG_MASK_PREFIX ML_INODE
35#include <cluster/masklog.h>
36
37#include "ocfs2.h"
38
39#include "alloc.h"
40#include "dir.h"
41#include "blockcheck.h"
42#include "dlmglue.h"
43#include "extent_map.h"
44#include "file.h"
45#include "heartbeat.h"
46#include "inode.h"
47#include "journal.h"
48#include "namei.h"
49#include "suballoc.h"
50#include "super.h"
51#include "symlink.h"
52#include "sysfile.h"
53#include "uptodate.h"
54#include "xattr.h"
55#include "refcounttree.h"
56
57#include "buffer_head_io.h"
58
59struct ocfs2_find_inode_args
60{
61 u64 fi_blkno;
62 unsigned long fi_ino;
63 unsigned int fi_flags;
64 unsigned int fi_sysfile_type;
65};
66
67static struct lock_class_key ocfs2_sysfile_lock_key[NUM_SYSTEM_INODES];
68
69static int ocfs2_read_locked_inode(struct inode *inode,
70 struct ocfs2_find_inode_args *args);
71static int ocfs2_init_locked_inode(struct inode *inode, void *opaque);
72static int ocfs2_find_actor(struct inode *inode, void *opaque);
73static int ocfs2_truncate_for_delete(struct ocfs2_super *osb,
74 struct inode *inode,
75 struct buffer_head *fe_bh);
76
77void ocfs2_set_inode_flags(struct inode *inode)
78{
79 unsigned int flags = OCFS2_I(inode)->ip_attr;
80
81 inode->i_flags &= ~(S_IMMUTABLE |
82 S_SYNC | S_APPEND | S_NOATIME | S_DIRSYNC);
83
84 if (flags & OCFS2_IMMUTABLE_FL)
85 inode->i_flags |= S_IMMUTABLE;
86
87 if (flags & OCFS2_SYNC_FL)
88 inode->i_flags |= S_SYNC;
89 if (flags & OCFS2_APPEND_FL)
90 inode->i_flags |= S_APPEND;
91 if (flags & OCFS2_NOATIME_FL)
92 inode->i_flags |= S_NOATIME;
93 if (flags & OCFS2_DIRSYNC_FL)
94 inode->i_flags |= S_DIRSYNC;
95}
96
97
98void ocfs2_get_inode_flags(struct ocfs2_inode_info *oi)
99{
100 unsigned int flags = oi->vfs_inode.i_flags;
101
102 oi->ip_attr &= ~(OCFS2_SYNC_FL|OCFS2_APPEND_FL|
103 OCFS2_IMMUTABLE_FL|OCFS2_NOATIME_FL|OCFS2_DIRSYNC_FL);
104 if (flags & S_SYNC)
105 oi->ip_attr |= OCFS2_SYNC_FL;
106 if (flags & S_APPEND)
107 oi->ip_attr |= OCFS2_APPEND_FL;
108 if (flags & S_IMMUTABLE)
109 oi->ip_attr |= OCFS2_IMMUTABLE_FL;
110 if (flags & S_NOATIME)
111 oi->ip_attr |= OCFS2_NOATIME_FL;
112 if (flags & S_DIRSYNC)
113 oi->ip_attr |= OCFS2_DIRSYNC_FL;
114}
115
116struct inode *ocfs2_ilookup(struct super_block *sb, u64 blkno)
117{
118 struct ocfs2_find_inode_args args;
119
120 args.fi_blkno = blkno;
121 args.fi_flags = 0;
122 args.fi_ino = ino_from_blkno(sb, blkno);
123 args.fi_sysfile_type = 0;
124
125 return ilookup5(sb, blkno, ocfs2_find_actor, &args);
126}
127struct inode *ocfs2_iget(struct ocfs2_super *osb, u64 blkno, unsigned flags,
128 int sysfile_type)
129{
130 struct inode *inode = NULL;
131 struct super_block *sb = osb->sb;
132 struct ocfs2_find_inode_args args;
133
134 mlog_entry("(blkno = %llu)\n", (unsigned long long)blkno);
135
136
137
138
139 if (blkno == 0) {
140 inode = ERR_PTR(-EINVAL);
141 mlog_errno(PTR_ERR(inode));
142 goto bail;
143 }
144
145 args.fi_blkno = blkno;
146 args.fi_flags = flags;
147 args.fi_ino = ino_from_blkno(sb, blkno);
148 args.fi_sysfile_type = sysfile_type;
149
150 inode = iget5_locked(sb, args.fi_ino, ocfs2_find_actor,
151 ocfs2_init_locked_inode, &args);
152
153
154
155 if (inode && inode->i_state & I_NEW) {
156 mlog(0, "Inode was not in inode cache, reading it.\n");
157 ocfs2_read_locked_inode(inode, &args);
158 unlock_new_inode(inode);
159 }
160 if (inode == NULL) {
161 inode = ERR_PTR(-ENOMEM);
162 mlog_errno(PTR_ERR(inode));
163 goto bail;
164 }
165 if (is_bad_inode(inode)) {
166 iput(inode);
167 inode = ERR_PTR(-ESTALE);
168 goto bail;
169 }
170
171bail:
172 if (!IS_ERR(inode)) {
173 mlog(0, "returning inode with number %llu\n",
174 (unsigned long long)OCFS2_I(inode)->ip_blkno);
175 mlog_exit_ptr(inode);
176 }
177
178 return inode;
179}
180
181
182
183
184
185
186
187
188
189static int ocfs2_find_actor(struct inode *inode, void *opaque)
190{
191 struct ocfs2_find_inode_args *args = NULL;
192 struct ocfs2_inode_info *oi = OCFS2_I(inode);
193 int ret = 0;
194
195 mlog_entry("(0x%p, %lu, 0x%p)\n", inode, inode->i_ino, opaque);
196
197 args = opaque;
198
199 mlog_bug_on_msg(!inode, "No inode in find actor!\n");
200
201 if (oi->ip_blkno != args->fi_blkno)
202 goto bail;
203
204 ret = 1;
205bail:
206 mlog_exit(ret);
207 return ret;
208}
209
210
211
212
213
214
215static int ocfs2_init_locked_inode(struct inode *inode, void *opaque)
216{
217 struct ocfs2_find_inode_args *args = opaque;
218 static struct lock_class_key ocfs2_quota_ip_alloc_sem_key,
219 ocfs2_file_ip_alloc_sem_key;
220
221 mlog_entry("inode = %p, opaque = %p\n", inode, opaque);
222
223 inode->i_ino = args->fi_ino;
224 OCFS2_I(inode)->ip_blkno = args->fi_blkno;
225 if (args->fi_sysfile_type != 0)
226 lockdep_set_class(&inode->i_mutex,
227 &ocfs2_sysfile_lock_key[args->fi_sysfile_type]);
228 if (args->fi_sysfile_type == USER_QUOTA_SYSTEM_INODE ||
229 args->fi_sysfile_type == GROUP_QUOTA_SYSTEM_INODE ||
230 args->fi_sysfile_type == LOCAL_USER_QUOTA_SYSTEM_INODE ||
231 args->fi_sysfile_type == LOCAL_GROUP_QUOTA_SYSTEM_INODE)
232 lockdep_set_class(&OCFS2_I(inode)->ip_alloc_sem,
233 &ocfs2_quota_ip_alloc_sem_key);
234 else
235 lockdep_set_class(&OCFS2_I(inode)->ip_alloc_sem,
236 &ocfs2_file_ip_alloc_sem_key);
237
238 mlog_exit(0);
239 return 0;
240}
241
242void ocfs2_populate_inode(struct inode *inode, struct ocfs2_dinode *fe,
243 int create_ino)
244{
245 struct super_block *sb;
246 struct ocfs2_super *osb;
247 int use_plocks = 1;
248
249 mlog_entry("(0x%p, size:%llu)\n", inode,
250 (unsigned long long)le64_to_cpu(fe->i_size));
251
252 sb = inode->i_sb;
253 osb = OCFS2_SB(sb);
254
255 if ((osb->s_mount_opt & OCFS2_MOUNT_LOCALFLOCKS) ||
256 ocfs2_mount_local(osb) || !ocfs2_stack_supports_plocks())
257 use_plocks = 0;
258
259
260
261
262
263 BUG_ON(!OCFS2_IS_VALID_DINODE(fe));
264
265
266
267 BUG_ON(!(fe->i_flags & cpu_to_le32(OCFS2_VALID_FL)));
268 BUG_ON(le32_to_cpu(fe->i_fs_generation) != osb->fs_generation);
269
270
271 OCFS2_I(inode)->ip_clusters = le32_to_cpu(fe->i_clusters);
272 OCFS2_I(inode)->ip_attr = le32_to_cpu(fe->i_attr);
273 OCFS2_I(inode)->ip_dyn_features = le16_to_cpu(fe->i_dyn_features);
274
275 inode->i_version = 1;
276 inode->i_generation = le32_to_cpu(fe->i_generation);
277 inode->i_rdev = huge_decode_dev(le64_to_cpu(fe->id1.dev1.i_rdev));
278 inode->i_mode = le16_to_cpu(fe->i_mode);
279 inode->i_uid = le32_to_cpu(fe->i_uid);
280 inode->i_gid = le32_to_cpu(fe->i_gid);
281
282
283 if (S_ISLNK(inode->i_mode) && !fe->i_clusters)
284 inode->i_blocks = 0;
285 else
286 inode->i_blocks = ocfs2_inode_sector_count(inode);
287 inode->i_mapping->a_ops = &ocfs2_aops;
288 inode->i_atime.tv_sec = le64_to_cpu(fe->i_atime);
289 inode->i_atime.tv_nsec = le32_to_cpu(fe->i_atime_nsec);
290 inode->i_mtime.tv_sec = le64_to_cpu(fe->i_mtime);
291 inode->i_mtime.tv_nsec = le32_to_cpu(fe->i_mtime_nsec);
292 inode->i_ctime.tv_sec = le64_to_cpu(fe->i_ctime);
293 inode->i_ctime.tv_nsec = le32_to_cpu(fe->i_ctime_nsec);
294
295 if (OCFS2_I(inode)->ip_blkno != le64_to_cpu(fe->i_blkno))
296 mlog(ML_ERROR,
297 "ip_blkno %llu != i_blkno %llu!\n",
298 (unsigned long long)OCFS2_I(inode)->ip_blkno,
299 (unsigned long long)le64_to_cpu(fe->i_blkno));
300
301 inode->i_nlink = ocfs2_read_links_count(fe);
302
303 if (fe->i_flags & cpu_to_le32(OCFS2_SYSTEM_FL)) {
304 OCFS2_I(inode)->ip_flags |= OCFS2_INODE_SYSTEM_FILE;
305 inode->i_flags |= S_NOQUOTA;
306 }
307
308 if (fe->i_flags & cpu_to_le32(OCFS2_LOCAL_ALLOC_FL)) {
309 OCFS2_I(inode)->ip_flags |= OCFS2_INODE_BITMAP;
310 mlog(0, "local alloc inode: i_ino=%lu\n", inode->i_ino);
311 } else if (fe->i_flags & cpu_to_le32(OCFS2_BITMAP_FL)) {
312 OCFS2_I(inode)->ip_flags |= OCFS2_INODE_BITMAP;
313 } else if (fe->i_flags & cpu_to_le32(OCFS2_QUOTA_FL)) {
314 inode->i_flags |= S_NOQUOTA;
315 } else if (fe->i_flags & cpu_to_le32(OCFS2_SUPER_BLOCK_FL)) {
316 mlog(0, "superblock inode: i_ino=%lu\n", inode->i_ino);
317
318
319 BUG();
320 }
321
322 switch (inode->i_mode & S_IFMT) {
323 case S_IFREG:
324 if (use_plocks)
325 inode->i_fop = &ocfs2_fops;
326 else
327 inode->i_fop = &ocfs2_fops_no_plocks;
328 inode->i_op = &ocfs2_file_iops;
329 i_size_write(inode, le64_to_cpu(fe->i_size));
330 break;
331 case S_IFDIR:
332 inode->i_op = &ocfs2_dir_iops;
333 if (use_plocks)
334 inode->i_fop = &ocfs2_dops;
335 else
336 inode->i_fop = &ocfs2_dops_no_plocks;
337 i_size_write(inode, le64_to_cpu(fe->i_size));
338 OCFS2_I(inode)->ip_dir_lock_gen = 1;
339 break;
340 case S_IFLNK:
341 if (ocfs2_inode_is_fast_symlink(inode))
342 inode->i_op = &ocfs2_fast_symlink_inode_operations;
343 else
344 inode->i_op = &ocfs2_symlink_inode_operations;
345 i_size_write(inode, le64_to_cpu(fe->i_size));
346 break;
347 default:
348 inode->i_op = &ocfs2_special_file_iops;
349 init_special_inode(inode, inode->i_mode,
350 inode->i_rdev);
351 break;
352 }
353
354 if (create_ino) {
355 inode->i_ino = ino_from_blkno(inode->i_sb,
356 le64_to_cpu(fe->i_blkno));
357
358
359
360
361
362
363 BUG_ON(le32_to_cpu(fe->i_flags) & OCFS2_SYSTEM_FL);
364
365 ocfs2_inode_lock_res_init(&OCFS2_I(inode)->ip_inode_lockres,
366 OCFS2_LOCK_TYPE_META, 0, inode);
367
368 ocfs2_inode_lock_res_init(&OCFS2_I(inode)->ip_open_lockres,
369 OCFS2_LOCK_TYPE_OPEN, 0, inode);
370 }
371
372 ocfs2_inode_lock_res_init(&OCFS2_I(inode)->ip_rw_lockres,
373 OCFS2_LOCK_TYPE_RW, inode->i_generation,
374 inode);
375
376 ocfs2_set_inode_flags(inode);
377
378 OCFS2_I(inode)->ip_last_used_slot = 0;
379 OCFS2_I(inode)->ip_last_used_group = 0;
380
381 if (S_ISDIR(inode->i_mode))
382 ocfs2_resv_set_type(&OCFS2_I(inode)->ip_la_data_resv,
383 OCFS2_RESV_FLAG_DIR);
384 mlog_exit_void();
385}
386
387static int ocfs2_read_locked_inode(struct inode *inode,
388 struct ocfs2_find_inode_args *args)
389{
390 struct super_block *sb;
391 struct ocfs2_super *osb;
392 struct ocfs2_dinode *fe;
393 struct buffer_head *bh = NULL;
394 int status, can_lock;
395 u32 generation = 0;
396
397 mlog_entry("(0x%p, 0x%p)\n", inode, args);
398
399 status = -EINVAL;
400 if (inode == NULL || inode->i_sb == NULL) {
401 mlog(ML_ERROR, "bad inode\n");
402 return status;
403 }
404 sb = inode->i_sb;
405 osb = OCFS2_SB(sb);
406
407 if (!args) {
408 mlog(ML_ERROR, "bad inode args\n");
409 make_bad_inode(inode);
410 return status;
411 }
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442 can_lock = !(args->fi_flags & OCFS2_FI_FLAG_SYSFILE)
443 && !(args->fi_flags & OCFS2_FI_FLAG_ORPHAN_RECOVERY)
444 && !ocfs2_mount_local(osb);
445
446
447
448
449
450
451
452
453 if (args->fi_flags & OCFS2_FI_FLAG_SYSFILE)
454 generation = osb->fs_generation;
455
456 ocfs2_inode_lock_res_init(&OCFS2_I(inode)->ip_inode_lockres,
457 OCFS2_LOCK_TYPE_META,
458 generation, inode);
459
460 ocfs2_inode_lock_res_init(&OCFS2_I(inode)->ip_open_lockres,
461 OCFS2_LOCK_TYPE_OPEN,
462 0, inode);
463
464 if (can_lock) {
465 status = ocfs2_open_lock(inode);
466 if (status) {
467 make_bad_inode(inode);
468 mlog_errno(status);
469 return status;
470 }
471 status = ocfs2_inode_lock(inode, NULL, 0);
472 if (status) {
473 make_bad_inode(inode);
474 mlog_errno(status);
475 return status;
476 }
477 }
478
479 if (args->fi_flags & OCFS2_FI_FLAG_ORPHAN_RECOVERY) {
480 status = ocfs2_try_open_lock(inode, 0);
481 if (status) {
482 make_bad_inode(inode);
483 return status;
484 }
485 }
486
487 if (can_lock) {
488 status = ocfs2_read_inode_block_full(inode, &bh,
489 OCFS2_BH_IGNORE_CACHE);
490 } else {
491 status = ocfs2_read_blocks_sync(osb, args->fi_blkno, 1, &bh);
492
493
494
495
496 if (!status && !buffer_jbd(bh))
497 status = ocfs2_validate_inode_block(osb->sb, bh);
498 }
499 if (status < 0) {
500 mlog_errno(status);
501 goto bail;
502 }
503
504 status = -EINVAL;
505 fe = (struct ocfs2_dinode *) bh->b_data;
506
507
508
509
510
511
512 mlog_bug_on_msg(!!(fe->i_flags & cpu_to_le32(OCFS2_SYSTEM_FL)) !=
513 !!(args->fi_flags & OCFS2_FI_FLAG_SYSFILE),
514 "Inode %llu: system file state is ambigous\n",
515 (unsigned long long)args->fi_blkno);
516
517 if (S_ISCHR(le16_to_cpu(fe->i_mode)) ||
518 S_ISBLK(le16_to_cpu(fe->i_mode)))
519 inode->i_rdev = huge_decode_dev(le64_to_cpu(fe->id1.dev1.i_rdev));
520
521 ocfs2_populate_inode(inode, fe, 0);
522
523 BUG_ON(args->fi_blkno != le64_to_cpu(fe->i_blkno));
524
525 status = 0;
526
527bail:
528 if (can_lock)
529 ocfs2_inode_unlock(inode, 0);
530
531 if (status < 0)
532 make_bad_inode(inode);
533
534 if (args && bh)
535 brelse(bh);
536
537 mlog_exit(status);
538 return status;
539}
540
541void ocfs2_sync_blockdev(struct super_block *sb)
542{
543 sync_blockdev(sb->s_bdev);
544}
545
546static int ocfs2_truncate_for_delete(struct ocfs2_super *osb,
547 struct inode *inode,
548 struct buffer_head *fe_bh)
549{
550 int status = 0;
551 struct ocfs2_dinode *fe;
552 handle_t *handle = NULL;
553
554 mlog_entry_void();
555
556 fe = (struct ocfs2_dinode *) fe_bh->b_data;
557
558
559
560
561
562 if (fe->i_clusters) {
563 if (ocfs2_should_order_data(inode))
564 ocfs2_begin_ordered_truncate(inode, 0);
565
566 handle = ocfs2_start_trans(osb, OCFS2_INODE_UPDATE_CREDITS);
567 if (IS_ERR(handle)) {
568 status = PTR_ERR(handle);
569 handle = NULL;
570 mlog_errno(status);
571 goto out;
572 }
573
574 status = ocfs2_journal_access_di(handle, INODE_CACHE(inode),
575 fe_bh,
576 OCFS2_JOURNAL_ACCESS_WRITE);
577 if (status < 0) {
578 mlog_errno(status);
579 goto out;
580 }
581
582 i_size_write(inode, 0);
583
584 status = ocfs2_mark_inode_dirty(handle, inode, fe_bh);
585 if (status < 0) {
586 mlog_errno(status);
587 goto out;
588 }
589
590 ocfs2_commit_trans(osb, handle);
591 handle = NULL;
592
593 status = ocfs2_commit_truncate(osb, inode, fe_bh);
594 if (status < 0) {
595 mlog_errno(status);
596 goto out;
597 }
598 }
599
600out:
601 if (handle)
602 ocfs2_commit_trans(osb, handle);
603 mlog_exit(status);
604 return status;
605}
606
607static int ocfs2_remove_inode(struct inode *inode,
608 struct buffer_head *di_bh,
609 struct inode *orphan_dir_inode,
610 struct buffer_head *orphan_dir_bh)
611{
612 int status;
613 struct inode *inode_alloc_inode = NULL;
614 struct buffer_head *inode_alloc_bh = NULL;
615 handle_t *handle;
616 struct ocfs2_super *osb = OCFS2_SB(inode->i_sb);
617 struct ocfs2_dinode *di = (struct ocfs2_dinode *) di_bh->b_data;
618
619 inode_alloc_inode =
620 ocfs2_get_system_file_inode(osb, INODE_ALLOC_SYSTEM_INODE,
621 le16_to_cpu(di->i_suballoc_slot));
622 if (!inode_alloc_inode) {
623 status = -EEXIST;
624 mlog_errno(status);
625 goto bail;
626 }
627
628 mutex_lock(&inode_alloc_inode->i_mutex);
629 status = ocfs2_inode_lock(inode_alloc_inode, &inode_alloc_bh, 1);
630 if (status < 0) {
631 mutex_unlock(&inode_alloc_inode->i_mutex);
632
633 mlog_errno(status);
634 goto bail;
635 }
636
637 handle = ocfs2_start_trans(osb, OCFS2_DELETE_INODE_CREDITS +
638 ocfs2_quota_trans_credits(inode->i_sb));
639 if (IS_ERR(handle)) {
640 status = PTR_ERR(handle);
641 mlog_errno(status);
642 goto bail_unlock;
643 }
644
645 if (!(OCFS2_I(inode)->ip_flags & OCFS2_INODE_SKIP_ORPHAN_DIR)) {
646 status = ocfs2_orphan_del(osb, handle, orphan_dir_inode, inode,
647 orphan_dir_bh);
648 if (status < 0) {
649 mlog_errno(status);
650 goto bail_commit;
651 }
652 }
653
654
655 status = ocfs2_journal_access_di(handle, INODE_CACHE(inode), di_bh,
656 OCFS2_JOURNAL_ACCESS_WRITE);
657 if (status < 0) {
658 mlog_errno(status);
659 goto bail_commit;
660 }
661
662 di->i_dtime = cpu_to_le64(CURRENT_TIME.tv_sec);
663 di->i_flags &= cpu_to_le32(~(OCFS2_VALID_FL | OCFS2_ORPHANED_FL));
664 ocfs2_journal_dirty(handle, di_bh);
665
666 ocfs2_remove_from_cache(INODE_CACHE(inode), di_bh);
667 dquot_free_inode(inode);
668
669 status = ocfs2_free_dinode(handle, inode_alloc_inode,
670 inode_alloc_bh, di);
671 if (status < 0)
672 mlog_errno(status);
673
674bail_commit:
675 ocfs2_commit_trans(osb, handle);
676bail_unlock:
677 ocfs2_inode_unlock(inode_alloc_inode, 1);
678 mutex_unlock(&inode_alloc_inode->i_mutex);
679 brelse(inode_alloc_bh);
680bail:
681 iput(inode_alloc_inode);
682
683 return status;
684}
685
686
687
688
689
690
691
692static int ocfs2_check_orphan_recovery_state(struct ocfs2_super *osb,
693 int slot)
694{
695 int ret = 0;
696
697 spin_lock(&osb->osb_lock);
698 if (ocfs2_node_map_test_bit(osb, &osb->osb_recovering_orphan_dirs, slot)) {
699 mlog(0, "Recovery is happening on orphan dir %d, will skip "
700 "this inode\n", slot);
701 ret = -EDEADLK;
702 goto out;
703 }
704
705
706 osb->osb_orphan_wipes[slot]++;
707out:
708 spin_unlock(&osb->osb_lock);
709 return ret;
710}
711
712static void ocfs2_signal_wipe_completion(struct ocfs2_super *osb,
713 int slot)
714{
715 spin_lock(&osb->osb_lock);
716 osb->osb_orphan_wipes[slot]--;
717 spin_unlock(&osb->osb_lock);
718
719 wake_up(&osb->osb_wipe_event);
720}
721
722static int ocfs2_wipe_inode(struct inode *inode,
723 struct buffer_head *di_bh)
724{
725 int status, orphaned_slot = -1;
726 struct inode *orphan_dir_inode = NULL;
727 struct buffer_head *orphan_dir_bh = NULL;
728 struct ocfs2_super *osb = OCFS2_SB(inode->i_sb);
729 struct ocfs2_dinode *di = (struct ocfs2_dinode *) di_bh->b_data;
730
731 if (!(OCFS2_I(inode)->ip_flags & OCFS2_INODE_SKIP_ORPHAN_DIR)) {
732 orphaned_slot = le16_to_cpu(di->i_orphaned_slot);
733
734 status = ocfs2_check_orphan_recovery_state(osb, orphaned_slot);
735 if (status)
736 return status;
737
738 orphan_dir_inode = ocfs2_get_system_file_inode(osb,
739 ORPHAN_DIR_SYSTEM_INODE,
740 orphaned_slot);
741 if (!orphan_dir_inode) {
742 status = -EEXIST;
743 mlog_errno(status);
744 goto bail;
745 }
746
747
748
749
750 mutex_lock(&orphan_dir_inode->i_mutex);
751 status = ocfs2_inode_lock(orphan_dir_inode, &orphan_dir_bh, 1);
752 if (status < 0) {
753 mutex_unlock(&orphan_dir_inode->i_mutex);
754
755 mlog_errno(status);
756 goto bail;
757 }
758 }
759
760
761
762
763
764 status = ocfs2_truncate_for_delete(osb, inode, di_bh);
765 if (status < 0) {
766 mlog_errno(status);
767 goto bail_unlock_dir;
768 }
769
770
771 if (S_ISDIR(inode->i_mode)) {
772 status = ocfs2_dx_dir_truncate(inode, di_bh);
773 if (status) {
774 mlog_errno(status);
775 goto bail_unlock_dir;
776 }
777 }
778
779
780 status = ocfs2_xattr_remove(inode, di_bh);
781 if (status < 0) {
782 mlog_errno(status);
783 goto bail_unlock_dir;
784 }
785
786 status = ocfs2_remove_refcount_tree(inode, di_bh);
787 if (status < 0) {
788 mlog_errno(status);
789 goto bail_unlock_dir;
790 }
791
792 status = ocfs2_remove_inode(inode, di_bh, orphan_dir_inode,
793 orphan_dir_bh);
794 if (status < 0)
795 mlog_errno(status);
796
797bail_unlock_dir:
798 if (OCFS2_I(inode)->ip_flags & OCFS2_INODE_SKIP_ORPHAN_DIR)
799 return status;
800
801 ocfs2_inode_unlock(orphan_dir_inode, 1);
802 mutex_unlock(&orphan_dir_inode->i_mutex);
803 brelse(orphan_dir_bh);
804bail:
805 iput(orphan_dir_inode);
806 ocfs2_signal_wipe_completion(osb, orphaned_slot);
807
808 return status;
809}
810
811
812
813static int ocfs2_inode_is_valid_to_delete(struct inode *inode)
814{
815 int ret = 0;
816 struct ocfs2_inode_info *oi = OCFS2_I(inode);
817 struct ocfs2_super *osb = OCFS2_SB(inode->i_sb);
818
819
820
821 if (inode == osb->root_inode) {
822 mlog(ML_ERROR, "Skipping delete of root inode.\n");
823 goto bail;
824 }
825
826
827
828
829
830
831 if (current == osb->dc_task) {
832 mlog(0, "Skipping delete of %lu because we're currently "
833 "in downconvert\n", inode->i_ino);
834 goto bail;
835 }
836
837 spin_lock(&oi->ip_lock);
838
839
840
841 if (oi->ip_flags & OCFS2_INODE_SYSTEM_FILE) {
842 mlog(ML_ERROR, "Skipping delete of system file %llu\n",
843 (unsigned long long)oi->ip_blkno);
844 goto bail_unlock;
845 }
846
847
848
849
850 if (oi->ip_flags & OCFS2_INODE_SKIP_DELETE) {
851 mlog(0, "Skipping delete of %lu because another node "
852 "has done this for us.\n", inode->i_ino);
853 goto bail_unlock;
854 }
855
856 ret = 1;
857bail_unlock:
858 spin_unlock(&oi->ip_lock);
859bail:
860 return ret;
861}
862
863
864
865
866
867static int ocfs2_query_inode_wipe(struct inode *inode,
868 struct buffer_head *di_bh,
869 int *wipe)
870{
871 int status = 0;
872 struct ocfs2_inode_info *oi = OCFS2_I(inode);
873 struct ocfs2_dinode *di;
874
875 *wipe = 0;
876
877
878
879
880 if (!ocfs2_inode_is_valid_to_delete(inode)) {
881 mlog(0, "Skipping delete of %llu because flags changed\n",
882 (unsigned long long)oi->ip_blkno);
883 goto bail;
884 }
885
886
887
888 if (inode->i_nlink) {
889 mlog(0, "Skipping delete of %llu because nlink = %u\n",
890 (unsigned long long)oi->ip_blkno, inode->i_nlink);
891 goto bail;
892 }
893
894
895 di = (struct ocfs2_dinode *) di_bh->b_data;
896 if (!(di->i_flags & cpu_to_le32(OCFS2_ORPHANED_FL)) &&
897 !(oi->ip_flags & OCFS2_INODE_SKIP_ORPHAN_DIR)) {
898
899
900
901
902
903
904
905
906 if (di->i_dyn_features & cpu_to_le16(OCFS2_HAS_REFCOUNT_FL)) {
907 mlog(0, "Reflinked inode %llu is no longer orphaned. "
908 "it shouldn't be deleted\n",
909 (unsigned long long)oi->ip_blkno);
910 goto bail;
911 }
912
913
914 status = -EEXIST;
915 mlog(ML_ERROR,
916 "Inode %llu (on-disk %llu) not orphaned! "
917 "Disk flags 0x%x, inode flags 0x%x\n",
918 (unsigned long long)oi->ip_blkno,
919 (unsigned long long)le64_to_cpu(di->i_blkno),
920 le32_to_cpu(di->i_flags), oi->ip_flags);
921 goto bail;
922 }
923
924
925 if (di->i_dtime) {
926 status = -EEXIST;
927 mlog_errno(status);
928 goto bail;
929 }
930
931
932
933
934
935
936
937
938
939
940
941
942
943 status = ocfs2_try_open_lock(inode, 1);
944 if (status == -EAGAIN) {
945 status = 0;
946 mlog(0, "Skipping delete of %llu because it is in use on "
947 "other nodes\n", (unsigned long long)oi->ip_blkno);
948 goto bail;
949 }
950 if (status < 0) {
951 mlog_errno(status);
952 goto bail;
953 }
954
955 *wipe = 1;
956 mlog(0, "Inode %llu is ok to wipe from orphan dir %u\n",
957 (unsigned long long)oi->ip_blkno,
958 le16_to_cpu(di->i_orphaned_slot));
959
960bail:
961 return status;
962}
963
964
965
966
967static void ocfs2_cleanup_delete_inode(struct inode *inode,
968 int sync_data)
969{
970 mlog(0, "Cleanup inode %llu, sync = %d\n",
971 (unsigned long long)OCFS2_I(inode)->ip_blkno, sync_data);
972 if (sync_data)
973 write_inode_now(inode, 1);
974 truncate_inode_pages(&inode->i_data, 0);
975}
976
977static void ocfs2_delete_inode(struct inode *inode)
978{
979 int wipe, status;
980 sigset_t oldset;
981 struct buffer_head *di_bh = NULL;
982
983 mlog_entry("(inode->i_ino = %lu)\n", inode->i_ino);
984
985
986
987
988 if (is_bad_inode(inode) || !OCFS2_I(inode)->ip_blkno) {
989 mlog(0, "Skipping delete of bad inode\n");
990 goto bail;
991 }
992
993 dquot_initialize(inode);
994
995 if (!ocfs2_inode_is_valid_to_delete(inode)) {
996
997
998
999 ocfs2_cleanup_delete_inode(inode, 0);
1000 goto bail;
1001 }
1002
1003
1004
1005
1006
1007 ocfs2_block_signals(&oldset);
1008
1009
1010
1011
1012
1013
1014 status = ocfs2_nfs_sync_lock(OCFS2_SB(inode->i_sb), 0);
1015 if (status < 0) {
1016 mlog(ML_ERROR, "getting nfs sync lock(PR) failed %d\n", status);
1017 ocfs2_cleanup_delete_inode(inode, 0);
1018 goto bail_unblock;
1019 }
1020
1021
1022
1023
1024
1025
1026
1027
1028 status = ocfs2_inode_lock(inode, &di_bh, 1);
1029 if (status < 0) {
1030 if (status != -ENOENT)
1031 mlog_errno(status);
1032 ocfs2_cleanup_delete_inode(inode, 0);
1033 goto bail_unlock_nfs_sync;
1034 }
1035
1036
1037
1038 status = ocfs2_query_inode_wipe(inode, di_bh, &wipe);
1039 if (!wipe || status < 0) {
1040
1041
1042
1043 if (status < 0)
1044 mlog_errno(status);
1045
1046
1047
1048
1049 ocfs2_cleanup_delete_inode(inode, 1);
1050 goto bail_unlock_inode;
1051 }
1052
1053 ocfs2_cleanup_delete_inode(inode, 0);
1054
1055 status = ocfs2_wipe_inode(inode, di_bh);
1056 if (status < 0) {
1057 if (status != -EDEADLK)
1058 mlog_errno(status);
1059 goto bail_unlock_inode;
1060 }
1061
1062
1063
1064
1065
1066
1067
1068
1069
1070
1071 OCFS2_I(inode)->ip_flags |= OCFS2_INODE_DELETED;
1072
1073bail_unlock_inode:
1074 ocfs2_inode_unlock(inode, 1);
1075 brelse(di_bh);
1076
1077bail_unlock_nfs_sync:
1078 ocfs2_nfs_sync_unlock(OCFS2_SB(inode->i_sb), 0);
1079
1080bail_unblock:
1081 ocfs2_unblock_signals(&oldset);
1082bail:
1083 mlog_exit_void();
1084}
1085
1086static void ocfs2_clear_inode(struct inode *inode)
1087{
1088 int status;
1089 struct ocfs2_inode_info *oi = OCFS2_I(inode);
1090
1091 mlog_entry_void();
1092
1093 end_writeback(inode);
1094 mlog(0, "Clearing inode: %llu, nlink = %u\n",
1095 (unsigned long long)OCFS2_I(inode)->ip_blkno, inode->i_nlink);
1096
1097 mlog_bug_on_msg(OCFS2_SB(inode->i_sb) == NULL,
1098 "Inode=%lu\n", inode->i_ino);
1099
1100 dquot_drop(inode);
1101
1102
1103
1104 ocfs2_open_unlock(inode);
1105
1106
1107
1108 ocfs2_mark_lockres_freeing(&oi->ip_rw_lockres);
1109 ocfs2_mark_lockres_freeing(&oi->ip_inode_lockres);
1110 ocfs2_mark_lockres_freeing(&oi->ip_open_lockres);
1111
1112 ocfs2_resv_discard(&OCFS2_SB(inode->i_sb)->osb_la_resmap,
1113 &oi->ip_la_data_resv);
1114 ocfs2_resv_init_once(&oi->ip_la_data_resv);
1115
1116
1117
1118
1119
1120
1121
1122 if (!(OCFS2_I(inode)->ip_flags & OCFS2_INODE_DELETED))
1123 ocfs2_checkpoint_inode(inode);
1124
1125 mlog_bug_on_msg(!list_empty(&oi->ip_io_markers),
1126 "Clear inode of %llu, inode has io markers\n",
1127 (unsigned long long)oi->ip_blkno);
1128
1129 ocfs2_extent_map_trunc(inode, 0);
1130
1131 status = ocfs2_drop_inode_locks(inode);
1132 if (status < 0)
1133 mlog_errno(status);
1134
1135 ocfs2_lock_res_free(&oi->ip_rw_lockres);
1136 ocfs2_lock_res_free(&oi->ip_inode_lockres);
1137 ocfs2_lock_res_free(&oi->ip_open_lockres);
1138
1139 ocfs2_metadata_cache_exit(INODE_CACHE(inode));
1140
1141 mlog_bug_on_msg(INODE_CACHE(inode)->ci_num_cached,
1142 "Clear inode of %llu, inode has %u cache items\n",
1143 (unsigned long long)oi->ip_blkno,
1144 INODE_CACHE(inode)->ci_num_cached);
1145
1146 mlog_bug_on_msg(!(INODE_CACHE(inode)->ci_flags & OCFS2_CACHE_FL_INLINE),
1147 "Clear inode of %llu, inode has a bad flag\n",
1148 (unsigned long long)oi->ip_blkno);
1149
1150 mlog_bug_on_msg(spin_is_locked(&oi->ip_lock),
1151 "Clear inode of %llu, inode is locked\n",
1152 (unsigned long long)oi->ip_blkno);
1153
1154 mlog_bug_on_msg(!mutex_trylock(&oi->ip_io_mutex),
1155 "Clear inode of %llu, io_mutex is locked\n",
1156 (unsigned long long)oi->ip_blkno);
1157 mutex_unlock(&oi->ip_io_mutex);
1158
1159
1160
1161
1162
1163 mlog_bug_on_msg(!down_write_trylock(&oi->ip_alloc_sem),
1164 "Clear inode of %llu, alloc_sem is locked\n",
1165 (unsigned long long)oi->ip_blkno);
1166 up_write(&oi->ip_alloc_sem);
1167
1168 mlog_bug_on_msg(oi->ip_open_count,
1169 "Clear inode of %llu has open count %d\n",
1170 (unsigned long long)oi->ip_blkno, oi->ip_open_count);
1171
1172
1173 oi->ip_flags = 0;
1174 oi->ip_dir_start_lookup = 0;
1175 oi->ip_blkno = 0ULL;
1176
1177
1178
1179
1180
1181
1182 jbd2_journal_release_jbd_inode(OCFS2_SB(inode->i_sb)->journal->j_journal,
1183 &oi->ip_jinode);
1184
1185 mlog_exit_void();
1186}
1187
1188void ocfs2_evict_inode(struct inode *inode)
1189{
1190 if (!inode->i_nlink ||
1191 (OCFS2_I(inode)->ip_flags & OCFS2_INODE_MAYBE_ORPHANED)) {
1192 ocfs2_delete_inode(inode);
1193 } else {
1194 truncate_inode_pages(&inode->i_data, 0);
1195 }
1196 ocfs2_clear_inode(inode);
1197}
1198
1199
1200
1201
1202int ocfs2_drop_inode(struct inode *inode)
1203{
1204 struct ocfs2_inode_info *oi = OCFS2_I(inode);
1205 int res;
1206
1207 mlog_entry_void();
1208
1209 mlog(0, "Drop inode %llu, nlink = %u, ip_flags = 0x%x\n",
1210 (unsigned long long)oi->ip_blkno, inode->i_nlink, oi->ip_flags);
1211
1212 if (oi->ip_flags & OCFS2_INODE_MAYBE_ORPHANED)
1213 res = 1;
1214 else
1215 res = generic_drop_inode(inode);
1216
1217 mlog_exit_void();
1218 return res;
1219}
1220
1221
1222
1223
1224int ocfs2_inode_revalidate(struct dentry *dentry)
1225{
1226 struct inode *inode = dentry->d_inode;
1227 int status = 0;
1228
1229 mlog_entry("(inode = 0x%p, ino = %llu)\n", inode,
1230 inode ? (unsigned long long)OCFS2_I(inode)->ip_blkno : 0ULL);
1231
1232 if (!inode) {
1233 mlog(0, "eep, no inode!\n");
1234 status = -ENOENT;
1235 goto bail;
1236 }
1237
1238 spin_lock(&OCFS2_I(inode)->ip_lock);
1239 if (OCFS2_I(inode)->ip_flags & OCFS2_INODE_DELETED) {
1240 spin_unlock(&OCFS2_I(inode)->ip_lock);
1241 mlog(0, "inode deleted!\n");
1242 status = -ENOENT;
1243 goto bail;
1244 }
1245 spin_unlock(&OCFS2_I(inode)->ip_lock);
1246
1247
1248
1249 status = ocfs2_inode_lock(inode, NULL, 0);
1250 if (status < 0) {
1251 if (status != -ENOENT)
1252 mlog_errno(status);
1253 goto bail;
1254 }
1255 ocfs2_inode_unlock(inode, 0);
1256bail:
1257 mlog_exit(status);
1258
1259 return status;
1260}
1261
1262
1263
1264
1265
1266
1267int ocfs2_mark_inode_dirty(handle_t *handle,
1268 struct inode *inode,
1269 struct buffer_head *bh)
1270{
1271 int status;
1272 struct ocfs2_dinode *fe = (struct ocfs2_dinode *) bh->b_data;
1273
1274 mlog_entry("(inode %llu)\n",
1275 (unsigned long long)OCFS2_I(inode)->ip_blkno);
1276
1277 status = ocfs2_journal_access_di(handle, INODE_CACHE(inode), bh,
1278 OCFS2_JOURNAL_ACCESS_WRITE);
1279 if (status < 0) {
1280 mlog_errno(status);
1281 goto leave;
1282 }
1283
1284 spin_lock(&OCFS2_I(inode)->ip_lock);
1285 fe->i_clusters = cpu_to_le32(OCFS2_I(inode)->ip_clusters);
1286 ocfs2_get_inode_flags(OCFS2_I(inode));
1287 fe->i_attr = cpu_to_le32(OCFS2_I(inode)->ip_attr);
1288 fe->i_dyn_features = cpu_to_le16(OCFS2_I(inode)->ip_dyn_features);
1289 spin_unlock(&OCFS2_I(inode)->ip_lock);
1290
1291 fe->i_size = cpu_to_le64(i_size_read(inode));
1292 ocfs2_set_links_count(fe, inode->i_nlink);
1293 fe->i_uid = cpu_to_le32(inode->i_uid);
1294 fe->i_gid = cpu_to_le32(inode->i_gid);
1295 fe->i_mode = cpu_to_le16(inode->i_mode);
1296 fe->i_atime = cpu_to_le64(inode->i_atime.tv_sec);
1297 fe->i_atime_nsec = cpu_to_le32(inode->i_atime.tv_nsec);
1298 fe->i_ctime = cpu_to_le64(inode->i_ctime.tv_sec);
1299 fe->i_ctime_nsec = cpu_to_le32(inode->i_ctime.tv_nsec);
1300 fe->i_mtime = cpu_to_le64(inode->i_mtime.tv_sec);
1301 fe->i_mtime_nsec = cpu_to_le32(inode->i_mtime.tv_nsec);
1302
1303 ocfs2_journal_dirty(handle, bh);
1304leave:
1305 mlog_exit(status);
1306 return status;
1307}
1308
1309
1310
1311
1312
1313
1314void ocfs2_refresh_inode(struct inode *inode,
1315 struct ocfs2_dinode *fe)
1316{
1317 spin_lock(&OCFS2_I(inode)->ip_lock);
1318
1319 OCFS2_I(inode)->ip_clusters = le32_to_cpu(fe->i_clusters);
1320 OCFS2_I(inode)->ip_attr = le32_to_cpu(fe->i_attr);
1321 OCFS2_I(inode)->ip_dyn_features = le16_to_cpu(fe->i_dyn_features);
1322 ocfs2_set_inode_flags(inode);
1323 i_size_write(inode, le64_to_cpu(fe->i_size));
1324 inode->i_nlink = ocfs2_read_links_count(fe);
1325 inode->i_uid = le32_to_cpu(fe->i_uid);
1326 inode->i_gid = le32_to_cpu(fe->i_gid);
1327 inode->i_mode = le16_to_cpu(fe->i_mode);
1328 if (S_ISLNK(inode->i_mode) && le32_to_cpu(fe->i_clusters) == 0)
1329 inode->i_blocks = 0;
1330 else
1331 inode->i_blocks = ocfs2_inode_sector_count(inode);
1332 inode->i_atime.tv_sec = le64_to_cpu(fe->i_atime);
1333 inode->i_atime.tv_nsec = le32_to_cpu(fe->i_atime_nsec);
1334 inode->i_mtime.tv_sec = le64_to_cpu(fe->i_mtime);
1335 inode->i_mtime.tv_nsec = le32_to_cpu(fe->i_mtime_nsec);
1336 inode->i_ctime.tv_sec = le64_to_cpu(fe->i_ctime);
1337 inode->i_ctime.tv_nsec = le32_to_cpu(fe->i_ctime_nsec);
1338
1339 spin_unlock(&OCFS2_I(inode)->ip_lock);
1340}
1341
1342int ocfs2_validate_inode_block(struct super_block *sb,
1343 struct buffer_head *bh)
1344{
1345 int rc;
1346 struct ocfs2_dinode *di = (struct ocfs2_dinode *)bh->b_data;
1347
1348 mlog(0, "Validating dinode %llu\n",
1349 (unsigned long long)bh->b_blocknr);
1350
1351 BUG_ON(!buffer_uptodate(bh));
1352
1353
1354
1355
1356
1357
1358 rc = ocfs2_validate_meta_ecc(sb, bh->b_data, &di->i_check);
1359 if (rc) {
1360 mlog(ML_ERROR, "Checksum failed for dinode %llu\n",
1361 (unsigned long long)bh->b_blocknr);
1362 goto bail;
1363 }
1364
1365
1366
1367
1368
1369 rc = -EINVAL;
1370
1371 if (!OCFS2_IS_VALID_DINODE(di)) {
1372 ocfs2_error(sb, "Invalid dinode #%llu: signature = %.*s\n",
1373 (unsigned long long)bh->b_blocknr, 7,
1374 di->i_signature);
1375 goto bail;
1376 }
1377
1378 if (le64_to_cpu(di->i_blkno) != bh->b_blocknr) {
1379 ocfs2_error(sb, "Invalid dinode #%llu: i_blkno is %llu\n",
1380 (unsigned long long)bh->b_blocknr,
1381 (unsigned long long)le64_to_cpu(di->i_blkno));
1382 goto bail;
1383 }
1384
1385 if (!(di->i_flags & cpu_to_le32(OCFS2_VALID_FL))) {
1386 ocfs2_error(sb,
1387 "Invalid dinode #%llu: OCFS2_VALID_FL not set\n",
1388 (unsigned long long)bh->b_blocknr);
1389 goto bail;
1390 }
1391
1392 if (le32_to_cpu(di->i_fs_generation) !=
1393 OCFS2_SB(sb)->fs_generation) {
1394 ocfs2_error(sb,
1395 "Invalid dinode #%llu: fs_generation is %u\n",
1396 (unsigned long long)bh->b_blocknr,
1397 le32_to_cpu(di->i_fs_generation));
1398 goto bail;
1399 }
1400
1401 rc = 0;
1402
1403bail:
1404 return rc;
1405}
1406
1407int ocfs2_read_inode_block_full(struct inode *inode, struct buffer_head **bh,
1408 int flags)
1409{
1410 int rc;
1411 struct buffer_head *tmp = *bh;
1412
1413 rc = ocfs2_read_blocks(INODE_CACHE(inode), OCFS2_I(inode)->ip_blkno,
1414 1, &tmp, flags, ocfs2_validate_inode_block);
1415
1416
1417 if (!rc && !*bh)
1418 *bh = tmp;
1419
1420 return rc;
1421}
1422
1423int ocfs2_read_inode_block(struct inode *inode, struct buffer_head **bh)
1424{
1425 return ocfs2_read_inode_block_full(inode, bh, 0);
1426}
1427
1428
1429static u64 ocfs2_inode_cache_owner(struct ocfs2_caching_info *ci)
1430{
1431 struct ocfs2_inode_info *oi = cache_info_to_inode(ci);
1432
1433 return oi->ip_blkno;
1434}
1435
1436static struct super_block *ocfs2_inode_cache_get_super(struct ocfs2_caching_info *ci)
1437{
1438 struct ocfs2_inode_info *oi = cache_info_to_inode(ci);
1439
1440 return oi->vfs_inode.i_sb;
1441}
1442
1443static void ocfs2_inode_cache_lock(struct ocfs2_caching_info *ci)
1444{
1445 struct ocfs2_inode_info *oi = cache_info_to_inode(ci);
1446
1447 spin_lock(&oi->ip_lock);
1448}
1449
1450static void ocfs2_inode_cache_unlock(struct ocfs2_caching_info *ci)
1451{
1452 struct ocfs2_inode_info *oi = cache_info_to_inode(ci);
1453
1454 spin_unlock(&oi->ip_lock);
1455}
1456
1457static void ocfs2_inode_cache_io_lock(struct ocfs2_caching_info *ci)
1458{
1459 struct ocfs2_inode_info *oi = cache_info_to_inode(ci);
1460
1461 mutex_lock(&oi->ip_io_mutex);
1462}
1463
1464static void ocfs2_inode_cache_io_unlock(struct ocfs2_caching_info *ci)
1465{
1466 struct ocfs2_inode_info *oi = cache_info_to_inode(ci);
1467
1468 mutex_unlock(&oi->ip_io_mutex);
1469}
1470
1471const struct ocfs2_caching_operations ocfs2_inode_caching_ops = {
1472 .co_owner = ocfs2_inode_cache_owner,
1473 .co_get_super = ocfs2_inode_cache_get_super,
1474 .co_cache_lock = ocfs2_inode_cache_lock,
1475 .co_cache_unlock = ocfs2_inode_cache_unlock,
1476 .co_io_lock = ocfs2_inode_cache_io_lock,
1477 .co_io_unlock = ocfs2_inode_cache_io_unlock,
1478};
1479
1480