diff options
Diffstat (limited to 'fs/nilfs2/inode.c')
-rw-r--r-- | fs/nilfs2/inode.c | 23 |
1 files changed, 16 insertions, 7 deletions
diff --git a/fs/nilfs2/inode.c b/fs/nilfs2/inode.c index c0aa27490c02..587f18432832 100644 --- a/fs/nilfs2/inode.c +++ b/fs/nilfs2/inode.c | |||
@@ -74,14 +74,14 @@ int nilfs_get_block(struct inode *inode, sector_t blkoff, | |||
74 | struct buffer_head *bh_result, int create) | 74 | struct buffer_head *bh_result, int create) |
75 | { | 75 | { |
76 | struct nilfs_inode_info *ii = NILFS_I(inode); | 76 | struct nilfs_inode_info *ii = NILFS_I(inode); |
77 | struct the_nilfs *nilfs = inode->i_sb->s_fs_info; | ||
77 | __u64 blknum = 0; | 78 | __u64 blknum = 0; |
78 | int err = 0, ret; | 79 | int err = 0, ret; |
79 | struct inode *dat = NILFS_I_NILFS(inode)->ns_dat; | ||
80 | unsigned maxblocks = bh_result->b_size >> inode->i_blkbits; | 80 | unsigned maxblocks = bh_result->b_size >> inode->i_blkbits; |
81 | 81 | ||
82 | down_read(&NILFS_MDT(dat)->mi_sem); | 82 | down_read(&NILFS_MDT(nilfs->ns_dat)->mi_sem); |
83 | ret = nilfs_bmap_lookup_contig(ii->i_bmap, blkoff, &blknum, maxblocks); | 83 | ret = nilfs_bmap_lookup_contig(ii->i_bmap, blkoff, &blknum, maxblocks); |
84 | up_read(&NILFS_MDT(dat)->mi_sem); | 84 | up_read(&NILFS_MDT(nilfs->ns_dat)->mi_sem); |
85 | if (ret >= 0) { /* found */ | 85 | if (ret >= 0) { /* found */ |
86 | map_bh(bh_result, inode->i_sb, blknum); | 86 | map_bh(bh_result, inode->i_sb, blknum); |
87 | if (ret > 0) | 87 | if (ret > 0) |
@@ -596,6 +596,16 @@ void nilfs_write_inode_common(struct inode *inode, | |||
596 | raw_inode->i_flags = cpu_to_le32(ii->i_flags); | 596 | raw_inode->i_flags = cpu_to_le32(ii->i_flags); |
597 | raw_inode->i_generation = cpu_to_le32(inode->i_generation); | 597 | raw_inode->i_generation = cpu_to_le32(inode->i_generation); |
598 | 598 | ||
599 | if (NILFS_ROOT_METADATA_FILE(inode->i_ino)) { | ||
600 | struct the_nilfs *nilfs = inode->i_sb->s_fs_info; | ||
601 | |||
602 | /* zero-fill unused portion in the case of super root block */ | ||
603 | raw_inode->i_xattr = 0; | ||
604 | raw_inode->i_pad = 0; | ||
605 | memset((void *)raw_inode + sizeof(*raw_inode), 0, | ||
606 | nilfs->ns_inode_size - sizeof(*raw_inode)); | ||
607 | } | ||
608 | |||
599 | if (has_bmap) | 609 | if (has_bmap) |
600 | nilfs_bmap_write(ii->i_bmap, raw_inode); | 610 | nilfs_bmap_write(ii->i_bmap, raw_inode); |
601 | else if (S_ISCHR(inode->i_mode) || S_ISBLK(inode->i_mode)) | 611 | else if (S_ISCHR(inode->i_mode) || S_ISBLK(inode->i_mode)) |
@@ -872,8 +882,7 @@ int nilfs_set_file_dirty(struct inode *inode, unsigned nr_dirty) | |||
872 | return -EINVAL; /* NILFS_I_DIRTY may remain for | 882 | return -EINVAL; /* NILFS_I_DIRTY may remain for |
873 | freeing inode */ | 883 | freeing inode */ |
874 | } | 884 | } |
875 | list_del(&ii->i_dirty); | 885 | list_move_tail(&ii->i_dirty, &nilfs->ns_dirty_files); |
876 | list_add_tail(&ii->i_dirty, &nilfs->ns_dirty_files); | ||
877 | set_bit(NILFS_I_QUEUED, &ii->i_state); | 886 | set_bit(NILFS_I_QUEUED, &ii->i_state); |
878 | } | 887 | } |
879 | spin_unlock(&nilfs->ns_inode_lock); | 888 | spin_unlock(&nilfs->ns_inode_lock); |
@@ -892,7 +901,7 @@ int nilfs_mark_inode_dirty(struct inode *inode) | |||
892 | return err; | 901 | return err; |
893 | } | 902 | } |
894 | nilfs_update_inode(inode, ibh); | 903 | nilfs_update_inode(inode, ibh); |
895 | nilfs_mdt_mark_buffer_dirty(ibh); | 904 | mark_buffer_dirty(ibh); |
896 | nilfs_mdt_mark_dirty(NILFS_I(inode)->i_root->ifile); | 905 | nilfs_mdt_mark_dirty(NILFS_I(inode)->i_root->ifile); |
897 | brelse(ibh); | 906 | brelse(ibh); |
898 | return 0; | 907 | return 0; |
@@ -931,7 +940,7 @@ void nilfs_dirty_inode(struct inode *inode) | |||
931 | int nilfs_fiemap(struct inode *inode, struct fiemap_extent_info *fieinfo, | 940 | int nilfs_fiemap(struct inode *inode, struct fiemap_extent_info *fieinfo, |
932 | __u64 start, __u64 len) | 941 | __u64 start, __u64 len) |
933 | { | 942 | { |
934 | struct the_nilfs *nilfs = NILFS_I_NILFS(inode); | 943 | struct the_nilfs *nilfs = inode->i_sb->s_fs_info; |
935 | __u64 logical = 0, phys = 0, size = 0; | 944 | __u64 logical = 0, phys = 0, size = 0; |
936 | __u32 flags = 0; | 945 | __u32 flags = 0; |
937 | loff_t isize; | 946 | loff_t isize; |