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