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 = -EEXIST;
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 = -EEXIST;
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
975 trace_ocfs2_delete_inode(inode->i_ino,
976 (unsigned long long)OCFS2_I(inode)->ip_blkno,
977 is_bad_inode(inode));
978
979
980
981
982 if (is_bad_inode(inode) || !OCFS2_I(inode)->ip_blkno)
983 goto bail;
984
985 if (!ocfs2_inode_is_valid_to_delete(inode)) {
986
987
988
989 ocfs2_cleanup_delete_inode(inode, 0);
990 goto bail;
991 }
992
993 dquot_initialize(inode);
994
995
996
997
998
999 ocfs2_block_signals(&oldset);
1000
1001
1002
1003
1004
1005
1006 status = ocfs2_nfs_sync_lock(OCFS2_SB(inode->i_sb), 0);
1007 if (status < 0) {
1008 mlog(ML_ERROR, "getting nfs sync lock(PR) failed %d\n", status);
1009 ocfs2_cleanup_delete_inode(inode, 0);
1010 goto bail_unblock;
1011 }
1012
1013
1014
1015
1016
1017
1018
1019
1020 status = ocfs2_inode_lock(inode, &di_bh, 1);
1021 if (status < 0) {
1022 if (status != -ENOENT)
1023 mlog_errno(status);
1024 ocfs2_cleanup_delete_inode(inode, 0);
1025 goto bail_unlock_nfs_sync;
1026 }
1027
1028
1029
1030 status = ocfs2_query_inode_wipe(inode, di_bh, &wipe);
1031 if (!wipe || status < 0) {
1032
1033
1034
1035 if (status < 0)
1036 mlog_errno(status);
1037
1038
1039
1040
1041 ocfs2_cleanup_delete_inode(inode, 1);
1042 goto bail_unlock_inode;
1043 }
1044
1045 ocfs2_cleanup_delete_inode(inode, 0);
1046
1047 status = ocfs2_wipe_inode(inode, di_bh);
1048 if (status < 0) {
1049 if (status != -EDEADLK)
1050 mlog_errno(status);
1051 goto bail_unlock_inode;
1052 }
1053
1054
1055
1056
1057
1058
1059
1060
1061
1062
1063 OCFS2_I(inode)->ip_flags |= OCFS2_INODE_DELETED;
1064
1065bail_unlock_inode:
1066 ocfs2_inode_unlock(inode, 1);
1067 brelse(di_bh);
1068
1069bail_unlock_nfs_sync:
1070 ocfs2_nfs_sync_unlock(OCFS2_SB(inode->i_sb), 0);
1071
1072bail_unblock:
1073 ocfs2_unblock_signals(&oldset);
1074bail:
1075 return;
1076}
1077
1078static void ocfs2_clear_inode(struct inode *inode)
1079{
1080 int status;
1081 struct ocfs2_inode_info *oi = OCFS2_I(inode);
1082 struct ocfs2_super *osb = OCFS2_SB(inode->i_sb);
1083
1084 clear_inode(inode);
1085 trace_ocfs2_clear_inode((unsigned long long)oi->ip_blkno,
1086 inode->i_nlink);
1087
1088 mlog_bug_on_msg(OCFS2_SB(inode->i_sb) == NULL,
1089 "Inode=%lu\n", inode->i_ino);
1090
1091 dquot_drop(inode);
1092
1093
1094
1095 ocfs2_open_unlock(inode);
1096
1097
1098
1099 ocfs2_mark_lockres_freeing(osb, &oi->ip_rw_lockres);
1100 ocfs2_mark_lockres_freeing(osb, &oi->ip_inode_lockres);
1101 ocfs2_mark_lockres_freeing(osb, &oi->ip_open_lockres);
1102
1103 ocfs2_resv_discard(&OCFS2_SB(inode->i_sb)->osb_la_resmap,
1104 &oi->ip_la_data_resv);
1105 ocfs2_resv_init_once(&oi->ip_la_data_resv);
1106
1107
1108
1109
1110
1111
1112
1113 if (!(OCFS2_I(inode)->ip_flags & OCFS2_INODE_DELETED))
1114 ocfs2_checkpoint_inode(inode);
1115
1116 mlog_bug_on_msg(!list_empty(&oi->ip_io_markers),
1117 "Clear inode of %llu, inode has io markers\n",
1118 (unsigned long long)oi->ip_blkno);
1119
1120 ocfs2_extent_map_trunc(inode, 0);
1121
1122 status = ocfs2_drop_inode_locks(inode);
1123 if (status < 0)
1124 mlog_errno(status);
1125
1126 ocfs2_lock_res_free(&oi->ip_rw_lockres);
1127 ocfs2_lock_res_free(&oi->ip_inode_lockres);
1128 ocfs2_lock_res_free(&oi->ip_open_lockres);
1129
1130 ocfs2_metadata_cache_exit(INODE_CACHE(inode));
1131
1132 mlog_bug_on_msg(INODE_CACHE(inode)->ci_num_cached,
1133 "Clear inode of %llu, inode has %u cache items\n",
1134 (unsigned long long)oi->ip_blkno,
1135 INODE_CACHE(inode)->ci_num_cached);
1136
1137 mlog_bug_on_msg(!(INODE_CACHE(inode)->ci_flags & OCFS2_CACHE_FL_INLINE),
1138 "Clear inode of %llu, inode has a bad flag\n",
1139 (unsigned long long)oi->ip_blkno);
1140
1141 mlog_bug_on_msg(spin_is_locked(&oi->ip_lock),
1142 "Clear inode of %llu, inode is locked\n",
1143 (unsigned long long)oi->ip_blkno);
1144
1145 mlog_bug_on_msg(!mutex_trylock(&oi->ip_io_mutex),
1146 "Clear inode of %llu, io_mutex is locked\n",
1147 (unsigned long long)oi->ip_blkno);
1148 mutex_unlock(&oi->ip_io_mutex);
1149
1150
1151
1152
1153
1154 mlog_bug_on_msg(!down_write_trylock(&oi->ip_alloc_sem),
1155 "Clear inode of %llu, alloc_sem is locked\n",
1156 (unsigned long long)oi->ip_blkno);
1157 up_write(&oi->ip_alloc_sem);
1158
1159 mlog_bug_on_msg(oi->ip_open_count,
1160 "Clear inode of %llu has open count %d\n",
1161 (unsigned long long)oi->ip_blkno, oi->ip_open_count);
1162
1163
1164 oi->ip_flags = 0;
1165 oi->ip_dir_start_lookup = 0;
1166 oi->ip_blkno = 0ULL;
1167
1168
1169
1170
1171
1172
1173 jbd2_journal_release_jbd_inode(OCFS2_SB(inode->i_sb)->journal->j_journal,
1174 &oi->ip_jinode);
1175}
1176
1177void ocfs2_evict_inode(struct inode *inode)
1178{
1179 if (!inode->i_nlink ||
1180 (OCFS2_I(inode)->ip_flags & OCFS2_INODE_MAYBE_ORPHANED)) {
1181 ocfs2_delete_inode(inode);
1182 } else {
1183 truncate_inode_pages_final(&inode->i_data);
1184 }
1185 ocfs2_clear_inode(inode);
1186}
1187
1188
1189
1190
1191int ocfs2_drop_inode(struct inode *inode)
1192{
1193 struct ocfs2_inode_info *oi = OCFS2_I(inode);
1194 int res;
1195
1196 trace_ocfs2_drop_inode((unsigned long long)oi->ip_blkno,
1197 inode->i_nlink, oi->ip_flags);
1198
1199 if (oi->ip_flags & OCFS2_INODE_MAYBE_ORPHANED)
1200 res = 1;
1201 else
1202 res = generic_drop_inode(inode);
1203
1204 return res;
1205}
1206
1207
1208
1209
1210int ocfs2_inode_revalidate(struct dentry *dentry)
1211{
1212 struct inode *inode = dentry->d_inode;
1213 int status = 0;
1214
1215 trace_ocfs2_inode_revalidate(inode,
1216 inode ? (unsigned long long)OCFS2_I(inode)->ip_blkno : 0ULL,
1217 inode ? (unsigned long long)OCFS2_I(inode)->ip_flags : 0);
1218
1219 if (!inode) {
1220 status = -ENOENT;
1221 goto bail;
1222 }
1223
1224 spin_lock(&OCFS2_I(inode)->ip_lock);
1225 if (OCFS2_I(inode)->ip_flags & OCFS2_INODE_DELETED) {
1226 spin_unlock(&OCFS2_I(inode)->ip_lock);
1227 status = -ENOENT;
1228 goto bail;
1229 }
1230 spin_unlock(&OCFS2_I(inode)->ip_lock);
1231
1232
1233
1234 status = ocfs2_inode_lock(inode, NULL, 0);
1235 if (status < 0) {
1236 if (status != -ENOENT)
1237 mlog_errno(status);
1238 goto bail;
1239 }
1240 ocfs2_inode_unlock(inode, 0);
1241bail:
1242 return status;
1243}
1244
1245
1246
1247
1248
1249
1250int ocfs2_mark_inode_dirty(handle_t *handle,
1251 struct inode *inode,
1252 struct buffer_head *bh)
1253{
1254 int status;
1255 struct ocfs2_dinode *fe = (struct ocfs2_dinode *) bh->b_data;
1256
1257 trace_ocfs2_mark_inode_dirty((unsigned long long)OCFS2_I(inode)->ip_blkno);
1258
1259 status = ocfs2_journal_access_di(handle, INODE_CACHE(inode), bh,
1260 OCFS2_JOURNAL_ACCESS_WRITE);
1261 if (status < 0) {
1262 mlog_errno(status);
1263 goto leave;
1264 }
1265
1266 spin_lock(&OCFS2_I(inode)->ip_lock);
1267 fe->i_clusters = cpu_to_le32(OCFS2_I(inode)->ip_clusters);
1268 ocfs2_get_inode_flags(OCFS2_I(inode));
1269 fe->i_attr = cpu_to_le32(OCFS2_I(inode)->ip_attr);
1270 fe->i_dyn_features = cpu_to_le16(OCFS2_I(inode)->ip_dyn_features);
1271 spin_unlock(&OCFS2_I(inode)->ip_lock);
1272
1273 fe->i_size = cpu_to_le64(i_size_read(inode));
1274 ocfs2_set_links_count(fe, inode->i_nlink);
1275 fe->i_uid = cpu_to_le32(i_uid_read(inode));
1276 fe->i_gid = cpu_to_le32(i_gid_read(inode));
1277 fe->i_mode = cpu_to_le16(inode->i_mode);
1278 fe->i_atime = cpu_to_le64(inode->i_atime.tv_sec);
1279 fe->i_atime_nsec = cpu_to_le32(inode->i_atime.tv_nsec);
1280 fe->i_ctime = cpu_to_le64(inode->i_ctime.tv_sec);
1281 fe->i_ctime_nsec = cpu_to_le32(inode->i_ctime.tv_nsec);
1282 fe->i_mtime = cpu_to_le64(inode->i_mtime.tv_sec);
1283 fe->i_mtime_nsec = cpu_to_le32(inode->i_mtime.tv_nsec);
1284
1285 ocfs2_journal_dirty(handle, bh);
1286 ocfs2_update_inode_fsync_trans(handle, inode, 1);
1287leave:
1288 return status;
1289}
1290
1291
1292
1293
1294
1295
1296void ocfs2_refresh_inode(struct inode *inode,
1297 struct ocfs2_dinode *fe)
1298{
1299 spin_lock(&OCFS2_I(inode)->ip_lock);
1300
1301 OCFS2_I(inode)->ip_clusters = le32_to_cpu(fe->i_clusters);
1302 OCFS2_I(inode)->ip_attr = le32_to_cpu(fe->i_attr);
1303 OCFS2_I(inode)->ip_dyn_features = le16_to_cpu(fe->i_dyn_features);
1304 ocfs2_set_inode_flags(inode);
1305 i_size_write(inode, le64_to_cpu(fe->i_size));
1306 set_nlink(inode, ocfs2_read_links_count(fe));
1307 i_uid_write(inode, le32_to_cpu(fe->i_uid));
1308 i_gid_write(inode, le32_to_cpu(fe->i_gid));
1309 inode->i_mode = le16_to_cpu(fe->i_mode);
1310 if (S_ISLNK(inode->i_mode) && le32_to_cpu(fe->i_clusters) == 0)
1311 inode->i_blocks = 0;
1312 else
1313 inode->i_blocks = ocfs2_inode_sector_count(inode);
1314 inode->i_atime.tv_sec = le64_to_cpu(fe->i_atime);
1315 inode->i_atime.tv_nsec = le32_to_cpu(fe->i_atime_nsec);
1316 inode->i_mtime.tv_sec = le64_to_cpu(fe->i_mtime);
1317 inode->i_mtime.tv_nsec = le32_to_cpu(fe->i_mtime_nsec);
1318 inode->i_ctime.tv_sec = le64_to_cpu(fe->i_ctime);
1319 inode->i_ctime.tv_nsec = le32_to_cpu(fe->i_ctime_nsec);
1320
1321 spin_unlock(&OCFS2_I(inode)->ip_lock);
1322}
1323
1324int ocfs2_validate_inode_block(struct super_block *sb,
1325 struct buffer_head *bh)
1326{
1327 int rc;
1328 struct ocfs2_dinode *di = (struct ocfs2_dinode *)bh->b_data;
1329
1330 trace_ocfs2_validate_inode_block((unsigned long long)bh->b_blocknr);
1331
1332 BUG_ON(!buffer_uptodate(bh));
1333
1334
1335
1336
1337
1338
1339 rc = ocfs2_validate_meta_ecc(sb, bh->b_data, &di->i_check);
1340 if (rc) {
1341 mlog(ML_ERROR, "Checksum failed for dinode %llu\n",
1342 (unsigned long long)bh->b_blocknr);
1343 goto bail;
1344 }
1345
1346
1347
1348
1349
1350 rc = -EINVAL;
1351
1352 if (!OCFS2_IS_VALID_DINODE(di)) {
1353 ocfs2_error(sb, "Invalid dinode #%llu: signature = %.*s\n",
1354 (unsigned long long)bh->b_blocknr, 7,
1355 di->i_signature);
1356 goto bail;
1357 }
1358
1359 if (le64_to_cpu(di->i_blkno) != bh->b_blocknr) {
1360 ocfs2_error(sb, "Invalid dinode #%llu: i_blkno is %llu\n",
1361 (unsigned long long)bh->b_blocknr,
1362 (unsigned long long)le64_to_cpu(di->i_blkno));
1363 goto bail;
1364 }
1365
1366 if (!(di->i_flags & cpu_to_le32(OCFS2_VALID_FL))) {
1367 ocfs2_error(sb,
1368 "Invalid dinode #%llu: OCFS2_VALID_FL not set\n",
1369 (unsigned long long)bh->b_blocknr);
1370 goto bail;
1371 }
1372
1373 if (le32_to_cpu(di->i_fs_generation) !=
1374 OCFS2_SB(sb)->fs_generation) {
1375 ocfs2_error(sb,
1376 "Invalid dinode #%llu: fs_generation is %u\n",
1377 (unsigned long long)bh->b_blocknr,
1378 le32_to_cpu(di->i_fs_generation));
1379 goto bail;
1380 }
1381
1382 rc = 0;
1383
1384bail:
1385 return rc;
1386}
1387
1388int ocfs2_read_inode_block_full(struct inode *inode, struct buffer_head **bh,
1389 int flags)
1390{
1391 int rc;
1392 struct buffer_head *tmp = *bh;
1393
1394 rc = ocfs2_read_blocks(INODE_CACHE(inode), OCFS2_I(inode)->ip_blkno,
1395 1, &tmp, flags, ocfs2_validate_inode_block);
1396
1397
1398 if (!rc && !*bh)
1399 *bh = tmp;
1400
1401 return rc;
1402}
1403
1404int ocfs2_read_inode_block(struct inode *inode, struct buffer_head **bh)
1405{
1406 return ocfs2_read_inode_block_full(inode, bh, 0);
1407}
1408
1409
1410static u64 ocfs2_inode_cache_owner(struct ocfs2_caching_info *ci)
1411{
1412 struct ocfs2_inode_info *oi = cache_info_to_inode(ci);
1413
1414 return oi->ip_blkno;
1415}
1416
1417static struct super_block *ocfs2_inode_cache_get_super(struct ocfs2_caching_info *ci)
1418{
1419 struct ocfs2_inode_info *oi = cache_info_to_inode(ci);
1420
1421 return oi->vfs_inode.i_sb;
1422}
1423
1424static void ocfs2_inode_cache_lock(struct ocfs2_caching_info *ci)
1425{
1426 struct ocfs2_inode_info *oi = cache_info_to_inode(ci);
1427
1428 spin_lock(&oi->ip_lock);
1429}
1430
1431static void ocfs2_inode_cache_unlock(struct ocfs2_caching_info *ci)
1432{
1433 struct ocfs2_inode_info *oi = cache_info_to_inode(ci);
1434
1435 spin_unlock(&oi->ip_lock);
1436}
1437
1438static void ocfs2_inode_cache_io_lock(struct ocfs2_caching_info *ci)
1439{
1440 struct ocfs2_inode_info *oi = cache_info_to_inode(ci);
1441
1442 mutex_lock(&oi->ip_io_mutex);
1443}
1444
1445static void ocfs2_inode_cache_io_unlock(struct ocfs2_caching_info *ci)
1446{
1447 struct ocfs2_inode_info *oi = cache_info_to_inode(ci);
1448
1449 mutex_unlock(&oi->ip_io_mutex);
1450}
1451
1452const struct ocfs2_caching_operations ocfs2_inode_caching_ops = {
1453 .co_owner = ocfs2_inode_cache_owner,
1454 .co_get_super = ocfs2_inode_cache_get_super,
1455 .co_cache_lock = ocfs2_inode_cache_lock,
1456 .co_cache_unlock = ocfs2_inode_cache_unlock,
1457 .co_io_lock = ocfs2_inode_cache_io_lock,
1458 .co_io_unlock = ocfs2_inode_cache_io_unlock,
1459};
1460
1461