1 // SPDX-License-Identifier: GPL-2.0-only 2 /* 3 * Copyright (C) Sistina Software, Inc. 1997-2003 All rights reserved. 4 * Copyright (C) 2004-2006 Red Hat, Inc. All rights reserved. 5 */ 6 7 #include <linux/module.h> 8 #include <linux/slab.h> 9 #include <linux/spinlock.h> 10 #include <linux/completion.h> 11 #include <linux/buffer_head.h> 12 #include <linux/gfs2_ondisk.h> 13 #include <linux/crc32.h> 14 #include <linux/crc32c.h> 15 #include <linux/ktime.h> 16 17 #include "gfs2.h" 18 #include "incore.h" 19 #include "bmap.h" 20 #include "glock.h" 21 #include "glops.h" 22 #include "log.h" 23 #include "lops.h" 24 #include "meta_io.h" 25 #include "recovery.h" 26 #include "super.h" 27 #include "util.h" 28 #include "dir.h" 29 30 struct workqueue_struct *gfs2_recovery_wq; 31 32 int gfs2_replay_read_block(struct gfs2_jdesc *jd, unsigned int blk, 33 struct buffer_head **bh) 34 { 35 struct inode *inode = jd->jd_inode; 36 struct gfs2_glock *gl = gfs2_inode_glock(inode); 37 struct gfs2_inode *ip = GFS2_I(inode); 38 u64 dblock; 39 u32 extlen; 40 int error; 41 42 extlen = 32; 43 error = gfs2_get_extent(inode, blk, &dblock, &extlen); 44 if (error) 45 return error; 46 if (!dblock) { 47 gfs2_consist_inode(ip); 48 return -EIO; 49 } 50 51 *bh = gfs2_meta_ra(gl, dblock, extlen); 52 53 return error; 54 } 55 56 int gfs2_revoke_add(struct gfs2_jdesc *jd, u64 blkno, unsigned int where) 57 { 58 struct list_head *head = &jd->jd_revoke_list; 59 struct gfs2_revoke_replay *rr = NULL, *iter; 60 61 list_for_each_entry(iter, head, rr_list) { 62 if (iter->rr_blkno == blkno) { 63 rr = iter; 64 break; 65 } 66 } 67 68 if (rr) { 69 rr->rr_where = where; 70 return 0; 71 } 72 73 rr = kmalloc_obj(struct gfs2_revoke_replay, GFP_NOFS); 74 if (!rr) 75 return -ENOMEM; 76 77 rr->rr_blkno = blkno; 78 rr->rr_where = where; 79 list_add(&rr->rr_list, head); 80 81 return 1; 82 } 83 84 int gfs2_revoke_check(struct gfs2_jdesc *jd, u64 blkno, unsigned int where) 85 { 86 struct gfs2_revoke_replay *rr = NULL, *iter; 87 int wrap, a, b, revoke; 88 89 list_for_each_entry(iter, &jd->jd_revoke_list, rr_list) { 90 if (iter->rr_blkno == blkno) { 91 rr = iter; 92 break; 93 } 94 } 95 96 if (!rr) 97 return 0; 98 99 wrap = (rr->rr_where < jd->jd_replay_tail); 100 a = (jd->jd_replay_tail < where); 101 b = (where < rr->rr_where); 102 revoke = (wrap) ? (a || b) : (a && b); 103 104 return revoke; 105 } 106 107 void gfs2_revoke_clean(struct gfs2_jdesc *jd) 108 { 109 struct list_head *head = &jd->jd_revoke_list; 110 struct gfs2_revoke_replay *rr; 111 112 while (!list_empty(head)) { 113 rr = list_first_entry(head, struct gfs2_revoke_replay, rr_list); 114 list_del(&rr->rr_list); 115 kfree(rr); 116 } 117 } 118 119 int __get_log_header(struct gfs2_sbd *sdp, const struct gfs2_log_header *lh, 120 unsigned int blkno, struct gfs2_log_header_host *head) 121 { 122 const u32 zero = 0; 123 u32 hash, crc; 124 125 if (lh->lh_header.mh_magic != cpu_to_be32(GFS2_MAGIC) || 126 lh->lh_header.mh_type != cpu_to_be32(GFS2_METATYPE_LH) || 127 (blkno && be32_to_cpu(lh->lh_blkno) != blkno)) 128 return 1; 129 130 hash = crc32(~0, lh, LH_V1_SIZE - 4); 131 hash = ~crc32(hash, &zero, 4); /* assume lh_hash is zero */ 132 133 if (be32_to_cpu(lh->lh_hash) != hash) 134 return 1; 135 136 crc = crc32c(~0, (void *)lh + LH_V1_SIZE + 4, 137 sdp->sd_sb.sb_bsize - LH_V1_SIZE - 4); 138 139 if ((lh->lh_crc != 0 && be32_to_cpu(lh->lh_crc) != crc)) 140 return 1; 141 142 head->lh_sequence = be64_to_cpu(lh->lh_sequence); 143 head->lh_flags = be32_to_cpu(lh->lh_flags); 144 head->lh_tail = be32_to_cpu(lh->lh_tail); 145 head->lh_blkno = be32_to_cpu(lh->lh_blkno); 146 147 head->lh_local_total = be64_to_cpu(lh->lh_local_total); 148 head->lh_local_free = be64_to_cpu(lh->lh_local_free); 149 head->lh_local_dinodes = be64_to_cpu(lh->lh_local_dinodes); 150 151 return 0; 152 } 153 /** 154 * get_log_header - read the log header for a given segment 155 * @jd: the journal 156 * @blk: the block to look at 157 * @head: the log header to return 158 * 159 * Read the log header for a given segment in a given journal. Do a few 160 * sanity checks on it. 161 * 162 * Returns: 0 on success, 163 * 1 if the header was invalid or incomplete, 164 * errno on error 165 */ 166 167 static int get_log_header(struct gfs2_jdesc *jd, unsigned int blk, 168 struct gfs2_log_header_host *head) 169 { 170 struct gfs2_sbd *sdp = GFS2_SB(jd->jd_inode); 171 struct buffer_head *bh; 172 int error; 173 174 error = gfs2_replay_read_block(jd, blk, &bh); 175 if (error) 176 return error; 177 178 error = __get_log_header(sdp, (const struct gfs2_log_header *)bh->b_data, 179 blk, head); 180 brelse(bh); 181 182 return error; 183 } 184 185 /** 186 * foreach_descriptor - go through the active part of the log 187 * @jd: the journal 188 * @start: the first log header in the active region 189 * @end: the last log header (don't process the contents of this entry)) 190 * @pass: iteration number (foreach_descriptor() is called in a for() loop) 191 * 192 * Call a given function once for every log descriptor in the active 193 * portion of the log. 194 * 195 * Returns: errno 196 */ 197 198 static int foreach_descriptor(struct gfs2_jdesc *jd, u32 start, 199 unsigned int end, int pass) 200 { 201 struct gfs2_sbd *sdp = GFS2_SB(jd->jd_inode); 202 struct buffer_head *bh; 203 struct gfs2_log_descriptor *ld; 204 int error = 0; 205 u32 length; 206 __be64 *ptr; 207 unsigned int offset = sizeof(struct gfs2_log_descriptor); 208 offset += sizeof(__be64) - 1; 209 offset &= ~(sizeof(__be64) - 1); 210 211 while (start != end) { 212 error = gfs2_replay_read_block(jd, start, &bh); 213 if (error) 214 return error; 215 if (gfs2_meta_check(sdp, bh)) { 216 brelse(bh); 217 return -EIO; 218 } 219 ld = (struct gfs2_log_descriptor *)bh->b_data; 220 length = be32_to_cpu(ld->ld_length); 221 222 if (be32_to_cpu(ld->ld_header.mh_type) == GFS2_METATYPE_LH) { 223 struct gfs2_log_header_host lh; 224 error = get_log_header(jd, start, &lh); 225 if (!error) { 226 gfs2_replay_incr_blk(jd, &start); 227 brelse(bh); 228 continue; 229 } 230 if (error == 1) { 231 gfs2_consist_inode(GFS2_I(jd->jd_inode)); 232 error = -EIO; 233 } 234 brelse(bh); 235 return error; 236 } else if (gfs2_metatype_check(sdp, bh, GFS2_METATYPE_LD)) { 237 brelse(bh); 238 return -EIO; 239 } 240 ptr = (__be64 *)(bh->b_data + offset); 241 error = lops_scan_elements(jd, start, ld, ptr, pass); 242 if (error) { 243 brelse(bh); 244 return error; 245 } 246 247 while (length--) 248 gfs2_replay_incr_blk(jd, &start); 249 250 brelse(bh); 251 } 252 253 return 0; 254 } 255 256 /** 257 * clean_journal - mark a dirty journal as being clean 258 * @jd: the journal 259 * @head: the head journal to start from 260 * 261 * Returns: errno 262 */ 263 264 static void clean_journal(struct gfs2_jdesc *jd, 265 struct gfs2_log_header_host *head) 266 { 267 struct gfs2_sbd *sdp = GFS2_SB(jd->jd_inode); 268 269 gfs2_replay_incr_blk(jd, &head->lh_blkno); 270 head->lh_sequence++; 271 gfs2_write_log_header(sdp, jd, head->lh_sequence, 0, head->lh_blkno, 272 GFS2_LOG_HEAD_UNMOUNT | GFS2_LOG_HEAD_RECOVERY, 273 REQ_PREFLUSH | REQ_FUA | REQ_META | REQ_SYNC); 274 } 275 276 277 static void gfs2_recovery_done(struct gfs2_sbd *sdp, unsigned int jid, 278 unsigned int message) 279 { 280 char env_jid[20]; 281 char env_status[20]; 282 char *envp[] = { env_jid, env_status, NULL }; 283 struct lm_lockstruct *ls = &sdp->sd_lockstruct; 284 285 ls->ls_recover_jid_done = jid; 286 ls->ls_recover_jid_status = message; 287 sprintf(env_jid, "JID=%u", jid); 288 sprintf(env_status, "RECOVERY=%s", 289 message == LM_RD_SUCCESS ? "Done" : "Failed"); 290 kobject_uevent_env(&sdp->sd_kobj, KOBJ_CHANGE, envp); 291 292 if (sdp->sd_lockstruct.ls_ops->lm_recovery_result) 293 sdp->sd_lockstruct.ls_ops->lm_recovery_result(sdp, jid, message); 294 } 295 296 /** 297 * update_statfs_inode - Update the master statfs inode or zero out the local 298 * statfs inode for a given journal. 299 * @jd: The journal 300 * @head: If NULL, @inode is the local statfs inode and we need to zero it out. 301 * Otherwise, it @head contains the statfs change info that needs to be 302 * synced to the master statfs inode (pointed to by @inode). 303 * @inode: statfs inode to update. 304 */ 305 static int update_statfs_inode(struct gfs2_jdesc *jd, 306 struct gfs2_log_header_host *head, 307 struct inode *inode) 308 { 309 struct gfs2_sbd *sdp = GFS2_SB(jd->jd_inode); 310 struct buffer_head *bh; 311 struct gfs2_statfs_change_host sc; 312 int error = 0; 313 314 BUG_ON(!inode); 315 316 error = gfs2_meta_inode_buffer(GFS2_I(inode), &bh); 317 if (error) 318 goto out; 319 320 spin_lock(&sdp->sd_statfs_spin); 321 322 if (head) { /* Update the master statfs inode */ 323 gfs2_statfs_change_in(&sc, bh->b_data + sizeof(struct gfs2_dinode)); 324 sc.sc_total += head->lh_local_total; 325 sc.sc_free += head->lh_local_free; 326 sc.sc_dinodes += head->lh_local_dinodes; 327 gfs2_statfs_change_out(&sc, bh->b_data + sizeof(struct gfs2_dinode)); 328 329 fs_info(sdp, "jid=%u: Updated master statfs Total:%lld, " 330 "Free:%lld, Dinodes:%lld after change " 331 "[%+lld,%+lld,%+lld]\n", jd->jd_jid, sc.sc_total, 332 sc.sc_free, sc.sc_dinodes, head->lh_local_total, 333 head->lh_local_free, head->lh_local_dinodes); 334 } else { /* Zero out the local statfs inode */ 335 memset(bh->b_data + sizeof(struct gfs2_dinode), 0, 336 sizeof(struct gfs2_statfs_change)); 337 /* If it's our own journal, reset any in-memory changes too */ 338 if (jd->jd_jid == sdp->sd_lockstruct.ls_jid) { 339 memset(&sdp->sd_statfs_local, 0, 340 sizeof(struct gfs2_statfs_change_host)); 341 } 342 } 343 spin_unlock(&sdp->sd_statfs_spin); 344 345 mark_buffer_dirty(bh); 346 brelse(bh); 347 gfs2_inode_metasync(gfs2_inode_glock(inode)); 348 349 out: 350 return error; 351 } 352 353 /** 354 * recover_local_statfs - Update the master and local statfs changes for this 355 * journal. 356 * 357 * Previously, statfs updates would be read in from the local statfs inode and 358 * synced to the master statfs inode during recovery. 359 * 360 * We now use the statfs updates in the journal head to update the master statfs 361 * inode instead of reading in from the local statfs inode. To preserve backward 362 * compatibility with kernels that can't do this, we still need to keep the 363 * local statfs inode up to date by writing changes to it. At some point in the 364 * future, we can do away with the local statfs inodes altogether and keep the 365 * statfs changes solely in the journal. 366 * 367 * @jd: the journal 368 * @head: the journal head 369 * 370 * Returns: errno 371 */ 372 static void recover_local_statfs(struct gfs2_jdesc *jd, 373 struct gfs2_log_header_host *head) 374 { 375 int error; 376 struct gfs2_sbd *sdp = GFS2_SB(jd->jd_inode); 377 378 if (!head->lh_local_total && !head->lh_local_free 379 && !head->lh_local_dinodes) /* No change */ 380 goto zero_local; 381 382 /* First update the master statfs inode with the changes we 383 * found in the journal. */ 384 error = update_statfs_inode(jd, head, sdp->sd_statfs_inode); 385 if (error) 386 goto out; 387 388 zero_local: 389 /* Zero out the local statfs inode so any changes in there 390 * are not re-recovered. */ 391 error = update_statfs_inode(jd, NULL, 392 find_local_statfs_inode(sdp, jd->jd_jid)); 393 out: 394 return; 395 } 396 397 void gfs2_recover_func(struct work_struct *work) 398 { 399 struct gfs2_jdesc *jd = container_of(work, struct gfs2_jdesc, jd_work); 400 struct gfs2_glock *gl = gfs2_inode_glock(jd->jd_inode); 401 struct gfs2_sbd *sdp = GFS2_SB(jd->jd_inode); 402 struct gfs2_log_header_host head; 403 struct gfs2_holder j_gh, ji_gh; 404 ktime_t t_start, t_jlck, t_jhd, t_tlck, t_rep; 405 int ro = 0; 406 unsigned int pass; 407 int error = 0; 408 int jlocked = 0; 409 410 if (gfs2_withdrawn(sdp)) { 411 fs_err(sdp, "jid=%u: Recovery not attempted due to withdraw.\n", 412 jd->jd_jid); 413 goto fail; 414 } 415 t_start = ktime_get(); 416 if (sdp->sd_args.ar_spectator) 417 goto fail; 418 if (jd->jd_jid != sdp->sd_lockstruct.ls_jid) { 419 fs_info(sdp, "jid=%u: Trying to acquire journal glock...\n", 420 jd->jd_jid); 421 jlocked = 1; 422 /* Acquire the journal glock so we can do recovery */ 423 424 error = gfs2_glock_nq_num(sdp, jd->jd_jid, &gfs2_journal_glops, 425 LM_ST_EXCLUSIVE, 426 LM_FLAG_RECOVER | LM_FLAG_TRY | 427 GL_NOCACHE, 428 &j_gh); 429 switch (error) { 430 case 0: 431 break; 432 433 case GLR_TRYFAILED: 434 fs_info(sdp, "jid=%u: Busy\n", jd->jd_jid); 435 error = 0; 436 goto fail; 437 438 default: 439 goto fail; 440 } 441 442 error = gfs2_glock_nq_init(gl, LM_ST_SHARED, 443 LM_FLAG_RECOVER | GL_NOCACHE, 444 &ji_gh); 445 if (error) 446 goto fail_gunlock_j; 447 } else { 448 fs_info(sdp, "jid=%u, already locked for use\n", jd->jd_jid); 449 } 450 451 t_jlck = ktime_get(); 452 fs_info(sdp, "jid=%u: Looking at journal...\n", jd->jd_jid); 453 454 error = gfs2_jdesc_check(jd); 455 if (error) 456 goto fail_gunlock_ji; 457 458 error = gfs2_find_jhead(jd, &head); 459 if (error) 460 goto fail_gunlock_ji; 461 t_jhd = ktime_get(); 462 fs_info(sdp, "jid=%u: Journal head lookup took %lldms\n", jd->jd_jid, 463 ktime_ms_delta(t_jhd, t_jlck)); 464 465 if (!(head.lh_flags & GFS2_LOG_HEAD_UNMOUNT)) { 466 mutex_lock(&sdp->sd_freeze_mutex); 467 468 if (test_bit(SDF_FROZEN, &sdp->sd_flags)) { 469 mutex_unlock(&sdp->sd_freeze_mutex); 470 fs_warn(sdp, "jid=%u: Can't replay: filesystem " 471 "is frozen\n", jd->jd_jid); 472 goto fail_gunlock_ji; 473 } 474 475 if (test_bit(SDF_RORECOVERY, &sdp->sd_flags)) { 476 ro = 1; 477 } else if (test_bit(SDF_JOURNAL_CHECKED, &sdp->sd_flags)) { 478 if (!test_bit(SDF_JOURNAL_LIVE, &sdp->sd_flags)) 479 ro = 1; 480 } else { 481 if (sb_rdonly(sdp->sd_vfs)) { 482 /* check if device itself is read-only */ 483 ro = bdev_read_only(sdp->sd_vfs->s_bdev); 484 if (!ro) { 485 fs_info(sdp, "recovery required on " 486 "read-only filesystem.\n"); 487 fs_info(sdp, "write access will be " 488 "enabled during recovery.\n"); 489 } 490 } 491 } 492 493 if (ro) { 494 fs_warn(sdp, "jid=%u: Can't replay: read-only block " 495 "device\n", jd->jd_jid); 496 error = -EROFS; 497 goto fail_gunlock_nofreeze; 498 } 499 500 t_tlck = ktime_get(); 501 fs_info(sdp, "jid=%u: Replaying journal...0x%x to 0x%x\n", 502 jd->jd_jid, head.lh_tail, head.lh_blkno); 503 504 /* We take the sd_log_flush_lock here primarily to prevent log 505 * flushes and simultaneous journal replays from stomping on 506 * each other wrt jd_log_bio. */ 507 down_read(&sdp->sd_log_flush_lock); 508 for (pass = 0; pass < 2; pass++) { 509 lops_before_scan(jd, &head, pass); 510 error = foreach_descriptor(jd, head.lh_tail, 511 head.lh_blkno, pass); 512 lops_after_scan(jd, error, pass); 513 if (error) { 514 up_read(&sdp->sd_log_flush_lock); 515 goto fail_gunlock_nofreeze; 516 } 517 } 518 519 recover_local_statfs(jd, &head); 520 clean_journal(jd, &head); 521 up_read(&sdp->sd_log_flush_lock); 522 523 mutex_unlock(&sdp->sd_freeze_mutex); 524 t_rep = ktime_get(); 525 fs_info(sdp, "jid=%u: Journal replayed in %lldms [jlck:%lldms, " 526 "jhead:%lldms, tlck:%lldms, replay:%lldms]\n", 527 jd->jd_jid, ktime_ms_delta(t_rep, t_start), 528 ktime_ms_delta(t_jlck, t_start), 529 ktime_ms_delta(t_jhd, t_jlck), 530 ktime_ms_delta(t_tlck, t_jhd), 531 ktime_ms_delta(t_rep, t_tlck)); 532 } 533 534 if (jd->jd_jid == sdp->sd_lockstruct.ls_jid) 535 gfs2_log_pointers_init(sdp, &head); 536 537 gfs2_recovery_done(sdp, jd->jd_jid, LM_RD_SUCCESS); 538 539 if (jlocked) { 540 gfs2_glock_dq_uninit(&ji_gh); 541 gfs2_glock_dq_uninit(&j_gh); 542 } 543 544 fs_info(sdp, "jid=%u: Done\n", jd->jd_jid); 545 goto done; 546 547 fail_gunlock_nofreeze: 548 mutex_unlock(&sdp->sd_freeze_mutex); 549 fail_gunlock_ji: 550 if (jlocked) { 551 gfs2_glock_dq_uninit(&ji_gh); 552 fail_gunlock_j: 553 gfs2_glock_dq_uninit(&j_gh); 554 } 555 556 fs_info(sdp, "jid=%u: %s\n", jd->jd_jid, (error) ? "Failed" : "Done"); 557 fail: 558 jd->jd_recover_error = error; 559 gfs2_recovery_done(sdp, jd->jd_jid, LM_RD_GAVEUP); 560 done: 561 clear_bit(JDF_RECOVERY, &jd->jd_flags); 562 smp_mb__after_atomic(); 563 wake_up_bit(&jd->jd_flags, JDF_RECOVERY); 564 } 565 566 int gfs2_recover_journal(struct gfs2_jdesc *jd, bool wait) 567 { 568 int rv; 569 570 if (test_and_set_bit(JDF_RECOVERY, &jd->jd_flags)) 571 return -EBUSY; 572 573 /* we have JDF_RECOVERY, queue should always succeed */ 574 rv = queue_work(gfs2_recovery_wq, &jd->jd_work); 575 BUG_ON(!rv); 576 577 if (wait) 578 wait_on_bit(&jd->jd_flags, JDF_RECOVERY, 579 TASK_UNINTERRUPTIBLE); 580 581 return wait ? jd->jd_recover_error : 0; 582 } 583 584 void gfs2_log_pointers_init(struct gfs2_sbd *sdp, 585 struct gfs2_log_header_host *head) 586 { 587 sdp->sd_log_sequence = head->lh_sequence + 1; 588 gfs2_replay_incr_blk(sdp->sd_jdesc, &head->lh_blkno); 589 sdp->sd_log_tail = head->lh_blkno; 590 sdp->sd_log_flush_head = head->lh_blkno; 591 sdp->sd_log_flush_tail = head->lh_blkno; 592 sdp->sd_log_head = head->lh_blkno; 593 } 594