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 if (args && bh)
544 brelse(bh);
545
546 return status;
547}
548
549void ocfs2_sync_blockdev(struct super_block *sb)
550{
551 sync_blockdev(sb->s_bdev);
552}
553
554static int ocfs2_truncate_for_delete(struct ocfs2_super *osb,
555 struct inode *inode,
556 struct buffer_head *fe_bh)
557{
558 int status = 0;
559 struct ocfs2_dinode *fe;
560 handle_t *handle = NULL;
561
562 fe = (struct ocfs2_dinode *) fe_bh->b_data;
563
564
565
566
567
568 if (fe->i_clusters) {
569 if (ocfs2_should_order_data(inode))
570 ocfs2_begin_ordered_truncate(inode, 0);
571
572 handle = ocfs2_start_trans(osb, OCFS2_INODE_UPDATE_CREDITS);
573 if (IS_ERR(handle)) {
574 status = PTR_ERR(handle);
575 handle = NULL;
576 mlog_errno(status);
577 goto out;
578 }
579
580 status = ocfs2_journal_access_di(handle, INODE_CACHE(inode),
581 fe_bh,
582 OCFS2_JOURNAL_ACCESS_WRITE);
583 if (status < 0) {
584 mlog_errno(status);
585 goto out;
586 }
587
588 i_size_write(inode, 0);
589
590 status = ocfs2_mark_inode_dirty(handle, inode, fe_bh);
591 if (status < 0) {
592 mlog_errno(status);
593 goto out;
594 }
595
596 ocfs2_commit_trans(osb, handle);
597 handle = NULL;
598
599 status = ocfs2_commit_truncate(osb, inode, fe_bh);
600 if (status < 0) {
601 mlog_errno(status);
602 goto out;
603 }
604 }
605
606out:
607 if (handle)
608 ocfs2_commit_trans(osb, handle);
609 return status;
610}
611
612static int ocfs2_remove_inode(struct inode *inode,
613 struct buffer_head *di_bh,
614 struct inode *orphan_dir_inode,
615 struct buffer_head *orphan_dir_bh)
616{
617 int status;
618 struct inode *inode_alloc_inode = NULL;
619 struct buffer_head *inode_alloc_bh = NULL;
620 handle_t *handle;
621 struct ocfs2_super *osb = OCFS2_SB(inode->i_sb);
622 struct ocfs2_dinode *di = (struct ocfs2_dinode *) di_bh->b_data;
623
624 inode_alloc_inode =
625 ocfs2_get_system_file_inode(osb, INODE_ALLOC_SYSTEM_INODE,
626 le16_to_cpu(di->i_suballoc_slot));
627 if (!inode_alloc_inode) {
628 status = -EEXIST;
629 mlog_errno(status);
630 goto bail;
631 }
632
633 mutex_lock(&inode_alloc_inode->i_mutex);
634 status = ocfs2_inode_lock(inode_alloc_inode, &inode_alloc_bh, 1);
635 if (status < 0) {
636 mutex_unlock(&inode_alloc_inode->i_mutex);
637
638 mlog_errno(status);
639 goto bail;
640 }
641
642 handle = ocfs2_start_trans(osb, OCFS2_DELETE_INODE_CREDITS +
643 ocfs2_quota_trans_credits(inode->i_sb));
644 if (IS_ERR(handle)) {
645 status = PTR_ERR(handle);
646 mlog_errno(status);
647 goto bail_unlock;
648 }
649
650 if (!(OCFS2_I(inode)->ip_flags & OCFS2_INODE_SKIP_ORPHAN_DIR)) {
651 status = ocfs2_orphan_del(osb, handle, orphan_dir_inode, inode,
652 orphan_dir_bh);
653 if (status < 0) {
654 mlog_errno(status);
655 goto bail_commit;
656 }
657 }
658
659
660 status = ocfs2_journal_access_di(handle, INODE_CACHE(inode), di_bh,
661 OCFS2_JOURNAL_ACCESS_WRITE);
662 if (status < 0) {
663 mlog_errno(status);
664 goto bail_commit;
665 }
666
667 di->i_dtime = cpu_to_le64(CURRENT_TIME.tv_sec);
668 di->i_flags &= cpu_to_le32(~(OCFS2_VALID_FL | OCFS2_ORPHANED_FL));
669 ocfs2_journal_dirty(handle, di_bh);
670
671 ocfs2_remove_from_cache(INODE_CACHE(inode), di_bh);
672 dquot_free_inode(inode);
673
674 status = ocfs2_free_dinode(handle, inode_alloc_inode,
675 inode_alloc_bh, di);
676 if (status < 0)
677 mlog_errno(status);
678
679bail_commit:
680 ocfs2_commit_trans(osb, handle);
681bail_unlock:
682 ocfs2_inode_unlock(inode_alloc_inode, 1);
683 mutex_unlock(&inode_alloc_inode->i_mutex);
684 brelse(inode_alloc_bh);
685bail:
686 iput(inode_alloc_inode);
687
688 return status;
689}
690
691
692
693
694
695
696
697static int ocfs2_check_orphan_recovery_state(struct ocfs2_super *osb,
698 int slot)
699{
700 int ret = 0;
701
702 spin_lock(&osb->osb_lock);
703 if (ocfs2_node_map_test_bit(osb, &osb->osb_recovering_orphan_dirs, slot)) {
704 ret = -EDEADLK;
705 goto out;
706 }
707
708
709 osb->osb_orphan_wipes[slot]++;
710out:
711 spin_unlock(&osb->osb_lock);
712 trace_ocfs2_check_orphan_recovery_state(slot, ret);
713 return ret;
714}
715
716static void ocfs2_signal_wipe_completion(struct ocfs2_super *osb,
717 int slot)
718{
719 spin_lock(&osb->osb_lock);
720 osb->osb_orphan_wipes[slot]--;
721 spin_unlock(&osb->osb_lock);
722
723 wake_up(&osb->osb_wipe_event);
724}
725
726static int ocfs2_wipe_inode(struct inode *inode,
727 struct buffer_head *di_bh)
728{
729 int status, orphaned_slot = -1;
730 struct inode *orphan_dir_inode = NULL;
731 struct buffer_head *orphan_dir_bh = NULL;
732 struct ocfs2_super *osb = OCFS2_SB(inode->i_sb);
733 struct ocfs2_dinode *di = (struct ocfs2_dinode *) di_bh->b_data;
734
735 if (!(OCFS2_I(inode)->ip_flags & OCFS2_INODE_SKIP_ORPHAN_DIR)) {
736 orphaned_slot = le16_to_cpu(di->i_orphaned_slot);
737
738 status = ocfs2_check_orphan_recovery_state(osb, orphaned_slot);
739 if (status)
740 return status;
741
742 orphan_dir_inode = ocfs2_get_system_file_inode(osb,
743 ORPHAN_DIR_SYSTEM_INODE,
744 orphaned_slot);
745 if (!orphan_dir_inode) {
746 status = -EEXIST;
747 mlog_errno(status);
748 goto bail;
749 }
750
751
752
753
754 mutex_lock(&orphan_dir_inode->i_mutex);
755 status = ocfs2_inode_lock(orphan_dir_inode, &orphan_dir_bh, 1);
756 if (status < 0) {
757 mutex_unlock(&orphan_dir_inode->i_mutex);
758
759 mlog_errno(status);
760 goto bail;
761 }
762 }
763
764
765
766
767
768 status = ocfs2_truncate_for_delete(osb, inode, di_bh);
769 if (status < 0) {
770 mlog_errno(status);
771 goto bail_unlock_dir;
772 }
773
774
775 if (S_ISDIR(inode->i_mode)) {
776 status = ocfs2_dx_dir_truncate(inode, di_bh);
777 if (status) {
778 mlog_errno(status);
779 goto bail_unlock_dir;
780 }
781 }
782
783
784 status = ocfs2_xattr_remove(inode, di_bh);
785 if (status < 0) {
786 mlog_errno(status);
787 goto bail_unlock_dir;
788 }
789
790 status = ocfs2_remove_refcount_tree(inode, di_bh);
791 if (status < 0) {
792 mlog_errno(status);
793 goto bail_unlock_dir;
794 }
795
796 status = ocfs2_remove_inode(inode, di_bh, orphan_dir_inode,
797 orphan_dir_bh);
798 if (status < 0)
799 mlog_errno(status);
800
801bail_unlock_dir:
802 if (OCFS2_I(inode)->ip_flags & OCFS2_INODE_SKIP_ORPHAN_DIR)
803 return status;
804
805 ocfs2_inode_unlock(orphan_dir_inode, 1);
806 mutex_unlock(&orphan_dir_inode->i_mutex);
807 brelse(orphan_dir_bh);
808bail:
809 iput(orphan_dir_inode);
810 ocfs2_signal_wipe_completion(osb, orphaned_slot);
811
812 return status;
813}
814
815
816
817static int ocfs2_inode_is_valid_to_delete(struct inode *inode)
818{
819 int ret = 0;
820 struct ocfs2_inode_info *oi = OCFS2_I(inode);
821 struct ocfs2_super *osb = OCFS2_SB(inode->i_sb);
822
823 trace_ocfs2_inode_is_valid_to_delete(current, osb->dc_task,
824 (unsigned long long)oi->ip_blkno,
825 oi->ip_flags);
826
827
828
829 if (inode == osb->root_inode) {
830 mlog(ML_ERROR, "Skipping delete of root inode.\n");
831 goto bail;
832 }
833
834
835
836
837
838
839
840
841 if (current == osb->dc_task)
842 goto bail;
843
844 spin_lock(&oi->ip_lock);
845
846
847
848 if (oi->ip_flags & OCFS2_INODE_SYSTEM_FILE) {
849 mlog(ML_ERROR, "Skipping delete of system file %llu\n",
850 (unsigned long long)oi->ip_blkno);
851 goto bail_unlock;
852 }
853
854 ret = 1;
855bail_unlock:
856 spin_unlock(&oi->ip_lock);
857bail:
858 return ret;
859}
860
861
862
863
864
865static int ocfs2_query_inode_wipe(struct inode *inode,
866 struct buffer_head *di_bh,
867 int *wipe)
868{
869 int status = 0, reason = 0;
870 struct ocfs2_inode_info *oi = OCFS2_I(inode);
871 struct ocfs2_dinode *di;
872
873 *wipe = 0;
874
875 trace_ocfs2_query_inode_wipe_begin((unsigned long long)oi->ip_blkno,
876 inode->i_nlink);
877
878
879
880
881 if (!ocfs2_inode_is_valid_to_delete(inode)) {
882 reason = 1;
883 goto bail;
884 }
885
886
887
888 if (inode->i_nlink)
889 goto bail;
890
891
892 di = (struct ocfs2_dinode *) di_bh->b_data;
893 if (!(di->i_flags & cpu_to_le32(OCFS2_ORPHANED_FL)) &&
894 !(oi->ip_flags & OCFS2_INODE_SKIP_ORPHAN_DIR)) {
895
896
897
898
899
900
901
902
903 if (di->i_dyn_features & cpu_to_le16(OCFS2_HAS_REFCOUNT_FL)) {
904 reason = 2;
905 goto bail;
906 }
907
908
909 status = -EEXIST;
910 mlog(ML_ERROR,
911 "Inode %llu (on-disk %llu) not orphaned! "
912 "Disk flags 0x%x, inode flags 0x%x\n",
913 (unsigned long long)oi->ip_blkno,
914 (unsigned long long)le64_to_cpu(di->i_blkno),
915 le32_to_cpu(di->i_flags), oi->ip_flags);
916 goto bail;
917 }
918
919
920 if (di->i_dtime) {
921 status = -EEXIST;
922 mlog_errno(status);
923 goto bail;
924 }
925
926
927
928
929
930
931
932
933
934
935
936
937
938 status = ocfs2_try_open_lock(inode, 1);
939 if (status == -EAGAIN) {
940 status = 0;
941 reason = 3;
942 goto bail;
943 }
944 if (status < 0) {
945 mlog_errno(status);
946 goto bail;
947 }
948
949 *wipe = 1;
950 trace_ocfs2_query_inode_wipe_succ(le16_to_cpu(di->i_orphaned_slot));
951
952bail:
953 trace_ocfs2_query_inode_wipe_end(status, reason);
954 return status;
955}
956
957
958
959
960static void ocfs2_cleanup_delete_inode(struct inode *inode,
961 int sync_data)
962{
963 trace_ocfs2_cleanup_delete_inode(
964 (unsigned long long)OCFS2_I(inode)->ip_blkno, sync_data);
965 if (sync_data)
966 filemap_write_and_wait(inode->i_mapping);
967 truncate_inode_pages_final(&inode->i_data);
968}
969
970static void ocfs2_delete_inode(struct inode *inode)
971{
972 int wipe, status;
973 sigset_t oldset;
974 struct buffer_head *di_bh = 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
1030
1031 status = ocfs2_query_inode_wipe(inode, di_bh, &wipe);
1032 if (!wipe || status < 0) {
1033
1034
1035
1036 if (status < 0)
1037 mlog_errno(status);
1038
1039
1040
1041
1042 ocfs2_cleanup_delete_inode(inode, 1);
1043 goto bail_unlock_inode;
1044 }
1045
1046 ocfs2_cleanup_delete_inode(inode, 0);
1047
1048 status = ocfs2_wipe_inode(inode, di_bh);
1049 if (status < 0) {
1050 if (status != -EDEADLK)
1051 mlog_errno(status);
1052 goto bail_unlock_inode;
1053 }
1054
1055
1056
1057
1058
1059
1060
1061
1062
1063
1064 OCFS2_I(inode)->ip_flags |= OCFS2_INODE_DELETED;
1065
1066bail_unlock_inode:
1067 ocfs2_inode_unlock(inode, 1);
1068 brelse(di_bh);
1069
1070bail_unlock_nfs_sync:
1071 ocfs2_nfs_sync_unlock(OCFS2_SB(inode->i_sb), 0);
1072
1073bail_unblock:
1074 ocfs2_unblock_signals(&oldset);
1075bail:
1076 return;
1077}
1078
1079static void ocfs2_clear_inode(struct inode *inode)
1080{
1081 int status;
1082 struct ocfs2_inode_info *oi = OCFS2_I(inode);
1083 struct ocfs2_super *osb = OCFS2_SB(inode->i_sb);
1084
1085 clear_inode(inode);
1086 trace_ocfs2_clear_inode((unsigned long long)oi->ip_blkno,
1087 inode->i_nlink);
1088
1089 mlog_bug_on_msg(OCFS2_SB(inode->i_sb) == NULL,
1090 "Inode=%lu\n", inode->i_ino);
1091
1092 dquot_drop(inode);
1093
1094
1095
1096 ocfs2_open_unlock(inode);
1097
1098
1099
1100 ocfs2_mark_lockres_freeing(osb, &oi->ip_rw_lockres);
1101 ocfs2_mark_lockres_freeing(osb, &oi->ip_inode_lockres);
1102 ocfs2_mark_lockres_freeing(osb, &oi->ip_open_lockres);
1103
1104 ocfs2_resv_discard(&OCFS2_SB(inode->i_sb)->osb_la_resmap,
1105 &oi->ip_la_data_resv);
1106 ocfs2_resv_init_once(&oi->ip_la_data_resv);
1107
1108
1109
1110
1111
1112
1113
1114 if (!(OCFS2_I(inode)->ip_flags & OCFS2_INODE_DELETED))
1115 ocfs2_checkpoint_inode(inode);
1116
1117 mlog_bug_on_msg(!list_empty(&oi->ip_io_markers),
1118 "Clear inode of %llu, inode has io markers\n",
1119 (unsigned long long)oi->ip_blkno);
1120
1121 ocfs2_extent_map_trunc(inode, 0);
1122
1123 status = ocfs2_drop_inode_locks(inode);
1124 if (status < 0)
1125 mlog_errno(status);
1126
1127 ocfs2_lock_res_free(&oi->ip_rw_lockres);
1128 ocfs2_lock_res_free(&oi->ip_inode_lockres);
1129 ocfs2_lock_res_free(&oi->ip_open_lockres);
1130
1131 ocfs2_metadata_cache_exit(INODE_CACHE(inode));
1132
1133 mlog_bug_on_msg(INODE_CACHE(inode)->ci_num_cached,
1134 "Clear inode of %llu, inode has %u cache items\n",
1135 (unsigned long long)oi->ip_blkno,
1136 INODE_CACHE(inode)->ci_num_cached);
1137
1138 mlog_bug_on_msg(!(INODE_CACHE(inode)->ci_flags & OCFS2_CACHE_FL_INLINE),
1139 "Clear inode of %llu, inode has a bad flag\n",
1140 (unsigned long long)oi->ip_blkno);
1141
1142 mlog_bug_on_msg(spin_is_locked(&oi->ip_lock),
1143 "Clear inode of %llu, inode is locked\n",
1144 (unsigned long long)oi->ip_blkno);
1145
1146 mlog_bug_on_msg(!mutex_trylock(&oi->ip_io_mutex),
1147 "Clear inode of %llu, io_mutex is locked\n",
1148 (unsigned long long)oi->ip_blkno);
1149 mutex_unlock(&oi->ip_io_mutex);
1150
1151
1152
1153
1154
1155 mlog_bug_on_msg(!down_write_trylock(&oi->ip_alloc_sem),
1156 "Clear inode of %llu, alloc_sem is locked\n",
1157 (unsigned long long)oi->ip_blkno);
1158 up_write(&oi->ip_alloc_sem);
1159
1160 mlog_bug_on_msg(oi->ip_open_count,
1161 "Clear inode of %llu has open count %d\n",
1162 (unsigned long long)oi->ip_blkno, oi->ip_open_count);
1163
1164
1165 oi->ip_flags = 0;
1166 oi->ip_dir_start_lookup = 0;
1167 oi->ip_blkno = 0ULL;
1168
1169
1170
1171
1172
1173
1174 jbd2_journal_release_jbd_inode(OCFS2_SB(inode->i_sb)->journal->j_journal,
1175 &oi->ip_jinode);
1176}
1177
1178void ocfs2_evict_inode(struct inode *inode)
1179{
1180 if (!inode->i_nlink ||
1181 (OCFS2_I(inode)->ip_flags & OCFS2_INODE_MAYBE_ORPHANED)) {
1182 ocfs2_delete_inode(inode);
1183 } else {
1184 truncate_inode_pages_final(&inode->i_data);
1185 }
1186 ocfs2_clear_inode(inode);
1187}
1188
1189
1190
1191
1192int ocfs2_drop_inode(struct inode *inode)
1193{
1194 struct ocfs2_inode_info *oi = OCFS2_I(inode);
1195 int res;
1196
1197 trace_ocfs2_drop_inode((unsigned long long)oi->ip_blkno,
1198 inode->i_nlink, oi->ip_flags);
1199
1200 if (oi->ip_flags & OCFS2_INODE_MAYBE_ORPHANED)
1201 res = 1;
1202 else
1203 res = generic_drop_inode(inode);
1204
1205 return res;
1206}
1207
1208
1209
1210
1211int ocfs2_inode_revalidate(struct dentry *dentry)
1212{
1213 struct inode *inode = dentry->d_inode;
1214 int status = 0;
1215
1216 trace_ocfs2_inode_revalidate(inode,
1217 inode ? (unsigned long long)OCFS2_I(inode)->ip_blkno : 0ULL,
1218 inode ? (unsigned long long)OCFS2_I(inode)->ip_flags : 0);
1219
1220 if (!inode) {
1221 status = -ENOENT;
1222 goto bail;
1223 }
1224
1225 spin_lock(&OCFS2_I(inode)->ip_lock);
1226 if (OCFS2_I(inode)->ip_flags & OCFS2_INODE_DELETED) {
1227 spin_unlock(&OCFS2_I(inode)->ip_lock);
1228 status = -ENOENT;
1229 goto bail;
1230 }
1231 spin_unlock(&OCFS2_I(inode)->ip_lock);
1232
1233
1234
1235 status = ocfs2_inode_lock(inode, NULL, 0);
1236 if (status < 0) {
1237 if (status != -ENOENT)
1238 mlog_errno(status);
1239 goto bail;
1240 }
1241 ocfs2_inode_unlock(inode, 0);
1242bail:
1243 return status;
1244}
1245
1246
1247
1248
1249
1250
1251int ocfs2_mark_inode_dirty(handle_t *handle,
1252 struct inode *inode,
1253 struct buffer_head *bh)
1254{
1255 int status;
1256 struct ocfs2_dinode *fe = (struct ocfs2_dinode *) bh->b_data;
1257
1258 trace_ocfs2_mark_inode_dirty((unsigned long long)OCFS2_I(inode)->ip_blkno);
1259
1260 status = ocfs2_journal_access_di(handle, INODE_CACHE(inode), bh,
1261 OCFS2_JOURNAL_ACCESS_WRITE);
1262 if (status < 0) {
1263 mlog_errno(status);
1264 goto leave;
1265 }
1266
1267 spin_lock(&OCFS2_I(inode)->ip_lock);
1268 fe->i_clusters = cpu_to_le32(OCFS2_I(inode)->ip_clusters);
1269 ocfs2_get_inode_flags(OCFS2_I(inode));
1270 fe->i_attr = cpu_to_le32(OCFS2_I(inode)->ip_attr);
1271 fe->i_dyn_features = cpu_to_le16(OCFS2_I(inode)->ip_dyn_features);
1272 spin_unlock(&OCFS2_I(inode)->ip_lock);
1273
1274 fe->i_size = cpu_to_le64(i_size_read(inode));
1275 ocfs2_set_links_count(fe, inode->i_nlink);
1276 fe->i_uid = cpu_to_le32(i_uid_read(inode));
1277 fe->i_gid = cpu_to_le32(i_gid_read(inode));
1278 fe->i_mode = cpu_to_le16(inode->i_mode);
1279 fe->i_atime = cpu_to_le64(inode->i_atime.tv_sec);
1280 fe->i_atime_nsec = cpu_to_le32(inode->i_atime.tv_nsec);
1281 fe->i_ctime = cpu_to_le64(inode->i_ctime.tv_sec);
1282 fe->i_ctime_nsec = cpu_to_le32(inode->i_ctime.tv_nsec);
1283 fe->i_mtime = cpu_to_le64(inode->i_mtime.tv_sec);
1284 fe->i_mtime_nsec = cpu_to_le32(inode->i_mtime.tv_nsec);
1285
1286 ocfs2_journal_dirty(handle, bh);
1287 ocfs2_update_inode_fsync_trans(handle, inode, 1);
1288leave:
1289 return status;
1290}
1291
1292
1293
1294
1295
1296
1297void ocfs2_refresh_inode(struct inode *inode,
1298 struct ocfs2_dinode *fe)
1299{
1300 spin_lock(&OCFS2_I(inode)->ip_lock);
1301
1302 OCFS2_I(inode)->ip_clusters = le32_to_cpu(fe->i_clusters);
1303 OCFS2_I(inode)->ip_attr = le32_to_cpu(fe->i_attr);
1304 OCFS2_I(inode)->ip_dyn_features = le16_to_cpu(fe->i_dyn_features);
1305 ocfs2_set_inode_flags(inode);
1306 i_size_write(inode, le64_to_cpu(fe->i_size));
1307 set_nlink(inode, ocfs2_read_links_count(fe));
1308 i_uid_write(inode, le32_to_cpu(fe->i_uid));
1309 i_gid_write(inode, le32_to_cpu(fe->i_gid));
1310 inode->i_mode = le16_to_cpu(fe->i_mode);
1311 if (S_ISLNK(inode->i_mode) && le32_to_cpu(fe->i_clusters) == 0)
1312 inode->i_blocks = 0;
1313 else
1314 inode->i_blocks = ocfs2_inode_sector_count(inode);
1315 inode->i_atime.tv_sec = le64_to_cpu(fe->i_atime);
1316 inode->i_atime.tv_nsec = le32_to_cpu(fe->i_atime_nsec);
1317 inode->i_mtime.tv_sec = le64_to_cpu(fe->i_mtime);
1318 inode->i_mtime.tv_nsec = le32_to_cpu(fe->i_mtime_nsec);
1319 inode->i_ctime.tv_sec = le64_to_cpu(fe->i_ctime);
1320 inode->i_ctime.tv_nsec = le32_to_cpu(fe->i_ctime_nsec);
1321
1322 spin_unlock(&OCFS2_I(inode)->ip_lock);
1323}
1324
1325int ocfs2_validate_inode_block(struct super_block *sb,
1326 struct buffer_head *bh)
1327{
1328 int rc;
1329 struct ocfs2_dinode *di = (struct ocfs2_dinode *)bh->b_data;
1330
1331 trace_ocfs2_validate_inode_block((unsigned long long)bh->b_blocknr);
1332
1333 BUG_ON(!buffer_uptodate(bh));
1334
1335
1336
1337
1338
1339
1340 rc = ocfs2_validate_meta_ecc(sb, bh->b_data, &di->i_check);
1341 if (rc) {
1342 mlog(ML_ERROR, "Checksum failed for dinode %llu\n",
1343 (unsigned long long)bh->b_blocknr);
1344 goto bail;
1345 }
1346
1347
1348
1349
1350
1351 rc = -EINVAL;
1352
1353 if (!OCFS2_IS_VALID_DINODE(di)) {
1354 ocfs2_error(sb, "Invalid dinode #%llu: signature = %.*s\n",
1355 (unsigned long long)bh->b_blocknr, 7,
1356 di->i_signature);
1357 goto bail;
1358 }
1359
1360 if (le64_to_cpu(di->i_blkno) != bh->b_blocknr) {
1361 ocfs2_error(sb, "Invalid dinode #%llu: i_blkno is %llu\n",
1362 (unsigned long long)bh->b_blocknr,
1363 (unsigned long long)le64_to_cpu(di->i_blkno));
1364 goto bail;
1365 }
1366
1367 if (!(di->i_flags & cpu_to_le32(OCFS2_VALID_FL))) {
1368 ocfs2_error(sb,
1369 "Invalid dinode #%llu: OCFS2_VALID_FL not set\n",
1370 (unsigned long long)bh->b_blocknr);
1371 goto bail;
1372 }
1373
1374 if (le32_to_cpu(di->i_fs_generation) !=
1375 OCFS2_SB(sb)->fs_generation) {
1376 ocfs2_error(sb,
1377 "Invalid dinode #%llu: fs_generation is %u\n",
1378 (unsigned long long)bh->b_blocknr,
1379 le32_to_cpu(di->i_fs_generation));
1380 goto bail;
1381 }
1382
1383 rc = 0;
1384
1385bail:
1386 return rc;
1387}
1388
1389int ocfs2_read_inode_block_full(struct inode *inode, struct buffer_head **bh,
1390 int flags)
1391{
1392 int rc;
1393 struct buffer_head *tmp = *bh;
1394
1395 rc = ocfs2_read_blocks(INODE_CACHE(inode), OCFS2_I(inode)->ip_blkno,
1396 1, &tmp, flags, ocfs2_validate_inode_block);
1397
1398
1399 if (!rc && !*bh)
1400 *bh = tmp;
1401
1402 return rc;
1403}
1404
1405int ocfs2_read_inode_block(struct inode *inode, struct buffer_head **bh)
1406{
1407 return ocfs2_read_inode_block_full(inode, bh, 0);
1408}
1409
1410
1411static u64 ocfs2_inode_cache_owner(struct ocfs2_caching_info *ci)
1412{
1413 struct ocfs2_inode_info *oi = cache_info_to_inode(ci);
1414
1415 return oi->ip_blkno;
1416}
1417
1418static struct super_block *ocfs2_inode_cache_get_super(struct ocfs2_caching_info *ci)
1419{
1420 struct ocfs2_inode_info *oi = cache_info_to_inode(ci);
1421
1422 return oi->vfs_inode.i_sb;
1423}
1424
1425static void ocfs2_inode_cache_lock(struct ocfs2_caching_info *ci)
1426{
1427 struct ocfs2_inode_info *oi = cache_info_to_inode(ci);
1428
1429 spin_lock(&oi->ip_lock);
1430}
1431
1432static void ocfs2_inode_cache_unlock(struct ocfs2_caching_info *ci)
1433{
1434 struct ocfs2_inode_info *oi = cache_info_to_inode(ci);
1435
1436 spin_unlock(&oi->ip_lock);
1437}
1438
1439static void ocfs2_inode_cache_io_lock(struct ocfs2_caching_info *ci)
1440{
1441 struct ocfs2_inode_info *oi = cache_info_to_inode(ci);
1442
1443 mutex_lock(&oi->ip_io_mutex);
1444}
1445
1446static void ocfs2_inode_cache_io_unlock(struct ocfs2_caching_info *ci)
1447{
1448 struct ocfs2_inode_info *oi = cache_info_to_inode(ci);
1449
1450 mutex_unlock(&oi->ip_io_mutex);
1451}
1452
1453const struct ocfs2_caching_operations ocfs2_inode_caching_ops = {
1454 .co_owner = ocfs2_inode_cache_owner,
1455 .co_get_super = ocfs2_inode_cache_get_super,
1456 .co_cache_lock = ocfs2_inode_cache_lock,
1457 .co_cache_unlock = ocfs2_inode_cache_unlock,
1458 .co_io_lock = ocfs2_inode_cache_io_lock,
1459 .co_io_unlock = ocfs2_inode_cache_io_unlock,
1460};
1461
1462