diff options
| -rw-r--r-- | fs/nilfs2/mdt.c | 111 | ||||
| -rw-r--r-- | fs/nilfs2/mdt.h | 5 | ||||
| -rw-r--r-- | fs/nilfs2/nilfs.h | 1 | ||||
| -rw-r--r-- | fs/nilfs2/super.c | 9 |
4 files changed, 2 insertions, 124 deletions
diff --git a/fs/nilfs2/mdt.c b/fs/nilfs2/mdt.c index 0a2ccfc0d6f9..d60fdb097d52 100644 --- a/fs/nilfs2/mdt.c +++ b/fs/nilfs2/mdt.c | |||
| @@ -36,7 +36,6 @@ | |||
| 36 | 36 | ||
| 37 | #define NILFS_MDT_MAX_RA_BLOCKS (16 - 1) | 37 | #define NILFS_MDT_MAX_RA_BLOCKS (16 - 1) |
| 38 | 38 | ||
| 39 | #define INIT_UNUSED_INODE_FIELDS | ||
| 40 | 39 | ||
| 41 | static int | 40 | static int |
| 42 | nilfs_mdt_insert_new_block(struct inode *inode, unsigned long block, | 41 | nilfs_mdt_insert_new_block(struct inode *inode, unsigned long block, |
| @@ -435,93 +434,6 @@ int nilfs_mdt_init(struct inode *inode, gfp_t gfp_mask, size_t objsz) | |||
| 435 | return 0; | 434 | return 0; |
| 436 | } | 435 | } |
| 437 | 436 | ||
| 438 | /* | ||
| 439 | * NILFS2 uses pseudo inodes for meta data files such as DAT, cpfile, sufile, | ||
| 440 | * ifile, or gcinodes. This allows the B-tree code and segment constructor | ||
| 441 | * to treat them like regular files, and this helps to simplify the | ||
| 442 | * implementation. | ||
| 443 | * On the other hand, some of the pseudo inodes have an irregular point: | ||
| 444 | * They don't have valid inode->i_sb pointer because their lifetimes are | ||
| 445 | * longer than those of the super block structs; they may continue for | ||
| 446 | * several consecutive mounts/umounts. This would need discussions. | ||
| 447 | */ | ||
| 448 | /** | ||
| 449 | * nilfs_mdt_new_common - allocate a pseudo inode for metadata file | ||
| 450 | * @nilfs: nilfs object | ||
| 451 | * @sb: super block instance the metadata file belongs to | ||
| 452 | * @ino: inode number | ||
| 453 | */ | ||
| 454 | struct inode * | ||
| 455 | nilfs_mdt_new_common(struct the_nilfs *nilfs, struct super_block *sb, | ||
| 456 | ino_t ino) | ||
| 457 | { | ||
| 458 | struct inode *inode = nilfs_alloc_inode_common(nilfs); | ||
| 459 | |||
| 460 | if (!inode) | ||
| 461 | return NULL; | ||
| 462 | else { | ||
| 463 | struct address_space * const mapping = &inode->i_data; | ||
| 464 | |||
| 465 | inode->i_sb = sb; /* sb may be NULL for some meta data files */ | ||
| 466 | inode->i_blkbits = nilfs->ns_blocksize_bits; | ||
| 467 | inode->i_flags = 0; | ||
| 468 | atomic_set(&inode->i_count, 1); | ||
| 469 | inode->i_nlink = 1; | ||
| 470 | inode->i_ino = ino; | ||
| 471 | |||
| 472 | #ifdef INIT_UNUSED_INODE_FIELDS | ||
| 473 | atomic_set(&inode->i_writecount, 0); | ||
| 474 | inode->i_size = 0; | ||
| 475 | inode->i_blocks = 0; | ||
| 476 | inode->i_bytes = 0; | ||
| 477 | inode->i_generation = 0; | ||
| 478 | #ifdef CONFIG_QUOTA | ||
| 479 | memset(&inode->i_dquot, 0, sizeof(inode->i_dquot)); | ||
| 480 | #endif | ||
| 481 | inode->i_pipe = NULL; | ||
| 482 | inode->i_bdev = NULL; | ||
| 483 | inode->i_cdev = NULL; | ||
| 484 | inode->i_rdev = 0; | ||
| 485 | #ifdef CONFIG_SECURITY | ||
| 486 | inode->i_security = NULL; | ||
| 487 | #endif | ||
| 488 | inode->dirtied_when = 0; | ||
| 489 | |||
| 490 | INIT_LIST_HEAD(&inode->i_list); | ||
| 491 | INIT_LIST_HEAD(&inode->i_sb_list); | ||
| 492 | inode->i_state = 0; | ||
| 493 | #endif | ||
| 494 | |||
| 495 | spin_lock_init(&inode->i_lock); | ||
| 496 | mutex_init(&inode->i_mutex); | ||
| 497 | init_rwsem(&inode->i_alloc_sem); | ||
| 498 | |||
| 499 | mapping->host = NULL; /* instead of inode */ | ||
| 500 | mapping->flags = 0; | ||
| 501 | mapping->assoc_mapping = NULL; | ||
| 502 | |||
| 503 | inode->i_mapping = mapping; | ||
| 504 | } | ||
| 505 | |||
| 506 | return inode; | ||
| 507 | } | ||
| 508 | |||
| 509 | struct inode *nilfs_mdt_new(struct the_nilfs *nilfs, struct super_block *sb, | ||
| 510 | ino_t ino, size_t objsz) | ||
| 511 | { | ||
| 512 | struct inode *inode; | ||
| 513 | |||
| 514 | inode = nilfs_mdt_new_common(nilfs, sb, ino); | ||
| 515 | if (!inode) | ||
| 516 | return NULL; | ||
| 517 | |||
| 518 | if (nilfs_mdt_init(inode, NILFS_MDT_GFP, objsz) < 0) { | ||
| 519 | nilfs_destroy_inode(inode); | ||
| 520 | return NULL; | ||
| 521 | } | ||
| 522 | return inode; | ||
| 523 | } | ||
| 524 | |||
| 525 | void nilfs_mdt_set_entry_size(struct inode *inode, unsigned entry_size, | 437 | void nilfs_mdt_set_entry_size(struct inode *inode, unsigned entry_size, |
| 526 | unsigned header_size) | 438 | unsigned header_size) |
| 527 | { | 439 | { |
| @@ -688,26 +600,3 @@ void nilfs_mdt_clear_shadow_map(struct inode *inode) | |||
| 688 | truncate_inode_pages(&shadow->frozen_btnodes, 0); | 600 | truncate_inode_pages(&shadow->frozen_btnodes, 0); |
| 689 | up_write(&mi->mi_sem); | 601 | up_write(&mi->mi_sem); |
| 690 | } | 602 | } |
| 691 | |||
| 692 | static void nilfs_mdt_clear(struct inode *inode) | ||
| 693 | { | ||
| 694 | struct nilfs_inode_info *ii = NILFS_I(inode); | ||
| 695 | |||
| 696 | invalidate_mapping_pages(inode->i_mapping, 0, -1); | ||
| 697 | truncate_inode_pages(inode->i_mapping, 0); | ||
| 698 | |||
| 699 | if (test_bit(NILFS_I_BMAP, &ii->i_state)) | ||
| 700 | nilfs_bmap_clear(ii->i_bmap); | ||
| 701 | nilfs_btnode_cache_clear(&ii->i_btnode_cache); | ||
| 702 | } | ||
| 703 | |||
| 704 | void nilfs_mdt_destroy(struct inode *inode) | ||
| 705 | { | ||
| 706 | struct nilfs_mdt_info *mdi = NILFS_MDT(inode); | ||
| 707 | |||
| 708 | if (mdi->mi_palloc_cache) | ||
| 709 | nilfs_palloc_destroy_cache(inode); | ||
| 710 | nilfs_mdt_clear(inode); | ||
| 711 | |||
| 712 | nilfs_destroy_inode(inode); | ||
| 713 | } | ||
diff --git a/fs/nilfs2/mdt.h b/fs/nilfs2/mdt.h index 76356d2899ed..b13734bf3521 100644 --- a/fs/nilfs2/mdt.h +++ b/fs/nilfs2/mdt.h | |||
| @@ -82,11 +82,6 @@ int nilfs_mdt_mark_block_dirty(struct inode *, unsigned long); | |||
| 82 | int nilfs_mdt_fetch_dirty(struct inode *); | 82 | int nilfs_mdt_fetch_dirty(struct inode *); |
| 83 | 83 | ||
| 84 | int nilfs_mdt_init(struct inode *inode, gfp_t gfp_mask, size_t objsz); | 84 | int nilfs_mdt_init(struct inode *inode, gfp_t gfp_mask, size_t objsz); |
| 85 | struct inode *nilfs_mdt_new(struct the_nilfs *, struct super_block *, ino_t, | ||
| 86 | size_t); | ||
| 87 | struct inode *nilfs_mdt_new_common(struct the_nilfs *, struct super_block *, | ||
| 88 | ino_t); | ||
| 89 | void nilfs_mdt_destroy(struct inode *); | ||
| 90 | void nilfs_mdt_set_entry_size(struct inode *, unsigned, unsigned); | 85 | void nilfs_mdt_set_entry_size(struct inode *, unsigned, unsigned); |
| 91 | 86 | ||
| 92 | int nilfs_mdt_setup_shadow_map(struct inode *inode, | 87 | int nilfs_mdt_setup_shadow_map(struct inode *inode, |
diff --git a/fs/nilfs2/nilfs.h b/fs/nilfs2/nilfs.h index f6e276eaaf6f..f7560da5a567 100644 --- a/fs/nilfs2/nilfs.h +++ b/fs/nilfs2/nilfs.h | |||
| @@ -266,7 +266,6 @@ extern int nilfs_mark_inode_dirty(struct inode *); | |||
| 266 | extern void nilfs_dirty_inode(struct inode *); | 266 | extern void nilfs_dirty_inode(struct inode *); |
| 267 | 267 | ||
| 268 | /* super.c */ | 268 | /* super.c */ |
| 269 | extern struct inode *nilfs_alloc_inode_common(struct the_nilfs *); | ||
| 270 | extern struct inode *nilfs_alloc_inode(struct super_block *); | 269 | extern struct inode *nilfs_alloc_inode(struct super_block *); |
| 271 | extern void nilfs_destroy_inode(struct inode *); | 270 | extern void nilfs_destroy_inode(struct inode *); |
| 272 | extern void nilfs_error(struct super_block *, const char *, const char *, ...) | 271 | extern void nilfs_error(struct super_block *, const char *, const char *, ...) |
diff --git a/fs/nilfs2/super.c b/fs/nilfs2/super.c index ab96d26bf7e9..d92ebd5d60d9 100644 --- a/fs/nilfs2/super.c +++ b/fs/nilfs2/super.c | |||
| @@ -146,7 +146,7 @@ void nilfs_warning(struct super_block *sb, const char *function, | |||
| 146 | } | 146 | } |
| 147 | 147 | ||
| 148 | 148 | ||
| 149 | struct inode *nilfs_alloc_inode_common(struct the_nilfs *nilfs) | 149 | struct inode *nilfs_alloc_inode(struct super_block *sb) |
| 150 | { | 150 | { |
| 151 | struct nilfs_inode_info *ii; | 151 | struct nilfs_inode_info *ii; |
| 152 | 152 | ||
| @@ -157,15 +157,10 @@ struct inode *nilfs_alloc_inode_common(struct the_nilfs *nilfs) | |||
| 157 | ii->i_state = 0; | 157 | ii->i_state = 0; |
| 158 | ii->i_cno = 0; | 158 | ii->i_cno = 0; |
| 159 | ii->vfs_inode.i_version = 1; | 159 | ii->vfs_inode.i_version = 1; |
| 160 | nilfs_btnode_cache_init(&ii->i_btnode_cache, nilfs->ns_bdi); | 160 | nilfs_btnode_cache_init(&ii->i_btnode_cache, sb->s_bdi); |
| 161 | return &ii->vfs_inode; | 161 | return &ii->vfs_inode; |
| 162 | } | 162 | } |
| 163 | 163 | ||
| 164 | struct inode *nilfs_alloc_inode(struct super_block *sb) | ||
| 165 | { | ||
| 166 | return nilfs_alloc_inode_common(NILFS_SB(sb)->s_nilfs); | ||
| 167 | } | ||
| 168 | |||
| 169 | void nilfs_destroy_inode(struct inode *inode) | 164 | void nilfs_destroy_inode(struct inode *inode) |
| 170 | { | 165 | { |
| 171 | struct nilfs_mdt_info *mdi = NILFS_MDT(inode); | 166 | struct nilfs_mdt_info *mdi = NILFS_MDT(inode); |
