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