aboutsummaryrefslogtreecommitdiffstats
path: root/fs/gfs2/meta_io.c
diff options
context:
space:
mode:
Diffstat (limited to 'fs/gfs2/meta_io.c')
-rw-r--r--fs/gfs2/meta_io.c35
1 files changed, 12 insertions, 23 deletions
diff --git a/fs/gfs2/meta_io.c b/fs/gfs2/meta_io.c
index d762e4f7044e..19097bc7c81d 100644
--- a/fs/gfs2/meta_io.c
+++ b/fs/gfs2/meta_io.c
@@ -313,42 +313,31 @@ void gfs2_meta_wipe(struct gfs2_inode *ip, u64 bstart, u32 blen)
313 while (blen) { 313 while (blen) {
314 bh = getbuf(ip->i_gl, bstart, NO_CREATE); 314 bh = getbuf(ip->i_gl, bstart, NO_CREATE);
315 if (bh) { 315 if (bh) {
316 struct gfs2_bufdata *bd = bh->b_private; 316 struct gfs2_bufdata *bd;
317 317
318 lock_buffer(bh);
319 gfs2_log_lock(sdp);
320 bd = bh->b_private;
318 if (test_clear_buffer_pinned(bh)) { 321 if (test_clear_buffer_pinned(bh)) {
319 struct gfs2_trans *tr = current->journal_info; 322 struct gfs2_trans *tr = current->journal_info;
320 struct gfs2_inode *bh_ip =
321 GFS2_I(bh->b_page->mapping->host);
322
323 gfs2_log_lock(sdp);
324 list_del_init(&bd->bd_le.le_list); 323 list_del_init(&bd->bd_le.le_list);
325 gfs2_assert_warn(sdp, sdp->sd_log_num_buf); 324 gfs2_assert_warn(sdp, sdp->sd_log_num_buf);
326 sdp->sd_log_num_buf--; 325 sdp->sd_log_num_buf--;
327 gfs2_log_unlock(sdp); 326 tr->tr_num_buf_rm++;
328 if (bh_ip->i_inode.i_private != NULL)
329 tr->tr_num_databuf_rm++;
330 else
331 tr->tr_num_buf_rm++;
332 brelse(bh); 327 brelse(bh);
333 } 328 }
334 if (bd) { 329 if (bd) {
335 gfs2_log_lock(sdp);
336 if (bd->bd_ail) { 330 if (bd->bd_ail) {
337 u64 blkno = bh->b_blocknr; 331 gfs2_remove_from_ail(NULL, bd);
338 bd->bd_ail = NULL; 332 bh->b_private = NULL;
339 list_del(&bd->bd_ail_st_list); 333 bd->bd_bh = NULL;
340 list_del(&bd->bd_ail_gl_list); 334 bd->bd_blkno = bh->b_blocknr;
341 atomic_dec(&bd->bd_gl->gl_ail_count); 335 gfs2_trans_add_revoke(sdp, bd);
342 brelse(bh); 336 }
343 gfs2_log_unlock(sdp);
344 gfs2_trans_add_revoke(sdp, blkno);
345 } else
346 gfs2_log_unlock(sdp);
347 } 337 }
348
349 lock_buffer(bh);
350 clear_buffer_dirty(bh); 338 clear_buffer_dirty(bh);
351 clear_buffer_uptodate(bh); 339 clear_buffer_uptodate(bh);
340 gfs2_log_unlock(sdp);
352 unlock_buffer(bh); 341 unlock_buffer(bh);
353 342
354 brelse(bh); 343 brelse(bh);