1 /* 2 * Copyright (C) Sistina Software, Inc. 1997-2003 All rights reserved. 3 * Copyright (C) 2004-2006 Red Hat, Inc. All rights reserved. 4 * 5 * This copyrighted material is made available to anyone wishing to use, 6 * modify, copy, or redistribute it subject to the terms and conditions 7 * of the GNU General Public License version 2. 8 */ 9 10 #include <linux/sched.h> 11 #include <linux/slab.h> 12 #include <linux/spinlock.h> 13 #include <linux/completion.h> 14 #include <linux/buffer_head.h> 15 #include <linux/mempool.h> 16 #include <linux/gfs2_ondisk.h> 17 #include <linux/bio.h> 18 #include <linux/fs.h> 19 #include <linux/list_sort.h> 20 21 #include "dir.h" 22 #include "gfs2.h" 23 #include "incore.h" 24 #include "inode.h" 25 #include "glock.h" 26 #include "log.h" 27 #include "lops.h" 28 #include "meta_io.h" 29 #include "recovery.h" 30 #include "rgrp.h" 31 #include "trans.h" 32 #include "util.h" 33 #include "trace_gfs2.h" 34 35 /** 36 * gfs2_pin - Pin a buffer in memory 37 * @sdp: The superblock 38 * @bh: The buffer to be pinned 39 * 40 * The log lock must be held when calling this function 41 */ 42 void gfs2_pin(struct gfs2_sbd *sdp, struct buffer_head *bh) 43 { 44 struct gfs2_bufdata *bd; 45 46 BUG_ON(!current->journal_info); 47 48 clear_buffer_dirty(bh); 49 if (test_set_buffer_pinned(bh)) 50 gfs2_assert_withdraw(sdp, 0); 51 if (!buffer_uptodate(bh)) 52 gfs2_io_error_bh_wd(sdp, bh); 53 bd = bh->b_private; 54 /* If this buffer is in the AIL and it has already been written 55 * to in-place disk block, remove it from the AIL. 56 */ 57 spin_lock(&sdp->sd_ail_lock); 58 if (bd->bd_tr) 59 list_move(&bd->bd_ail_st_list, &bd->bd_tr->tr_ail2_list); 60 spin_unlock(&sdp->sd_ail_lock); 61 get_bh(bh); 62 atomic_inc(&sdp->sd_log_pinned); 63 trace_gfs2_pin(bd, 1); 64 } 65 66 static bool buffer_is_rgrp(const struct gfs2_bufdata *bd) 67 { 68 return bd->bd_gl->gl_name.ln_type == LM_TYPE_RGRP; 69 } 70 71 static void maybe_release_space(struct gfs2_bufdata *bd) 72 { 73 struct gfs2_glock *gl = bd->bd_gl; 74 struct gfs2_sbd *sdp = gl->gl_name.ln_sbd; 75 struct gfs2_rgrpd *rgd = gfs2_glock2rgrp(gl); 76 unsigned int index = bd->bd_bh->b_blocknr - gl->gl_name.ln_number; 77 struct gfs2_bitmap *bi = rgd->rd_bits + index; 78 79 if (bi->bi_clone == NULL) 80 return; 81 if (sdp->sd_args.ar_discard) 82 gfs2_rgrp_send_discards(sdp, rgd->rd_data0, bd->bd_bh, bi, 1, NULL); 83 memcpy(bi->bi_clone + bi->bi_offset, 84 bd->bd_bh->b_data + bi->bi_offset, bi->bi_bytes); 85 clear_bit(GBF_FULL, &bi->bi_flags); 86 rgd->rd_free_clone = rgd->rd_free; 87 rgd->rd_extfail_pt = rgd->rd_free; 88 } 89 90 /** 91 * gfs2_unpin - Unpin a buffer 92 * @sdp: the filesystem the buffer belongs to 93 * @bh: The buffer to unpin 94 * @ai: 95 * @flags: The inode dirty flags 96 * 97 */ 98 99 static void gfs2_unpin(struct gfs2_sbd *sdp, struct buffer_head *bh, 100 struct gfs2_trans *tr) 101 { 102 struct gfs2_bufdata *bd = bh->b_private; 103 104 BUG_ON(!buffer_uptodate(bh)); 105 BUG_ON(!buffer_pinned(bh)); 106 107 lock_buffer(bh); 108 mark_buffer_dirty(bh); 109 clear_buffer_pinned(bh); 110 111 if (buffer_is_rgrp(bd)) 112 maybe_release_space(bd); 113 114 spin_lock(&sdp->sd_ail_lock); 115 if (bd->bd_tr) { 116 list_del(&bd->bd_ail_st_list); 117 brelse(bh); 118 } else { 119 struct gfs2_glock *gl = bd->bd_gl; 120 list_add(&bd->bd_ail_gl_list, &gl->gl_ail_list); 121 atomic_inc(&gl->gl_ail_count); 122 } 123 bd->bd_tr = tr; 124 list_add(&bd->bd_ail_st_list, &tr->tr_ail1_list); 125 spin_unlock(&sdp->sd_ail_lock); 126 127 clear_bit(GLF_LFLUSH, &bd->bd_gl->gl_flags); 128 trace_gfs2_pin(bd, 0); 129 unlock_buffer(bh); 130 atomic_dec(&sdp->sd_log_pinned); 131 } 132 133 static void gfs2_log_incr_head(struct gfs2_sbd *sdp) 134 { 135 BUG_ON((sdp->sd_log_flush_head == sdp->sd_log_tail) && 136 (sdp->sd_log_flush_head != sdp->sd_log_head)); 137 138 if (++sdp->sd_log_flush_head == sdp->sd_jdesc->jd_blocks) 139 sdp->sd_log_flush_head = 0; 140 } 141 142 u64 gfs2_log_bmap(struct gfs2_sbd *sdp) 143 { 144 unsigned int lbn = sdp->sd_log_flush_head; 145 struct gfs2_journal_extent *je; 146 u64 block; 147 148 list_for_each_entry(je, &sdp->sd_jdesc->extent_list, list) { 149 if ((lbn >= je->lblock) && (lbn < (je->lblock + je->blocks))) { 150 block = je->dblock + lbn - je->lblock; 151 gfs2_log_incr_head(sdp); 152 return block; 153 } 154 } 155 156 return -1; 157 } 158 159 /** 160 * gfs2_end_log_write_bh - end log write of pagecache data with buffers 161 * @sdp: The superblock 162 * @bvec: The bio_vec 163 * @error: The i/o status 164 * 165 * This finds the relevant buffers and unlocks them and sets the 166 * error flag according to the status of the i/o request. This is 167 * used when the log is writing data which has an in-place version 168 * that is pinned in the pagecache. 169 */ 170 171 static void gfs2_end_log_write_bh(struct gfs2_sbd *sdp, struct bio_vec *bvec, 172 blk_status_t error) 173 { 174 struct buffer_head *bh, *next; 175 struct page *page = bvec->bv_page; 176 unsigned size; 177 178 bh = page_buffers(page); 179 size = bvec->bv_len; 180 while (bh_offset(bh) < bvec->bv_offset) 181 bh = bh->b_this_page; 182 do { 183 if (error) 184 mark_buffer_write_io_error(bh); 185 unlock_buffer(bh); 186 next = bh->b_this_page; 187 size -= bh->b_size; 188 brelse(bh); 189 bh = next; 190 } while(bh && size); 191 } 192 193 /** 194 * gfs2_end_log_write - end of i/o to the log 195 * @bio: The bio 196 * @error: Status of i/o request 197 * 198 * Each bio_vec contains either data from the pagecache or data 199 * relating to the log itself. Here we iterate over the bio_vec 200 * array, processing both kinds of data. 201 * 202 */ 203 204 static void gfs2_end_log_write(struct bio *bio) 205 { 206 struct gfs2_sbd *sdp = bio->bi_private; 207 struct bio_vec *bvec; 208 struct page *page; 209 int i; 210 211 if (bio->bi_status) { 212 fs_err(sdp, "Error %d writing to journal, jid=%u\n", 213 bio->bi_status, sdp->sd_jdesc->jd_jid); 214 wake_up(&sdp->sd_logd_waitq); 215 } 216 217 bio_for_each_segment_all(bvec, bio, i) { 218 page = bvec->bv_page; 219 if (page_has_buffers(page)) 220 gfs2_end_log_write_bh(sdp, bvec, bio->bi_status); 221 else 222 mempool_free(page, gfs2_page_pool); 223 } 224 225 bio_put(bio); 226 if (atomic_dec_and_test(&sdp->sd_log_in_flight)) 227 wake_up(&sdp->sd_log_flush_wait); 228 } 229 230 /** 231 * gfs2_log_submit_bio - Submit any pending log bio 232 * @biop: Address of the bio pointer 233 * @op: REQ_OP 234 * @op_flags: req_flag_bits 235 * 236 * Submit any pending part-built or full bio to the block device. If 237 * there is no pending bio, then this is a no-op. 238 */ 239 240 void gfs2_log_submit_bio(struct bio **biop, int op, int op_flags) 241 { 242 struct bio *bio = *biop; 243 if (bio) { 244 struct gfs2_sbd *sdp = bio->bi_private; 245 atomic_inc(&sdp->sd_log_in_flight); 246 bio_set_op_attrs(bio, op, op_flags); 247 submit_bio(bio); 248 *biop = NULL; 249 } 250 } 251 252 /** 253 * gfs2_log_alloc_bio - Allocate a bio 254 * @sdp: The super block 255 * @blkno: The device block number we want to write to 256 * @end_io: The bi_end_io callback 257 * 258 * Allocate a new bio, initialize it with the given parameters and return it. 259 * 260 * Returns: The newly allocated bio 261 */ 262 263 static struct bio *gfs2_log_alloc_bio(struct gfs2_sbd *sdp, u64 blkno, 264 bio_end_io_t *end_io) 265 { 266 struct super_block *sb = sdp->sd_vfs; 267 struct bio *bio = bio_alloc(GFP_NOIO, BIO_MAX_PAGES); 268 269 bio->bi_iter.bi_sector = blkno * (sb->s_blocksize >> 9); 270 bio_set_dev(bio, sb->s_bdev); 271 bio->bi_end_io = end_io; 272 bio->bi_private = sdp; 273 274 return bio; 275 } 276 277 /** 278 * gfs2_log_get_bio - Get cached log bio, or allocate a new one 279 * @sdp: The super block 280 * @blkno: The device block number we want to write to 281 * @bio: The bio to get or allocate 282 * @op: REQ_OP 283 * @end_io: The bi_end_io callback 284 * @flush: Always flush the current bio and allocate a new one? 285 * 286 * If there is a cached bio, then if the next block number is sequential 287 * with the previous one, return it, otherwise flush the bio to the 288 * device. If there is no cached bio, or we just flushed it, then 289 * allocate a new one. 290 * 291 * Returns: The bio to use for log writes 292 */ 293 294 static struct bio *gfs2_log_get_bio(struct gfs2_sbd *sdp, u64 blkno, 295 struct bio **biop, int op, 296 bio_end_io_t *end_io, bool flush) 297 { 298 struct bio *bio = *biop; 299 300 if (bio) { 301 u64 nblk; 302 303 nblk = bio_end_sector(bio); 304 nblk >>= sdp->sd_fsb2bb_shift; 305 if (blkno == nblk && !flush) 306 return bio; 307 gfs2_log_submit_bio(biop, op, 0); 308 } 309 310 *biop = gfs2_log_alloc_bio(sdp, blkno, end_io); 311 return *biop; 312 } 313 314 /** 315 * gfs2_log_write - write to log 316 * @sdp: the filesystem 317 * @page: the page to write 318 * @size: the size of the data to write 319 * @offset: the offset within the page 320 * @blkno: block number of the log entry 321 * 322 * Try and add the page segment to the current bio. If that fails, 323 * submit the current bio to the device and create a new one, and 324 * then add the page segment to that. 325 */ 326 327 void gfs2_log_write(struct gfs2_sbd *sdp, struct page *page, 328 unsigned size, unsigned offset, u64 blkno) 329 { 330 struct bio *bio; 331 int ret; 332 333 bio = gfs2_log_get_bio(sdp, blkno, &sdp->sd_log_bio, REQ_OP_WRITE, 334 gfs2_end_log_write, false); 335 ret = bio_add_page(bio, page, size, offset); 336 if (ret == 0) { 337 bio = gfs2_log_get_bio(sdp, blkno, &sdp->sd_log_bio, 338 REQ_OP_WRITE, gfs2_end_log_write, true); 339 ret = bio_add_page(bio, page, size, offset); 340 WARN_ON(ret == 0); 341 } 342 } 343 344 /** 345 * gfs2_log_write_bh - write a buffer's content to the log 346 * @sdp: The super block 347 * @bh: The buffer pointing to the in-place location 348 * 349 * This writes the content of the buffer to the next available location 350 * in the log. The buffer will be unlocked once the i/o to the log has 351 * completed. 352 */ 353 354 static void gfs2_log_write_bh(struct gfs2_sbd *sdp, struct buffer_head *bh) 355 { 356 gfs2_log_write(sdp, bh->b_page, bh->b_size, bh_offset(bh), 357 gfs2_log_bmap(sdp)); 358 } 359 360 /** 361 * gfs2_log_write_page - write one block stored in a page, into the log 362 * @sdp: The superblock 363 * @page: The struct page 364 * 365 * This writes the first block-sized part of the page into the log. Note 366 * that the page must have been allocated from the gfs2_page_pool mempool 367 * and that after this has been called, ownership has been transferred and 368 * the page may be freed at any time. 369 */ 370 371 void gfs2_log_write_page(struct gfs2_sbd *sdp, struct page *page) 372 { 373 struct super_block *sb = sdp->sd_vfs; 374 gfs2_log_write(sdp, page, sb->s_blocksize, 0, 375 gfs2_log_bmap(sdp)); 376 } 377 378 static struct page *gfs2_get_log_desc(struct gfs2_sbd *sdp, u32 ld_type, 379 u32 ld_length, u32 ld_data1) 380 { 381 struct page *page = mempool_alloc(gfs2_page_pool, GFP_NOIO); 382 struct gfs2_log_descriptor *ld = page_address(page); 383 clear_page(ld); 384 ld->ld_header.mh_magic = cpu_to_be32(GFS2_MAGIC); 385 ld->ld_header.mh_type = cpu_to_be32(GFS2_METATYPE_LD); 386 ld->ld_header.mh_format = cpu_to_be32(GFS2_FORMAT_LD); 387 ld->ld_type = cpu_to_be32(ld_type); 388 ld->ld_length = cpu_to_be32(ld_length); 389 ld->ld_data1 = cpu_to_be32(ld_data1); 390 ld->ld_data2 = 0; 391 return page; 392 } 393 394 static void gfs2_check_magic(struct buffer_head *bh) 395 { 396 void *kaddr; 397 __be32 *ptr; 398 399 clear_buffer_escaped(bh); 400 kaddr = kmap_atomic(bh->b_page); 401 ptr = kaddr + bh_offset(bh); 402 if (*ptr == cpu_to_be32(GFS2_MAGIC)) 403 set_buffer_escaped(bh); 404 kunmap_atomic(kaddr); 405 } 406 407 static int blocknr_cmp(void *priv, struct list_head *a, struct list_head *b) 408 { 409 struct gfs2_bufdata *bda, *bdb; 410 411 bda = list_entry(a, struct gfs2_bufdata, bd_list); 412 bdb = list_entry(b, struct gfs2_bufdata, bd_list); 413 414 if (bda->bd_bh->b_blocknr < bdb->bd_bh->b_blocknr) 415 return -1; 416 if (bda->bd_bh->b_blocknr > bdb->bd_bh->b_blocknr) 417 return 1; 418 return 0; 419 } 420 421 static void gfs2_before_commit(struct gfs2_sbd *sdp, unsigned int limit, 422 unsigned int total, struct list_head *blist, 423 bool is_databuf) 424 { 425 struct gfs2_log_descriptor *ld; 426 struct gfs2_bufdata *bd1 = NULL, *bd2; 427 struct page *page; 428 unsigned int num; 429 unsigned n; 430 __be64 *ptr; 431 432 gfs2_log_lock(sdp); 433 list_sort(NULL, blist, blocknr_cmp); 434 bd1 = bd2 = list_prepare_entry(bd1, blist, bd_list); 435 while(total) { 436 num = total; 437 if (total > limit) 438 num = limit; 439 gfs2_log_unlock(sdp); 440 page = gfs2_get_log_desc(sdp, 441 is_databuf ? GFS2_LOG_DESC_JDATA : 442 GFS2_LOG_DESC_METADATA, num + 1, num); 443 ld = page_address(page); 444 gfs2_log_lock(sdp); 445 ptr = (__be64 *)(ld + 1); 446 447 n = 0; 448 list_for_each_entry_continue(bd1, blist, bd_list) { 449 *ptr++ = cpu_to_be64(bd1->bd_bh->b_blocknr); 450 if (is_databuf) { 451 gfs2_check_magic(bd1->bd_bh); 452 *ptr++ = cpu_to_be64(buffer_escaped(bd1->bd_bh) ? 1 : 0); 453 } 454 if (++n >= num) 455 break; 456 } 457 458 gfs2_log_unlock(sdp); 459 gfs2_log_write_page(sdp, page); 460 gfs2_log_lock(sdp); 461 462 n = 0; 463 list_for_each_entry_continue(bd2, blist, bd_list) { 464 get_bh(bd2->bd_bh); 465 gfs2_log_unlock(sdp); 466 lock_buffer(bd2->bd_bh); 467 468 if (buffer_escaped(bd2->bd_bh)) { 469 void *kaddr; 470 page = mempool_alloc(gfs2_page_pool, GFP_NOIO); 471 ptr = page_address(page); 472 kaddr = kmap_atomic(bd2->bd_bh->b_page); 473 memcpy(ptr, kaddr + bh_offset(bd2->bd_bh), 474 bd2->bd_bh->b_size); 475 kunmap_atomic(kaddr); 476 *(__be32 *)ptr = 0; 477 clear_buffer_escaped(bd2->bd_bh); 478 unlock_buffer(bd2->bd_bh); 479 brelse(bd2->bd_bh); 480 gfs2_log_write_page(sdp, page); 481 } else { 482 gfs2_log_write_bh(sdp, bd2->bd_bh); 483 } 484 gfs2_log_lock(sdp); 485 if (++n >= num) 486 break; 487 } 488 489 BUG_ON(total < num); 490 total -= num; 491 } 492 gfs2_log_unlock(sdp); 493 } 494 495 static void buf_lo_before_commit(struct gfs2_sbd *sdp, struct gfs2_trans *tr) 496 { 497 unsigned int limit = buf_limit(sdp); /* 503 for 4k blocks */ 498 unsigned int nbuf; 499 if (tr == NULL) 500 return; 501 nbuf = tr->tr_num_buf_new - tr->tr_num_buf_rm; 502 gfs2_before_commit(sdp, limit, nbuf, &tr->tr_buf, 0); 503 } 504 505 static void buf_lo_after_commit(struct gfs2_sbd *sdp, struct gfs2_trans *tr) 506 { 507 struct list_head *head; 508 struct gfs2_bufdata *bd; 509 510 if (tr == NULL) 511 return; 512 513 head = &tr->tr_buf; 514 while (!list_empty(head)) { 515 bd = list_entry(head->next, struct gfs2_bufdata, bd_list); 516 list_del_init(&bd->bd_list); 517 gfs2_unpin(sdp, bd->bd_bh, tr); 518 } 519 } 520 521 static void buf_lo_before_scan(struct gfs2_jdesc *jd, 522 struct gfs2_log_header_host *head, int pass) 523 { 524 if (pass != 0) 525 return; 526 527 jd->jd_found_blocks = 0; 528 jd->jd_replayed_blocks = 0; 529 } 530 531 static int buf_lo_scan_elements(struct gfs2_jdesc *jd, unsigned int start, 532 struct gfs2_log_descriptor *ld, __be64 *ptr, 533 int pass) 534 { 535 struct gfs2_inode *ip = GFS2_I(jd->jd_inode); 536 struct gfs2_sbd *sdp = GFS2_SB(jd->jd_inode); 537 struct gfs2_glock *gl = ip->i_gl; 538 unsigned int blks = be32_to_cpu(ld->ld_data1); 539 struct buffer_head *bh_log, *bh_ip; 540 u64 blkno; 541 int error = 0; 542 543 if (pass != 1 || be32_to_cpu(ld->ld_type) != GFS2_LOG_DESC_METADATA) 544 return 0; 545 546 gfs2_replay_incr_blk(jd, &start); 547 548 for (; blks; gfs2_replay_incr_blk(jd, &start), blks--) { 549 blkno = be64_to_cpu(*ptr++); 550 551 jd->jd_found_blocks++; 552 553 if (gfs2_revoke_check(jd, blkno, start)) 554 continue; 555 556 error = gfs2_replay_read_block(jd, start, &bh_log); 557 if (error) 558 return error; 559 560 bh_ip = gfs2_meta_new(gl, blkno); 561 memcpy(bh_ip->b_data, bh_log->b_data, bh_log->b_size); 562 563 if (gfs2_meta_check(sdp, bh_ip)) 564 error = -EIO; 565 else 566 mark_buffer_dirty(bh_ip); 567 568 brelse(bh_log); 569 brelse(bh_ip); 570 571 if (error) 572 break; 573 574 jd->jd_replayed_blocks++; 575 } 576 577 return error; 578 } 579 580 /** 581 * gfs2_meta_sync - Sync all buffers associated with a glock 582 * @gl: The glock 583 * 584 */ 585 586 static void gfs2_meta_sync(struct gfs2_glock *gl) 587 { 588 struct address_space *mapping = gfs2_glock2aspace(gl); 589 struct gfs2_sbd *sdp = gl->gl_name.ln_sbd; 590 int error; 591 592 if (mapping == NULL) 593 mapping = &sdp->sd_aspace; 594 595 filemap_fdatawrite(mapping); 596 error = filemap_fdatawait(mapping); 597 598 if (error) 599 gfs2_io_error(gl->gl_name.ln_sbd); 600 } 601 602 static void buf_lo_after_scan(struct gfs2_jdesc *jd, int error, int pass) 603 { 604 struct gfs2_inode *ip = GFS2_I(jd->jd_inode); 605 struct gfs2_sbd *sdp = GFS2_SB(jd->jd_inode); 606 607 if (error) { 608 gfs2_meta_sync(ip->i_gl); 609 return; 610 } 611 if (pass != 1) 612 return; 613 614 gfs2_meta_sync(ip->i_gl); 615 616 fs_info(sdp, "jid=%u: Replayed %u of %u blocks\n", 617 jd->jd_jid, jd->jd_replayed_blocks, jd->jd_found_blocks); 618 } 619 620 static void revoke_lo_before_commit(struct gfs2_sbd *sdp, struct gfs2_trans *tr) 621 { 622 struct gfs2_meta_header *mh; 623 unsigned int offset; 624 struct list_head *head = &sdp->sd_log_le_revoke; 625 struct gfs2_bufdata *bd; 626 struct page *page; 627 unsigned int length; 628 629 gfs2_write_revokes(sdp); 630 if (!sdp->sd_log_num_revoke) 631 return; 632 633 length = gfs2_struct2blk(sdp, sdp->sd_log_num_revoke, sizeof(u64)); 634 page = gfs2_get_log_desc(sdp, GFS2_LOG_DESC_REVOKE, length, sdp->sd_log_num_revoke); 635 offset = sizeof(struct gfs2_log_descriptor); 636 637 list_for_each_entry(bd, head, bd_list) { 638 sdp->sd_log_num_revoke--; 639 640 if (offset + sizeof(u64) > sdp->sd_sb.sb_bsize) { 641 642 gfs2_log_write_page(sdp, page); 643 page = mempool_alloc(gfs2_page_pool, GFP_NOIO); 644 mh = page_address(page); 645 clear_page(mh); 646 mh->mh_magic = cpu_to_be32(GFS2_MAGIC); 647 mh->mh_type = cpu_to_be32(GFS2_METATYPE_LB); 648 mh->mh_format = cpu_to_be32(GFS2_FORMAT_LB); 649 offset = sizeof(struct gfs2_meta_header); 650 } 651 652 *(__be64 *)(page_address(page) + offset) = cpu_to_be64(bd->bd_blkno); 653 offset += sizeof(u64); 654 } 655 gfs2_assert_withdraw(sdp, !sdp->sd_log_num_revoke); 656 657 gfs2_log_write_page(sdp, page); 658 } 659 660 static void revoke_lo_after_commit(struct gfs2_sbd *sdp, struct gfs2_trans *tr) 661 { 662 struct list_head *head = &sdp->sd_log_le_revoke; 663 struct gfs2_bufdata *bd; 664 struct gfs2_glock *gl; 665 666 while (!list_empty(head)) { 667 bd = list_entry(head->next, struct gfs2_bufdata, bd_list); 668 list_del_init(&bd->bd_list); 669 gl = bd->bd_gl; 670 atomic_dec(&gl->gl_revokes); 671 clear_bit(GLF_LFLUSH, &gl->gl_flags); 672 kmem_cache_free(gfs2_bufdata_cachep, bd); 673 } 674 } 675 676 static void revoke_lo_before_scan(struct gfs2_jdesc *jd, 677 struct gfs2_log_header_host *head, int pass) 678 { 679 if (pass != 0) 680 return; 681 682 jd->jd_found_revokes = 0; 683 jd->jd_replay_tail = head->lh_tail; 684 } 685 686 static int revoke_lo_scan_elements(struct gfs2_jdesc *jd, unsigned int start, 687 struct gfs2_log_descriptor *ld, __be64 *ptr, 688 int pass) 689 { 690 struct gfs2_sbd *sdp = GFS2_SB(jd->jd_inode); 691 unsigned int blks = be32_to_cpu(ld->ld_length); 692 unsigned int revokes = be32_to_cpu(ld->ld_data1); 693 struct buffer_head *bh; 694 unsigned int offset; 695 u64 blkno; 696 int first = 1; 697 int error; 698 699 if (pass != 0 || be32_to_cpu(ld->ld_type) != GFS2_LOG_DESC_REVOKE) 700 return 0; 701 702 offset = sizeof(struct gfs2_log_descriptor); 703 704 for (; blks; gfs2_replay_incr_blk(jd, &start), blks--) { 705 error = gfs2_replay_read_block(jd, start, &bh); 706 if (error) 707 return error; 708 709 if (!first) 710 gfs2_metatype_check(sdp, bh, GFS2_METATYPE_LB); 711 712 while (offset + sizeof(u64) <= sdp->sd_sb.sb_bsize) { 713 blkno = be64_to_cpu(*(__be64 *)(bh->b_data + offset)); 714 715 error = gfs2_revoke_add(jd, blkno, start); 716 if (error < 0) { 717 brelse(bh); 718 return error; 719 } 720 else if (error) 721 jd->jd_found_revokes++; 722 723 if (!--revokes) 724 break; 725 offset += sizeof(u64); 726 } 727 728 brelse(bh); 729 offset = sizeof(struct gfs2_meta_header); 730 first = 0; 731 } 732 733 return 0; 734 } 735 736 static void revoke_lo_after_scan(struct gfs2_jdesc *jd, int error, int pass) 737 { 738 struct gfs2_sbd *sdp = GFS2_SB(jd->jd_inode); 739 740 if (error) { 741 gfs2_revoke_clean(jd); 742 return; 743 } 744 if (pass != 1) 745 return; 746 747 fs_info(sdp, "jid=%u: Found %u revoke tags\n", 748 jd->jd_jid, jd->jd_found_revokes); 749 750 gfs2_revoke_clean(jd); 751 } 752 753 /** 754 * databuf_lo_before_commit - Scan the data buffers, writing as we go 755 * 756 */ 757 758 static void databuf_lo_before_commit(struct gfs2_sbd *sdp, struct gfs2_trans *tr) 759 { 760 unsigned int limit = databuf_limit(sdp); 761 unsigned int nbuf; 762 if (tr == NULL) 763 return; 764 nbuf = tr->tr_num_databuf_new - tr->tr_num_databuf_rm; 765 gfs2_before_commit(sdp, limit, nbuf, &tr->tr_databuf, 1); 766 } 767 768 static int databuf_lo_scan_elements(struct gfs2_jdesc *jd, unsigned int start, 769 struct gfs2_log_descriptor *ld, 770 __be64 *ptr, int pass) 771 { 772 struct gfs2_inode *ip = GFS2_I(jd->jd_inode); 773 struct gfs2_glock *gl = ip->i_gl; 774 unsigned int blks = be32_to_cpu(ld->ld_data1); 775 struct buffer_head *bh_log, *bh_ip; 776 u64 blkno; 777 u64 esc; 778 int error = 0; 779 780 if (pass != 1 || be32_to_cpu(ld->ld_type) != GFS2_LOG_DESC_JDATA) 781 return 0; 782 783 gfs2_replay_incr_blk(jd, &start); 784 for (; blks; gfs2_replay_incr_blk(jd, &start), blks--) { 785 blkno = be64_to_cpu(*ptr++); 786 esc = be64_to_cpu(*ptr++); 787 788 jd->jd_found_blocks++; 789 790 if (gfs2_revoke_check(jd, blkno, start)) 791 continue; 792 793 error = gfs2_replay_read_block(jd, start, &bh_log); 794 if (error) 795 return error; 796 797 bh_ip = gfs2_meta_new(gl, blkno); 798 memcpy(bh_ip->b_data, bh_log->b_data, bh_log->b_size); 799 800 /* Unescape */ 801 if (esc) { 802 __be32 *eptr = (__be32 *)bh_ip->b_data; 803 *eptr = cpu_to_be32(GFS2_MAGIC); 804 } 805 mark_buffer_dirty(bh_ip); 806 807 brelse(bh_log); 808 brelse(bh_ip); 809 810 jd->jd_replayed_blocks++; 811 } 812 813 return error; 814 } 815 816 /* FIXME: sort out accounting for log blocks etc. */ 817 818 static void databuf_lo_after_scan(struct gfs2_jdesc *jd, int error, int pass) 819 { 820 struct gfs2_inode *ip = GFS2_I(jd->jd_inode); 821 struct gfs2_sbd *sdp = GFS2_SB(jd->jd_inode); 822 823 if (error) { 824 gfs2_meta_sync(ip->i_gl); 825 return; 826 } 827 if (pass != 1) 828 return; 829 830 /* data sync? */ 831 gfs2_meta_sync(ip->i_gl); 832 833 fs_info(sdp, "jid=%u: Replayed %u of %u data blocks\n", 834 jd->jd_jid, jd->jd_replayed_blocks, jd->jd_found_blocks); 835 } 836 837 static void databuf_lo_after_commit(struct gfs2_sbd *sdp, struct gfs2_trans *tr) 838 { 839 struct list_head *head; 840 struct gfs2_bufdata *bd; 841 842 if (tr == NULL) 843 return; 844 845 head = &tr->tr_databuf; 846 while (!list_empty(head)) { 847 bd = list_entry(head->next, struct gfs2_bufdata, bd_list); 848 list_del_init(&bd->bd_list); 849 gfs2_unpin(sdp, bd->bd_bh, tr); 850 } 851 } 852 853 854 const struct gfs2_log_operations gfs2_buf_lops = { 855 .lo_before_commit = buf_lo_before_commit, 856 .lo_after_commit = buf_lo_after_commit, 857 .lo_before_scan = buf_lo_before_scan, 858 .lo_scan_elements = buf_lo_scan_elements, 859 .lo_after_scan = buf_lo_after_scan, 860 .lo_name = "buf", 861 }; 862 863 const struct gfs2_log_operations gfs2_revoke_lops = { 864 .lo_before_commit = revoke_lo_before_commit, 865 .lo_after_commit = revoke_lo_after_commit, 866 .lo_before_scan = revoke_lo_before_scan, 867 .lo_scan_elements = revoke_lo_scan_elements, 868 .lo_after_scan = revoke_lo_after_scan, 869 .lo_name = "revoke", 870 }; 871 872 const struct gfs2_log_operations gfs2_databuf_lops = { 873 .lo_before_commit = databuf_lo_before_commit, 874 .lo_after_commit = databuf_lo_after_commit, 875 .lo_scan_elements = databuf_lo_scan_elements, 876 .lo_after_scan = databuf_lo_after_scan, 877 .lo_name = "databuf", 878 }; 879 880 const struct gfs2_log_operations *gfs2_log_ops[] = { 881 &gfs2_databuf_lops, 882 &gfs2_buf_lops, 883 &gfs2_revoke_lops, 884 NULL, 885 }; 886 887