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