aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--fs/ocfs2/dir.c43
-rw-r--r--fs/ocfs2/inode.c50
-rw-r--r--fs/ocfs2/inode.h2
3 files changed, 43 insertions, 52 deletions
diff --git a/fs/ocfs2/dir.c b/fs/ocfs2/dir.c
index 459e6b8467dc..ef2bb856f731 100644
--- a/fs/ocfs2/dir.c
+++ b/fs/ocfs2/dir.c
@@ -82,6 +82,49 @@ static int ocfs2_do_extend_dir(struct super_block *sb,
82 struct ocfs2_alloc_context *meta_ac, 82 struct ocfs2_alloc_context *meta_ac,
83 struct buffer_head **new_bh); 83 struct buffer_head **new_bh);
84 84
85static struct buffer_head *ocfs2_bread(struct inode *inode,
86 int block, int *err, int reada)
87{
88 struct buffer_head *bh = NULL;
89 int tmperr;
90 u64 p_blkno;
91 int readflags = OCFS2_BH_CACHED;
92
93 if (reada)
94 readflags |= OCFS2_BH_READAHEAD;
95
96 if (((u64)block << inode->i_sb->s_blocksize_bits) >=
97 i_size_read(inode)) {
98 BUG_ON(!reada);
99 return NULL;
100 }
101
102 down_read(&OCFS2_I(inode)->ip_alloc_sem);
103 tmperr = ocfs2_extent_map_get_blocks(inode, block, &p_blkno, NULL,
104 NULL);
105 up_read(&OCFS2_I(inode)->ip_alloc_sem);
106 if (tmperr < 0) {
107 mlog_errno(tmperr);
108 goto fail;
109 }
110
111 tmperr = ocfs2_read_blocks(inode, p_blkno, 1, &bh, readflags);
112 if (tmperr < 0)
113 goto fail;
114
115 tmperr = 0;
116
117 *err = 0;
118 return bh;
119
120fail:
121 brelse(bh);
122 bh = NULL;
123
124 *err = -EIO;
125 return NULL;
126}
127
85/* 128/*
86 * bh passed here can be an inode block or a dir data block, depending 129 * bh passed here can be an inode block or a dir data block, depending
87 * on the inode inline data flag. 130 * on the inode inline data flag.
diff --git a/fs/ocfs2/inode.c b/fs/ocfs2/inode.c
index c5ee9e3cf80b..8381c26b21a8 100644
--- a/fs/ocfs2/inode.c
+++ b/fs/ocfs2/inode.c
@@ -1133,56 +1133,6 @@ void ocfs2_drop_inode(struct inode *inode)
1133} 1133}
1134 1134
1135/* 1135/*
1136 * TODO: this should probably be merged into ocfs2_get_block
1137 *
1138 * However, you now need to pay attention to the cont_prepare_write()
1139 * stuff in ocfs2_get_block (that is, ocfs2_get_block pretty much
1140 * expects never to extend).
1141 */
1142struct buffer_head *ocfs2_bread(struct inode *inode,
1143 int block, int *err, int reada)
1144{
1145 struct buffer_head *bh = NULL;
1146 int tmperr;
1147 u64 p_blkno;
1148 int readflags = OCFS2_BH_CACHED;
1149
1150 if (reada)
1151 readflags |= OCFS2_BH_READAHEAD;
1152
1153 if (((u64)block << inode->i_sb->s_blocksize_bits) >=
1154 i_size_read(inode)) {
1155 BUG_ON(!reada);
1156 return NULL;
1157 }
1158
1159 down_read(&OCFS2_I(inode)->ip_alloc_sem);
1160 tmperr = ocfs2_extent_map_get_blocks(inode, block, &p_blkno, NULL,
1161 NULL);
1162 up_read(&OCFS2_I(inode)->ip_alloc_sem);
1163 if (tmperr < 0) {
1164 mlog_errno(tmperr);
1165 goto fail;
1166 }
1167
1168 tmperr = ocfs2_read_blocks(inode, p_blkno, 1, &bh, readflags);
1169 if (tmperr < 0)
1170 goto fail;
1171
1172 tmperr = 0;
1173
1174 *err = 0;
1175 return bh;
1176
1177fail:
1178 brelse(bh);
1179 bh = NULL;
1180
1181 *err = -EIO;
1182 return NULL;
1183}
1184
1185/*
1186 * This is called from our getattr. 1136 * This is called from our getattr.
1187 */ 1137 */
1188int ocfs2_inode_revalidate(struct dentry *dentry) 1138int ocfs2_inode_revalidate(struct dentry *dentry)
diff --git a/fs/ocfs2/inode.h b/fs/ocfs2/inode.h
index f66e4340f178..2f37af9bcc4a 100644
--- a/fs/ocfs2/inode.h
+++ b/fs/ocfs2/inode.h
@@ -117,8 +117,6 @@ extern struct kmem_cache *ocfs2_inode_cache;
117 117
118extern const struct address_space_operations ocfs2_aops; 118extern const struct address_space_operations ocfs2_aops;
119 119
120struct buffer_head *ocfs2_bread(struct inode *inode, int block,
121 int *err, int reada);
122void ocfs2_clear_inode(struct inode *inode); 120void ocfs2_clear_inode(struct inode *inode);
123void ocfs2_delete_inode(struct inode *inode); 121void ocfs2_delete_inode(struct inode *inode);
124void ocfs2_drop_inode(struct inode *inode); 122void ocfs2_drop_inode(struct inode *inode);