diff options
Diffstat (limited to 'fs/ufs/inode.c')
-rw-r--r-- | fs/ufs/inode.c | 41 |
1 files changed, 5 insertions, 36 deletions
diff --git a/fs/ufs/inode.c b/fs/ufs/inode.c index ee1eaa6f4ec2..2fbab0aab688 100644 --- a/fs/ufs/inode.c +++ b/fs/ufs/inode.c | |||
@@ -156,36 +156,6 @@ out: | |||
156 | return ret; | 156 | return ret; |
157 | } | 157 | } |
158 | 158 | ||
159 | static void ufs_clear_frag(struct inode *inode, struct buffer_head *bh) | ||
160 | { | ||
161 | lock_buffer(bh); | ||
162 | memset(bh->b_data, 0, inode->i_sb->s_blocksize); | ||
163 | set_buffer_uptodate(bh); | ||
164 | mark_buffer_dirty(bh); | ||
165 | unlock_buffer(bh); | ||
166 | if (IS_SYNC(inode)) | ||
167 | sync_dirty_buffer(bh); | ||
168 | } | ||
169 | |||
170 | static struct buffer_head * | ||
171 | ufs_clear_frags(struct inode *inode, sector_t beg, | ||
172 | unsigned int n, sector_t want) | ||
173 | { | ||
174 | struct buffer_head *res = NULL, *bh; | ||
175 | sector_t end = beg + n; | ||
176 | |||
177 | for (; beg < end; ++beg) { | ||
178 | bh = sb_getblk(inode->i_sb, beg); | ||
179 | ufs_clear_frag(inode, bh); | ||
180 | if (want != beg) | ||
181 | brelse(bh); | ||
182 | else | ||
183 | res = bh; | ||
184 | } | ||
185 | BUG_ON(!res); | ||
186 | return res; | ||
187 | } | ||
188 | |||
189 | /** | 159 | /** |
190 | * ufs_inode_getfrag() - allocate new fragment(s) | 160 | * ufs_inode_getfrag() - allocate new fragment(s) |
191 | * @inode - pointer to inode | 161 | * @inode - pointer to inode |
@@ -302,7 +272,7 @@ repeat: | |||
302 | } | 272 | } |
303 | 273 | ||
304 | if (!phys) { | 274 | if (!phys) { |
305 | result = ufs_clear_frags(inode, tmp, required, tmp + blockoff); | 275 | result = sb_getblk(sb, tmp + blockoff); |
306 | } else { | 276 | } else { |
307 | *phys = tmp + blockoff; | 277 | *phys = tmp + blockoff; |
308 | result = NULL; | 278 | result = NULL; |
@@ -403,8 +373,7 @@ repeat: | |||
403 | 373 | ||
404 | 374 | ||
405 | if (!phys) { | 375 | if (!phys) { |
406 | result = ufs_clear_frags(inode, tmp, uspi->s_fpb, | 376 | result = sb_getblk(sb, tmp + blockoff); |
407 | tmp + blockoff); | ||
408 | } else { | 377 | } else { |
409 | *phys = tmp + blockoff; | 378 | *phys = tmp + blockoff; |
410 | *new = 1; | 379 | *new = 1; |
@@ -471,13 +440,13 @@ int ufs_getfrag_block(struct inode *inode, sector_t fragment, struct buffer_head | |||
471 | #define GET_INODE_DATABLOCK(x) \ | 440 | #define GET_INODE_DATABLOCK(x) \ |
472 | ufs_inode_getfrag(inode, x, fragment, 1, &err, &phys, &new, bh_result->b_page) | 441 | ufs_inode_getfrag(inode, x, fragment, 1, &err, &phys, &new, bh_result->b_page) |
473 | #define GET_INODE_PTR(x) \ | 442 | #define GET_INODE_PTR(x) \ |
474 | ufs_inode_getfrag(inode, x, fragment, uspi->s_fpb, &err, NULL, NULL, bh_result->b_page) | 443 | ufs_inode_getfrag(inode, x, fragment, uspi->s_fpb, &err, NULL, NULL, NULL) |
475 | #define GET_INDIRECT_DATABLOCK(x) \ | 444 | #define GET_INDIRECT_DATABLOCK(x) \ |
476 | ufs_inode_getblock(inode, bh, x, fragment, \ | 445 | ufs_inode_getblock(inode, bh, x, fragment, \ |
477 | &err, &phys, &new, bh_result->b_page); | 446 | &err, &phys, &new, bh_result->b_page) |
478 | #define GET_INDIRECT_PTR(x) \ | 447 | #define GET_INDIRECT_PTR(x) \ |
479 | ufs_inode_getblock(inode, bh, x, fragment, \ | 448 | ufs_inode_getblock(inode, bh, x, fragment, \ |
480 | &err, NULL, NULL, bh_result->b_page); | 449 | &err, NULL, NULL, NULL) |
481 | 450 | ||
482 | if (ptr < UFS_NDIR_FRAGMENT) { | 451 | if (ptr < UFS_NDIR_FRAGMENT) { |
483 | bh = GET_INODE_DATABLOCK(ptr); | 452 | bh = GET_INODE_DATABLOCK(ptr); |