1 // SPDX-License-Identifier: GPL-2.0-only 2 /* 3 * Copyright (C) Sistina Software, Inc. 1997-2003 All rights reserved. 4 * Copyright (C) 2004-2008 Red Hat, Inc. All rights reserved. 5 */ 6 7 #define pr_fmt(fmt) KBUILD_MODNAME ": " fmt 8 9 #include <linux/slab.h> 10 #include <linux/spinlock.h> 11 #include <linux/completion.h> 12 #include <linux/buffer_head.h> 13 #include <linux/fs.h> 14 #include <linux/gfs2_ondisk.h> 15 #include <linux/prefetch.h> 16 #include <linux/blkdev.h> 17 #include <linux/rbtree.h> 18 #include <linux/random.h> 19 20 #include "gfs2.h" 21 #include "incore.h" 22 #include "glock.h" 23 #include "glops.h" 24 #include "lops.h" 25 #include "meta_io.h" 26 #include "quota.h" 27 #include "rgrp.h" 28 #include "super.h" 29 #include "trans.h" 30 #include "util.h" 31 #include "log.h" 32 #include "inode.h" 33 #include "trace_gfs2.h" 34 #include "dir.h" 35 36 #define BFITNOENT ((u32)~0) 37 #define NO_BLOCK ((u64)~0) 38 39 struct gfs2_rbm { 40 struct gfs2_rgrpd *rgd; 41 u32 offset; /* The offset is bitmap relative */ 42 int bii; /* Bitmap index */ 43 }; 44 45 static inline struct gfs2_bitmap *rbm_bi(const struct gfs2_rbm *rbm) 46 { 47 return rbm->rgd->rd_bits + rbm->bii; 48 } 49 50 static inline u64 gfs2_rbm_to_block(const struct gfs2_rbm *rbm) 51 { 52 BUG_ON(rbm->offset >= rbm->rgd->rd_data); 53 return rbm->rgd->rd_data0 + (rbm_bi(rbm)->bi_start * GFS2_NBBY) + 54 rbm->offset; 55 } 56 57 /* 58 * These routines are used by the resource group routines (rgrp.c) 59 * to keep track of block allocation. Each block is represented by two 60 * bits. So, each byte represents GFS2_NBBY (i.e. 4) blocks. 61 * 62 * 0 = Free 63 * 1 = Used (not metadata) 64 * 2 = Unlinked (still in use) inode 65 * 3 = Used (metadata) 66 */ 67 68 struct gfs2_extent { 69 struct gfs2_rbm rbm; 70 u32 len; 71 }; 72 73 static const char valid_change[16] = { 74 /* current */ 75 /* n */ 0, 1, 1, 1, 76 /* e */ 1, 0, 0, 0, 77 /* w */ 0, 0, 0, 1, 78 1, 0, 0, 0 79 }; 80 81 static int gfs2_rbm_find(struct gfs2_rbm *rbm, u8 state, u32 *minext, 82 struct gfs2_blkreserv *rs, bool nowrap); 83 84 85 /** 86 * gfs2_setbit - Set a bit in the bitmaps 87 * @rbm: The position of the bit to set 88 * @do_clone: Also set the clone bitmap, if it exists 89 * @new_state: the new state of the block 90 * 91 */ 92 93 static inline void gfs2_setbit(const struct gfs2_rbm *rbm, bool do_clone, 94 unsigned char new_state) 95 { 96 unsigned char *byte1, *byte2, *end, cur_state; 97 struct gfs2_bitmap *bi = rbm_bi(rbm); 98 unsigned int buflen = bi->bi_bytes; 99 const unsigned int bit = (rbm->offset % GFS2_NBBY) * GFS2_BIT_SIZE; 100 101 byte1 = bi->bi_bh->b_data + bi->bi_offset + (rbm->offset / GFS2_NBBY); 102 end = bi->bi_bh->b_data + bi->bi_offset + buflen; 103 104 BUG_ON(byte1 >= end); 105 106 cur_state = (*byte1 >> bit) & GFS2_BIT_MASK; 107 108 if (unlikely(!valid_change[new_state * 4 + cur_state])) { 109 struct gfs2_sbd *sdp = rbm->rgd->rd_sbd; 110 111 fs_warn(sdp, "buf_blk = 0x%x old_state=%d, new_state=%d\n", 112 rbm->offset, cur_state, new_state); 113 fs_warn(sdp, "rgrp=0x%llx bi_start=0x%x biblk: 0x%llx\n", 114 (unsigned long long)rbm->rgd->rd_addr, bi->bi_start, 115 (unsigned long long)bi->bi_bh->b_blocknr); 116 fs_warn(sdp, "bi_offset=0x%x bi_bytes=0x%x block=0x%llx\n", 117 bi->bi_offset, bi->bi_bytes, 118 (unsigned long long)gfs2_rbm_to_block(rbm)); 119 dump_stack(); 120 gfs2_consist_rgrpd(rbm->rgd); 121 return; 122 } 123 *byte1 ^= (cur_state ^ new_state) << bit; 124 125 if (do_clone && bi->bi_clone) { 126 byte2 = bi->bi_clone + bi->bi_offset + (rbm->offset / GFS2_NBBY); 127 cur_state = (*byte2 >> bit) & GFS2_BIT_MASK; 128 *byte2 ^= (cur_state ^ new_state) << bit; 129 } 130 } 131 132 /** 133 * gfs2_testbit - test a bit in the bitmaps 134 * @rbm: The bit to test 135 * @use_clone: If true, test the clone bitmap, not the official bitmap. 136 * 137 * Some callers like gfs2_unaligned_extlen need to test the clone bitmaps, 138 * not the "real" bitmaps, to avoid allocating recently freed blocks. 139 * 140 * Returns: The two bit block state of the requested bit 141 */ 142 143 static inline u8 gfs2_testbit(const struct gfs2_rbm *rbm, bool use_clone) 144 { 145 struct gfs2_bitmap *bi = rbm_bi(rbm); 146 const u8 *buffer; 147 const u8 *byte; 148 unsigned int bit; 149 150 if (use_clone && bi->bi_clone) 151 buffer = bi->bi_clone; 152 else 153 buffer = bi->bi_bh->b_data; 154 buffer += bi->bi_offset; 155 byte = buffer + (rbm->offset / GFS2_NBBY); 156 bit = (rbm->offset % GFS2_NBBY) * GFS2_BIT_SIZE; 157 158 return (*byte >> bit) & GFS2_BIT_MASK; 159 } 160 161 /** 162 * gfs2_bit_search - search bitmap for a state 163 * @ptr: Pointer to bitmap data 164 * @mask: Mask to use (normally 0x55555.... but adjusted for search start) 165 * @state: The state we are searching for 166 * 167 * We xor the bitmap data with a pattern which is the bitwise opposite 168 * of what we are looking for. This gives rise to a pattern of ones 169 * wherever there is a match. Since we have two bits per entry, we 170 * take this pattern, shift it down by one place and then and it with 171 * the original. All the even bit positions (0,2,4, etc) then represent 172 * successful matches, so we mask with 0x55555..... to remove the unwanted 173 * odd bit positions. 174 * 175 * This allows searching of a whole u64 at once (32 blocks) with a 176 * single test (on 64 bit arches). 177 */ 178 179 static inline u64 gfs2_bit_search(const __le64 *ptr, u64 mask, u8 state) 180 { 181 u64 tmp; 182 static const u64 search[] = { 183 [0] = 0xffffffffffffffffULL, 184 [1] = 0xaaaaaaaaaaaaaaaaULL, 185 [2] = 0x5555555555555555ULL, 186 [3] = 0x0000000000000000ULL, 187 }; 188 tmp = le64_to_cpu(*ptr) ^ search[state]; 189 tmp &= (tmp >> 1); 190 tmp &= mask; 191 return tmp; 192 } 193 194 /** 195 * rs_cmp - multi-block reservation range compare 196 * @start: start of the new reservation 197 * @len: number of blocks in the new reservation 198 * @rs: existing reservation to compare against 199 * 200 * returns: 1 if the block range is beyond the reach of the reservation 201 * -1 if the block range is before the start of the reservation 202 * 0 if the block range overlaps with the reservation 203 */ 204 static inline int rs_cmp(u64 start, u32 len, struct gfs2_blkreserv *rs) 205 { 206 if (start >= rs->rs_start + rs->rs_requested) 207 return 1; 208 if (rs->rs_start >= start + len) 209 return -1; 210 return 0; 211 } 212 213 /** 214 * gfs2_bitfit - Search an rgrp's bitmap buffer to find a bit-pair representing 215 * a block in a given allocation state. 216 * @buf: the buffer that holds the bitmaps 217 * @len: the length (in bytes) of the buffer 218 * @goal: start search at this block's bit-pair (within @buffer) 219 * @state: GFS2_BLKST_XXX the state of the block we're looking for. 220 * 221 * Scope of @goal and returned block number is only within this bitmap buffer, 222 * not entire rgrp or filesystem. @buffer will be offset from the actual 223 * beginning of a bitmap block buffer, skipping any header structures, but 224 * headers are always a multiple of 64 bits long so that the buffer is 225 * always aligned to a 64 bit boundary. 226 * 227 * The size of the buffer is in bytes, but is it assumed that it is 228 * always ok to read a complete multiple of 64 bits at the end 229 * of the block in case the end is no aligned to a natural boundary. 230 * 231 * Return: the block number (bitmap buffer scope) that was found 232 */ 233 234 static u32 gfs2_bitfit(const u8 *buf, const unsigned int len, 235 u32 goal, u8 state) 236 { 237 u32 spoint = (goal << 1) & ((8*sizeof(u64)) - 1); 238 const __le64 *ptr = ((__le64 *)buf) + (goal >> 5); 239 const __le64 *end = (__le64 *)(buf + ALIGN(len, sizeof(u64))); 240 u64 tmp; 241 u64 mask = 0x5555555555555555ULL; 242 u32 bit; 243 244 /* Mask off bits we don't care about at the start of the search */ 245 mask <<= spoint; 246 tmp = gfs2_bit_search(ptr, mask, state); 247 ptr++; 248 while(tmp == 0 && ptr < end) { 249 tmp = gfs2_bit_search(ptr, 0x5555555555555555ULL, state); 250 ptr++; 251 } 252 /* Mask off any bits which are more than len bytes from the start */ 253 if (ptr == end && (len & (sizeof(u64) - 1))) 254 tmp &= (((u64)~0) >> (64 - 8*(len & (sizeof(u64) - 1)))); 255 /* Didn't find anything, so return */ 256 if (tmp == 0) 257 return BFITNOENT; 258 ptr--; 259 bit = __ffs64(tmp); 260 bit /= 2; /* two bits per entry in the bitmap */ 261 return (((const unsigned char *)ptr - buf) * GFS2_NBBY) + bit; 262 } 263 264 /** 265 * gfs2_rbm_from_block - Set the rbm based upon rgd and block number 266 * @rbm: The rbm with rgd already set correctly 267 * @block: The block number (filesystem relative) 268 * 269 * This sets the bi and offset members of an rbm based on a 270 * resource group and a filesystem relative block number. The 271 * resource group must be set in the rbm on entry, the bi and 272 * offset members will be set by this function. 273 * 274 * Returns: 0 on success, or an error code 275 */ 276 277 static int gfs2_rbm_from_block(struct gfs2_rbm *rbm, u64 block) 278 { 279 if (!rgrp_contains_block(rbm->rgd, block)) 280 return -E2BIG; 281 rbm->bii = 0; 282 rbm->offset = block - rbm->rgd->rd_data0; 283 /* Check if the block is within the first block */ 284 if (rbm->offset < rbm_bi(rbm)->bi_blocks) 285 return 0; 286 287 /* Adjust for the size diff between gfs2_meta_header and gfs2_rgrp */ 288 rbm->offset += (sizeof(struct gfs2_rgrp) - 289 sizeof(struct gfs2_meta_header)) * GFS2_NBBY; 290 rbm->bii = rbm->offset / rbm->rgd->rd_sbd->sd_blocks_per_bitmap; 291 rbm->offset -= rbm->bii * rbm->rgd->rd_sbd->sd_blocks_per_bitmap; 292 return 0; 293 } 294 295 /** 296 * gfs2_rbm_add - add a number of blocks to an rbm 297 * @rbm: The rbm with rgd already set correctly 298 * @blocks: The number of blocks to add to rpm 299 * 300 * This function takes an existing rbm structure and adds a number of blocks to 301 * it. 302 * 303 * Returns: True if the new rbm would point past the end of the rgrp. 304 */ 305 306 static bool gfs2_rbm_add(struct gfs2_rbm *rbm, u32 blocks) 307 { 308 struct gfs2_rgrpd *rgd = rbm->rgd; 309 struct gfs2_bitmap *bi = rgd->rd_bits + rbm->bii; 310 311 if (rbm->offset + blocks < bi->bi_blocks) { 312 rbm->offset += blocks; 313 return false; 314 } 315 blocks -= bi->bi_blocks - rbm->offset; 316 317 for(;;) { 318 bi++; 319 if (bi == rgd->rd_bits + rgd->rd_length) 320 return true; 321 if (blocks < bi->bi_blocks) { 322 rbm->offset = blocks; 323 rbm->bii = bi - rgd->rd_bits; 324 return false; 325 } 326 blocks -= bi->bi_blocks; 327 } 328 } 329 330 /** 331 * gfs2_unaligned_extlen - Look for free blocks which are not byte aligned 332 * @rbm: Position to search (value/result) 333 * @n_unaligned: Number of unaligned blocks to check 334 * @len: Decremented for each block found (terminate on zero) 335 * 336 * Returns: true if a non-free block is encountered or the end of the resource 337 * group is reached. 338 */ 339 340 static bool gfs2_unaligned_extlen(struct gfs2_rbm *rbm, u32 n_unaligned, u32 *len) 341 { 342 u32 n; 343 u8 res; 344 345 for (n = 0; n < n_unaligned; n++) { 346 res = gfs2_testbit(rbm, true); 347 if (res != GFS2_BLKST_FREE) 348 return true; 349 (*len)--; 350 if (*len == 0) 351 return true; 352 if (gfs2_rbm_add(rbm, 1)) 353 return true; 354 } 355 356 return false; 357 } 358 359 /** 360 * gfs2_free_extlen - Return extent length of free blocks 361 * @rrbm: Starting position 362 * @len: Max length to check 363 * 364 * Starting at the block specified by the rbm, see how many free blocks 365 * there are, not reading more than len blocks ahead. This can be done 366 * using memchr_inv when the blocks are byte aligned, but has to be done 367 * on a block by block basis in case of unaligned blocks. Also this 368 * function can cope with bitmap boundaries (although it must stop on 369 * a resource group boundary) 370 * 371 * Returns: Number of free blocks in the extent 372 */ 373 374 static u32 gfs2_free_extlen(const struct gfs2_rbm *rrbm, u32 len) 375 { 376 struct gfs2_rbm rbm = *rrbm; 377 u32 n_unaligned = rbm.offset & 3; 378 u32 size = len; 379 u32 bytes; 380 u32 chunk_size; 381 u8 *ptr, *start, *end; 382 u64 block; 383 struct gfs2_bitmap *bi; 384 385 if (n_unaligned && 386 gfs2_unaligned_extlen(&rbm, 4 - n_unaligned, &len)) 387 goto out; 388 389 n_unaligned = len & 3; 390 /* Start is now byte aligned */ 391 while (len > 3) { 392 bi = rbm_bi(&rbm); 393 start = bi->bi_bh->b_data; 394 if (bi->bi_clone) 395 start = bi->bi_clone; 396 start += bi->bi_offset; 397 end = start + bi->bi_bytes; 398 BUG_ON(rbm.offset & 3); 399 start += (rbm.offset / GFS2_NBBY); 400 bytes = min_t(u32, len / GFS2_NBBY, (end - start)); 401 ptr = memchr_inv(start, 0, bytes); 402 chunk_size = ((ptr == NULL) ? bytes : (ptr - start)); 403 chunk_size *= GFS2_NBBY; 404 BUG_ON(len < chunk_size); 405 len -= chunk_size; 406 block = gfs2_rbm_to_block(&rbm); 407 if (gfs2_rbm_from_block(&rbm, block + chunk_size)) { 408 n_unaligned = 0; 409 break; 410 } 411 if (ptr) { 412 n_unaligned = 3; 413 break; 414 } 415 n_unaligned = len & 3; 416 } 417 418 /* Deal with any bits left over at the end */ 419 if (n_unaligned) 420 gfs2_unaligned_extlen(&rbm, n_unaligned, &len); 421 out: 422 return size - len; 423 } 424 425 /** 426 * gfs2_bitcount - count the number of bits in a certain state 427 * @rgd: the resource group descriptor 428 * @buffer: the buffer that holds the bitmaps 429 * @buflen: the length (in bytes) of the buffer 430 * @state: the state of the block we're looking for 431 * 432 * Returns: The number of bits 433 */ 434 435 static u32 gfs2_bitcount(struct gfs2_rgrpd *rgd, const u8 *buffer, 436 unsigned int buflen, u8 state) 437 { 438 const u8 *byte = buffer; 439 const u8 *end = buffer + buflen; 440 const u8 state1 = state << 2; 441 const u8 state2 = state << 4; 442 const u8 state3 = state << 6; 443 u32 count = 0; 444 445 for (; byte < end; byte++) { 446 if (((*byte) & 0x03) == state) 447 count++; 448 if (((*byte) & 0x0C) == state1) 449 count++; 450 if (((*byte) & 0x30) == state2) 451 count++; 452 if (((*byte) & 0xC0) == state3) 453 count++; 454 } 455 456 return count; 457 } 458 459 /** 460 * gfs2_rgrp_verify - Verify that a resource group is consistent 461 * @rgd: the rgrp 462 * 463 */ 464 465 void gfs2_rgrp_verify(struct gfs2_rgrpd *rgd) 466 { 467 struct gfs2_sbd *sdp = rgd->rd_sbd; 468 struct gfs2_bitmap *bi = NULL; 469 u32 length = rgd->rd_length; 470 u32 count[4], tmp; 471 int buf, x; 472 473 memset(count, 0, 4 * sizeof(u32)); 474 475 /* Count # blocks in each of 4 possible allocation states */ 476 for (buf = 0; buf < length; buf++) { 477 bi = rgd->rd_bits + buf; 478 for (x = 0; x < 4; x++) 479 count[x] += gfs2_bitcount(rgd, 480 bi->bi_bh->b_data + 481 bi->bi_offset, 482 bi->bi_bytes, x); 483 } 484 485 if (count[0] != rgd->rd_free) { 486 gfs2_lm(sdp, "free data mismatch: %u != %u\n", 487 count[0], rgd->rd_free); 488 gfs2_consist_rgrpd(rgd); 489 return; 490 } 491 492 tmp = rgd->rd_data - rgd->rd_free - rgd->rd_dinodes; 493 if (count[1] != tmp) { 494 gfs2_lm(sdp, "used data mismatch: %u != %u\n", 495 count[1], tmp); 496 gfs2_consist_rgrpd(rgd); 497 return; 498 } 499 500 if (count[2] + count[3] != rgd->rd_dinodes) { 501 gfs2_lm(sdp, "used metadata mismatch: %u != %u\n", 502 count[2] + count[3], rgd->rd_dinodes); 503 gfs2_consist_rgrpd(rgd); 504 return; 505 } 506 } 507 508 /** 509 * gfs2_blk2rgrpd - Find resource group for a given data/meta block number 510 * @sdp: The GFS2 superblock 511 * @blk: The data block number 512 * @exact: True if this needs to be an exact match 513 * 514 * The @exact argument should be set to true by most callers. The exception 515 * is when we need to match blocks which are not represented by the rgrp 516 * bitmap, but which are part of the rgrp (i.e. padding blocks) which are 517 * there for alignment purposes. Another way of looking at it is that @exact 518 * matches only valid data/metadata blocks, but with @exact false, it will 519 * match any block within the extent of the rgrp. 520 * 521 * Returns: The resource group, or NULL if not found 522 */ 523 524 struct gfs2_rgrpd *gfs2_blk2rgrpd(struct gfs2_sbd *sdp, u64 blk, bool exact) 525 { 526 struct rb_node *n, *next; 527 struct gfs2_rgrpd *cur; 528 529 spin_lock(&sdp->sd_rindex_spin); 530 n = sdp->sd_rindex_tree.rb_node; 531 while (n) { 532 cur = rb_entry(n, struct gfs2_rgrpd, rd_node); 533 next = NULL; 534 if (blk < cur->rd_addr) 535 next = n->rb_left; 536 else if (blk >= cur->rd_data0 + cur->rd_data) 537 next = n->rb_right; 538 if (next == NULL) { 539 spin_unlock(&sdp->sd_rindex_spin); 540 if (exact) { 541 if (blk < cur->rd_addr) 542 return NULL; 543 if (blk >= cur->rd_data0 + cur->rd_data) 544 return NULL; 545 } 546 return cur; 547 } 548 n = next; 549 } 550 spin_unlock(&sdp->sd_rindex_spin); 551 552 return NULL; 553 } 554 555 /** 556 * gfs2_rgrpd_get_first - get the first Resource Group in the filesystem 557 * @sdp: The GFS2 superblock 558 * 559 * Returns: The first rgrp in the filesystem 560 */ 561 562 struct gfs2_rgrpd *gfs2_rgrpd_get_first(struct gfs2_sbd *sdp) 563 { 564 const struct rb_node *n; 565 struct gfs2_rgrpd *rgd; 566 567 spin_lock(&sdp->sd_rindex_spin); 568 n = rb_first(&sdp->sd_rindex_tree); 569 rgd = rb_entry(n, struct gfs2_rgrpd, rd_node); 570 spin_unlock(&sdp->sd_rindex_spin); 571 572 return rgd; 573 } 574 575 /** 576 * gfs2_rgrpd_get_next - get the next RG 577 * @rgd: the resource group descriptor 578 * 579 * Returns: The next rgrp 580 */ 581 582 struct gfs2_rgrpd *gfs2_rgrpd_get_next(struct gfs2_rgrpd *rgd) 583 { 584 struct gfs2_sbd *sdp = rgd->rd_sbd; 585 const struct rb_node *n; 586 587 spin_lock(&sdp->sd_rindex_spin); 588 n = rb_next(&rgd->rd_node); 589 if (n == NULL) 590 n = rb_first(&sdp->sd_rindex_tree); 591 592 if (unlikely(&rgd->rd_node == n)) { 593 spin_unlock(&sdp->sd_rindex_spin); 594 return NULL; 595 } 596 rgd = rb_entry(n, struct gfs2_rgrpd, rd_node); 597 spin_unlock(&sdp->sd_rindex_spin); 598 return rgd; 599 } 600 601 void check_and_update_goal(struct gfs2_inode *ip) 602 { 603 struct gfs2_sbd *sdp = GFS2_SB(&ip->i_inode); 604 if (!ip->i_goal || gfs2_blk2rgrpd(sdp, ip->i_goal, 1) == NULL) 605 ip->i_goal = ip->i_no_addr; 606 } 607 608 void gfs2_free_clones(struct gfs2_rgrpd *rgd) 609 { 610 int x; 611 612 for (x = 0; x < rgd->rd_length; x++) { 613 struct gfs2_bitmap *bi = rgd->rd_bits + x; 614 kfree(bi->bi_clone); 615 bi->bi_clone = NULL; 616 } 617 } 618 619 static void dump_rs(struct seq_file *seq, const struct gfs2_blkreserv *rs, 620 const char *fs_id_buf) 621 { 622 struct gfs2_inode *ip = container_of(rs, struct gfs2_inode, i_res); 623 624 gfs2_print_dbg(seq, "%s B: n:%llu s:%llu f:%u\n", 625 fs_id_buf, 626 (unsigned long long)ip->i_no_addr, 627 (unsigned long long)rs->rs_start, 628 rs->rs_requested); 629 } 630 631 /** 632 * __rs_deltree - remove a multi-block reservation from the rgd tree 633 * @rs: The reservation to remove 634 * 635 */ 636 static void __rs_deltree(struct gfs2_blkreserv *rs) 637 { 638 struct gfs2_rgrpd *rgd; 639 640 if (!gfs2_rs_active(rs)) 641 return; 642 643 rgd = rs->rs_rgd; 644 trace_gfs2_rs(rs, TRACE_RS_TREEDEL); 645 rb_erase(&rs->rs_node, &rgd->rd_rstree); 646 RB_CLEAR_NODE(&rs->rs_node); 647 648 if (rs->rs_requested) { 649 /* return requested blocks to the rgrp */ 650 BUG_ON(rs->rs_rgd->rd_requested < rs->rs_requested); 651 rs->rs_rgd->rd_requested -= rs->rs_requested; 652 653 /* The rgrp extent failure point is likely not to increase; 654 it will only do so if the freed blocks are somehow 655 contiguous with a span of free blocks that follows. Still, 656 it will force the number to be recalculated later. */ 657 rgd->rd_extfail_pt += rs->rs_requested; 658 rs->rs_requested = 0; 659 } 660 } 661 662 /** 663 * gfs2_rs_deltree - remove a multi-block reservation from the rgd tree 664 * @rs: The reservation to remove 665 * 666 */ 667 void gfs2_rs_deltree(struct gfs2_blkreserv *rs) 668 { 669 struct gfs2_rgrpd *rgd; 670 671 rgd = rs->rs_rgd; 672 if (rgd) { 673 spin_lock(&rgd->rd_rsspin); 674 __rs_deltree(rs); 675 BUG_ON(rs->rs_requested); 676 spin_unlock(&rgd->rd_rsspin); 677 } 678 } 679 680 /** 681 * gfs2_rs_delete - delete a multi-block reservation 682 * @ip: The inode for this reservation 683 * 684 */ 685 void gfs2_rs_delete(struct gfs2_inode *ip) 686 { 687 struct inode *inode = &ip->i_inode; 688 689 down_write(&ip->i_rw_mutex); 690 if (atomic_read(&inode->i_writecount) <= 1) 691 gfs2_rs_deltree(&ip->i_res); 692 up_write(&ip->i_rw_mutex); 693 } 694 695 /** 696 * return_all_reservations - return all reserved blocks back to the rgrp. 697 * @rgd: the rgrp that needs its space back 698 * 699 * We previously reserved a bunch of blocks for allocation. Now we need to 700 * give them back. This leave the reservation structures in tact, but removes 701 * all of their corresponding "no-fly zones". 702 */ 703 static void return_all_reservations(struct gfs2_rgrpd *rgd) 704 { 705 struct rb_node *n; 706 struct gfs2_blkreserv *rs; 707 708 spin_lock(&rgd->rd_rsspin); 709 while ((n = rb_first(&rgd->rd_rstree))) { 710 rs = rb_entry(n, struct gfs2_blkreserv, rs_node); 711 __rs_deltree(rs); 712 } 713 spin_unlock(&rgd->rd_rsspin); 714 } 715 716 void gfs2_clear_rgrpd(struct gfs2_sbd *sdp) 717 { 718 struct rb_node *n; 719 struct gfs2_rgrpd *rgd; 720 struct gfs2_glock *gl; 721 722 while ((n = rb_first(&sdp->sd_rindex_tree))) { 723 rgd = rb_entry(n, struct gfs2_rgrpd, rd_node); 724 gl = rgd->rd_gl; 725 726 rb_erase(n, &sdp->sd_rindex_tree); 727 728 if (gl) { 729 if (gl->gl_state != LM_ST_UNLOCKED) { 730 gfs2_glock_cb(gl, LM_ST_UNLOCKED); 731 flush_delayed_work(&gl->gl_work); 732 } 733 gfs2_rgrp_brelse(rgd); 734 glock_clear_object(gl, rgd); 735 gfs2_glock_put(gl); 736 } 737 738 gfs2_free_clones(rgd); 739 return_all_reservations(rgd); 740 kfree(rgd->rd_bits); 741 rgd->rd_bits = NULL; 742 kmem_cache_free(gfs2_rgrpd_cachep, rgd); 743 } 744 } 745 746 /** 747 * compute_bitstructs - Compute the bitmap sizes 748 * @sb: The superblock 749 * @rgd: The resource group descriptor 750 * 751 * Calculates bitmap descriptors, one for each block that contains bitmap data 752 * 753 * Returns: errno 754 */ 755 756 static int compute_bitstructs(struct super_block *sb, struct gfs2_rgrpd *rgd) 757 { 758 struct gfs2_sbd *sdp = rgd->rd_sbd; 759 struct gfs2_bitmap *bi; 760 u32 expected_length; 761 u32 bytes_left, bytes; 762 u64 data_end; 763 int x; 764 765 /* 766 * The first resource group block has a gfs2_rgrp header; the remaining 767 * blocks have a gfs2_meta_header header. The rest of each block is 768 * filled with bitmap data. 769 */ 770 771 if (rgd->rd_addr <= (GFS2_SB_ADDR >> sdp->sd_fsb2bb_shift)) { 772 gfs2_consist_rgrpd(rgd); 773 return -EIO; 774 } 775 if (check_add_overflow(rgd->rd_data0, rgd->rd_data, &data_end) || 776 rgd->rd_data == 0 || data_end > sb_bdev_nr_blocks(sb)) { 777 gfs2_consist_rgrpd(rgd); 778 return -EIO; 779 } 780 if (rgd->rd_bitbytes != DIV_ROUND_UP(rgd->rd_data, GFS2_NBBY)) { 781 gfs2_consist_rgrpd(rgd); 782 return -EIO; 783 } 784 expected_length = DIV_ROUND_UP(rgd->rd_bitbytes + 785 sizeof(struct gfs2_rgrp) - sizeof(struct gfs2_meta_header), 786 sdp->sd_sb.sb_bsize - sizeof(struct gfs2_meta_header)); 787 if (rgd->rd_length != expected_length) { 788 gfs2_consist_rgrpd(rgd); 789 return -EIO; 790 } 791 if (rgd->rd_data0 < rgd->rd_addr + rgd->rd_length) { 792 gfs2_consist_rgrpd(rgd); 793 return -EIO; 794 } 795 796 rgd->rd_bits = kzalloc_objs(struct gfs2_bitmap, rgd->rd_length, GFP_NOFS); 797 if (!rgd->rd_bits) 798 return -ENOMEM; 799 800 bytes_left = rgd->rd_bitbytes; 801 802 for (x = 0; x < rgd->rd_length; x++) { 803 bi = rgd->rd_bits + x; 804 805 bi->bi_flags = 0; 806 if (x == 0) { 807 /* header block */ 808 bi->bi_start = 0; 809 bi->bi_offset = sizeof(struct gfs2_rgrp); 810 } else { 811 /* bitmap-only block */ 812 struct gfs2_bitmap *prev = bi - 1; 813 814 bi->bi_start = prev->bi_start + prev->bi_bytes; 815 bi->bi_offset = sizeof(struct gfs2_meta_header); 816 } 817 bytes = sdp->sd_sb.sb_bsize - bi->bi_offset; 818 if (bytes > bytes_left) 819 bytes = bytes_left; 820 bi->bi_bytes = bytes; 821 bi->bi_blocks = bytes * GFS2_NBBY; 822 bytes_left -= bytes; 823 } 824 return 0; 825 } 826 827 /** 828 * gfs2_ri_total - Total up the file system space, according to the rindex. 829 * @sdp: the filesystem 830 * 831 */ 832 u64 gfs2_ri_total(struct gfs2_sbd *sdp) 833 { 834 u64 total_data = 0; 835 struct inode *inode = sdp->sd_rindex; 836 struct gfs2_inode *ip = GFS2_I(inode); 837 char buf[sizeof(struct gfs2_rindex)]; 838 int error, rgrps; 839 840 for (rgrps = 0;; rgrps++) { 841 loff_t pos = rgrps * sizeof(struct gfs2_rindex); 842 843 if (pos + sizeof(struct gfs2_rindex) > i_size_read(inode)) 844 break; 845 error = gfs2_internal_read(ip, buf, &pos, 846 sizeof(struct gfs2_rindex)); 847 if (error != sizeof(struct gfs2_rindex)) 848 break; 849 total_data += be32_to_cpu(((struct gfs2_rindex *)buf)->ri_data); 850 } 851 return total_data; 852 } 853 854 static int rgd_insert(struct gfs2_rgrpd *rgd) 855 { 856 struct gfs2_sbd *sdp = rgd->rd_sbd; 857 struct rb_node **newn = &sdp->sd_rindex_tree.rb_node, *parent = NULL; 858 struct rb_node *prevn; 859 860 /* Figure out where to put new node */ 861 while (*newn) { 862 struct gfs2_rgrpd *cur = rb_entry(*newn, struct gfs2_rgrpd, 863 rd_node); 864 865 parent = *newn; 866 if (rgd->rd_addr < cur->rd_addr) 867 newn = &((*newn)->rb_left); 868 else if (rgd->rd_addr > cur->rd_addr) 869 newn = &((*newn)->rb_right); 870 else 871 return -EEXIST; 872 } 873 874 rb_link_node(&rgd->rd_node, parent, newn); 875 rb_insert_color(&rgd->rd_node, &sdp->sd_rindex_tree); 876 sdp->sd_rgrps++; 877 878 prevn = rb_prev(&rgd->rd_node); 879 if (prevn) { 880 struct gfs2_rgrpd *prev = 881 rb_entry(prevn, struct gfs2_rgrpd, rd_node); 882 883 if (prev->rd_data0 + prev->rd_data > rgd->rd_addr) { 884 fs_err(sdp, "overlapping resource groups.\n"); 885 rb_erase(&rgd->rd_node, &sdp->sd_rindex_tree); 886 return -ENOENT; 887 } 888 } 889 890 return 0; 891 } 892 893 /** 894 * read_rindex_entry - Pull in a new resource index entry from the disk 895 * @ip: Pointer to the rindex inode 896 * 897 * Returns: 0 on success, > 0 on EOF, error code otherwise 898 */ 899 900 static int read_rindex_entry(struct gfs2_inode *ip) 901 { 902 struct gfs2_sbd *sdp = GFS2_SB(&ip->i_inode); 903 loff_t pos = sdp->sd_rgrps * sizeof(struct gfs2_rindex); 904 struct gfs2_rindex buf; 905 int error; 906 struct gfs2_rgrpd *rgd; 907 908 if (pos >= i_size_read(&ip->i_inode)) 909 return 1; 910 911 error = gfs2_internal_read(ip, (char *)&buf, &pos, 912 sizeof(struct gfs2_rindex)); 913 914 if (error != sizeof(struct gfs2_rindex)) 915 return (error == 0) ? 1 : error; 916 917 rgd = kmem_cache_zalloc(gfs2_rgrpd_cachep, GFP_NOFS); 918 error = -ENOMEM; 919 if (!rgd) 920 return error; 921 922 rgd->rd_sbd = sdp; 923 rgd->rd_addr = be64_to_cpu(buf.ri_addr); 924 rgd->rd_length = be32_to_cpu(buf.ri_length); 925 rgd->rd_data0 = be64_to_cpu(buf.ri_data0); 926 rgd->rd_data = be32_to_cpu(buf.ri_data); 927 rgd->rd_bitbytes = be32_to_cpu(buf.ri_bitbytes); 928 spin_lock_init(&rgd->rd_rsspin); 929 mutex_init(&rgd->rd_mutex); 930 931 error = gfs2_glock_get(sdp, rgd->rd_addr, 932 &gfs2_rgrp_glops, CREATE, &rgd->rd_gl); 933 if (error) 934 goto fail; 935 936 error = compute_bitstructs(sdp->sd_vfs, rgd); 937 if (error) 938 goto fail_glock; 939 940 rgd->rd_rgl = (struct gfs2_rgrp_lvb *)rgd->rd_gl->gl_lksb.sb_lvbptr; 941 rgd->rd_flags &= ~GFS2_RDF_PREFERRED; 942 if (rgd->rd_data > sdp->sd_max_rg_data) 943 sdp->sd_max_rg_data = rgd->rd_data; 944 spin_lock(&sdp->sd_rindex_spin); 945 error = rgd_insert(rgd); 946 spin_unlock(&sdp->sd_rindex_spin); 947 if (!error) { 948 glock_set_object(rgd->rd_gl, rgd); 949 return 0; 950 } 951 952 /* If someone else read in the rgrp, free it and ignore it. */ 953 if (error == -EEXIST) 954 error = 0; 955 fail_glock: 956 gfs2_glock_put(rgd->rd_gl); 957 958 fail: 959 kfree(rgd->rd_bits); 960 rgd->rd_bits = NULL; 961 kmem_cache_free(gfs2_rgrpd_cachep, rgd); 962 return error; 963 } 964 965 /** 966 * set_rgrp_preferences - Run all the rgrps, selecting some we prefer to use 967 * @sdp: the GFS2 superblock 968 * 969 * The purpose of this function is to select a subset of the resource groups 970 * and mark them as PREFERRED. We do it in such a way that each node prefers 971 * to use a unique set of rgrps to minimize glock contention. 972 */ 973 static void set_rgrp_preferences(struct gfs2_sbd *sdp) 974 { 975 struct gfs2_rgrpd *rgd, *first; 976 int i; 977 978 /* Skip an initial number of rgrps, based on this node's journal ID. 979 That should start each node out on its own set. */ 980 rgd = gfs2_rgrpd_get_first(sdp); 981 for (i = 0; i < sdp->sd_lockstruct.ls_jid; i++) 982 rgd = gfs2_rgrpd_get_next(rgd); 983 first = rgd; 984 985 do { 986 rgd->rd_flags |= GFS2_RDF_PREFERRED; 987 for (i = 0; i < sdp->sd_journals; i++) { 988 rgd = gfs2_rgrpd_get_next(rgd); 989 if (!rgd || rgd == first) 990 break; 991 } 992 } while (rgd && rgd != first); 993 } 994 995 /** 996 * gfs2_ri_update - Pull in a new resource index from the disk 997 * @ip: pointer to the rindex inode 998 * 999 * Returns: 0 on successful update, error code otherwise 1000 */ 1001 1002 static int gfs2_ri_update(struct gfs2_inode *ip) 1003 { 1004 struct gfs2_sbd *sdp = GFS2_SB(&ip->i_inode); 1005 int error; 1006 1007 do { 1008 error = read_rindex_entry(ip); 1009 } while (error == 0); 1010 1011 if (error < 0) 1012 return error; 1013 1014 if (RB_EMPTY_ROOT(&sdp->sd_rindex_tree)) { 1015 fs_err(sdp, "no resource groups found in the file system.\n"); 1016 return -ENOENT; 1017 } 1018 set_rgrp_preferences(sdp); 1019 1020 sdp->sd_rindex_uptodate = 1; 1021 return 0; 1022 } 1023 1024 /** 1025 * gfs2_rindex_update - Update the rindex if required 1026 * @sdp: The GFS2 superblock 1027 * 1028 * We grab a lock on the rindex inode to make sure that it doesn't 1029 * change whilst we are performing an operation. We keep this lock 1030 * for quite long periods of time compared to other locks. This 1031 * doesn't matter, since it is shared and it is very, very rarely 1032 * accessed in the exclusive mode (i.e. only when expanding the filesystem). 1033 * 1034 * This makes sure that we're using the latest copy of the resource index 1035 * special file, which might have been updated if someone expanded the 1036 * filesystem (via gfs2_grow utility), which adds new resource groups. 1037 * 1038 * Returns: 0 on succeess, error code otherwise 1039 */ 1040 1041 int gfs2_rindex_update(struct gfs2_sbd *sdp) 1042 { 1043 struct gfs2_glock *gl = gfs2_inode_glock(sdp->sd_rindex); 1044 struct gfs2_inode *ip = GFS2_I(sdp->sd_rindex); 1045 struct gfs2_holder ri_gh; 1046 int error = 0; 1047 int unlock_required = 0; 1048 1049 /* Read new copy from disk if we don't have the latest */ 1050 if (!sdp->sd_rindex_uptodate) { 1051 if (!gfs2_glock_is_locked_by_me(gl)) { 1052 error = gfs2_glock_nq_init(gl, LM_ST_SHARED, 0, &ri_gh); 1053 if (error) 1054 return error; 1055 unlock_required = 1; 1056 } 1057 if (!sdp->sd_rindex_uptodate) 1058 error = gfs2_ri_update(ip); 1059 if (unlock_required) 1060 gfs2_glock_dq_uninit(&ri_gh); 1061 } 1062 1063 return error; 1064 } 1065 1066 static void gfs2_rgrp_in(struct gfs2_rgrpd *rgd, const void *buf) 1067 { 1068 const struct gfs2_rgrp *str = buf; 1069 u32 rg_flags; 1070 1071 rg_flags = be32_to_cpu(str->rg_flags); 1072 rg_flags &= ~GFS2_RDF_MASK; 1073 rgd->rd_flags &= GFS2_RDF_MASK; 1074 rgd->rd_flags |= rg_flags; 1075 rgd->rd_free = be32_to_cpu(str->rg_free); 1076 rgd->rd_dinodes = be32_to_cpu(str->rg_dinodes); 1077 rgd->rd_igeneration = be64_to_cpu(str->rg_igeneration); 1078 /* rd_data0, rd_data and rd_bitbytes already set from rindex */ 1079 } 1080 1081 static void gfs2_rgrp_ondisk2lvb(struct gfs2_rgrp_lvb *rgl, const void *buf) 1082 { 1083 const struct gfs2_rgrp *str = buf; 1084 1085 rgl->rl_magic = cpu_to_be32(GFS2_MAGIC); 1086 rgl->rl_flags = str->rg_flags; 1087 rgl->rl_free = str->rg_free; 1088 rgl->rl_dinodes = str->rg_dinodes; 1089 rgl->rl_igeneration = str->rg_igeneration; 1090 rgl->__pad = 0UL; 1091 } 1092 1093 static void gfs2_rgrp_out(struct gfs2_rgrpd *rgd, void *buf) 1094 { 1095 struct gfs2_rgrpd *next = gfs2_rgrpd_get_next(rgd); 1096 struct gfs2_rgrp *str = buf; 1097 u32 crc; 1098 1099 str->rg_flags = cpu_to_be32(rgd->rd_flags & ~GFS2_RDF_MASK); 1100 str->rg_free = cpu_to_be32(rgd->rd_free); 1101 str->rg_dinodes = cpu_to_be32(rgd->rd_dinodes); 1102 if (next == NULL) 1103 str->rg_skip = 0; 1104 else if (next->rd_addr > rgd->rd_addr) 1105 str->rg_skip = cpu_to_be32(next->rd_addr - rgd->rd_addr); 1106 str->rg_igeneration = cpu_to_be64(rgd->rd_igeneration); 1107 str->rg_data0 = cpu_to_be64(rgd->rd_data0); 1108 str->rg_data = cpu_to_be32(rgd->rd_data); 1109 str->rg_bitbytes = cpu_to_be32(rgd->rd_bitbytes); 1110 str->rg_crc = 0; 1111 crc = gfs2_disk_hash(buf, sizeof(struct gfs2_rgrp)); 1112 str->rg_crc = cpu_to_be32(crc); 1113 1114 memset(&str->rg_reserved, 0, sizeof(str->rg_reserved)); 1115 gfs2_rgrp_ondisk2lvb(rgd->rd_rgl, buf); 1116 } 1117 1118 static int gfs2_rgrp_lvb_valid(struct gfs2_rgrpd *rgd) 1119 { 1120 struct gfs2_rgrp_lvb *rgl = rgd->rd_rgl; 1121 struct gfs2_rgrp *str = (struct gfs2_rgrp *)rgd->rd_bits[0].bi_bh->b_data; 1122 struct gfs2_sbd *sdp = rgd->rd_sbd; 1123 int valid = 1; 1124 1125 if (rgl->rl_flags != str->rg_flags) { 1126 fs_warn(sdp, "GFS2: rgd: %llu lvb flag mismatch %u/%u", 1127 (unsigned long long)rgd->rd_addr, 1128 be32_to_cpu(rgl->rl_flags), be32_to_cpu(str->rg_flags)); 1129 valid = 0; 1130 } 1131 if (rgl->rl_free != str->rg_free) { 1132 fs_warn(sdp, "GFS2: rgd: %llu lvb free mismatch %u/%u", 1133 (unsigned long long)rgd->rd_addr, 1134 be32_to_cpu(rgl->rl_free), be32_to_cpu(str->rg_free)); 1135 valid = 0; 1136 } 1137 if (rgl->rl_dinodes != str->rg_dinodes) { 1138 fs_warn(sdp, "GFS2: rgd: %llu lvb dinode mismatch %u/%u", 1139 (unsigned long long)rgd->rd_addr, 1140 be32_to_cpu(rgl->rl_dinodes), 1141 be32_to_cpu(str->rg_dinodes)); 1142 valid = 0; 1143 } 1144 if (rgl->rl_igeneration != str->rg_igeneration) { 1145 fs_warn(sdp, "GFS2: rgd: %llu lvb igen mismatch %llu/%llu", 1146 (unsigned long long)rgd->rd_addr, 1147 (unsigned long long)be64_to_cpu(rgl->rl_igeneration), 1148 (unsigned long long)be64_to_cpu(str->rg_igeneration)); 1149 valid = 0; 1150 } 1151 return valid; 1152 } 1153 1154 static u32 count_unlinked(struct gfs2_rgrpd *rgd) 1155 { 1156 struct gfs2_bitmap *bi; 1157 const u32 length = rgd->rd_length; 1158 const u8 *buffer = NULL; 1159 u32 i, goal, count = 0; 1160 1161 for (i = 0, bi = rgd->rd_bits; i < length; i++, bi++) { 1162 goal = 0; 1163 buffer = bi->bi_bh->b_data + bi->bi_offset; 1164 WARN_ON(!buffer_uptodate(bi->bi_bh)); 1165 while (goal < bi->bi_blocks) { 1166 goal = gfs2_bitfit(buffer, bi->bi_bytes, goal, 1167 GFS2_BLKST_UNLINKED); 1168 if (goal == BFITNOENT) 1169 break; 1170 count++; 1171 goal++; 1172 } 1173 } 1174 1175 return count; 1176 } 1177 1178 static void rgrp_set_bitmap_flags(struct gfs2_rgrpd *rgd) 1179 { 1180 struct gfs2_bitmap *bi; 1181 int x; 1182 1183 if (rgd->rd_free) { 1184 for (x = 0; x < rgd->rd_length; x++) { 1185 bi = rgd->rd_bits + x; 1186 clear_bit(GBF_FULL, &bi->bi_flags); 1187 } 1188 } else { 1189 for (x = 0; x < rgd->rd_length; x++) { 1190 bi = rgd->rd_bits + x; 1191 set_bit(GBF_FULL, &bi->bi_flags); 1192 } 1193 } 1194 } 1195 1196 /** 1197 * gfs2_rgrp_go_instantiate - Read in a RG's header and bitmaps 1198 * @gl: the glock representing the rgrpd to read in 1199 * 1200 * Read in all of a Resource Group's header and bitmap blocks. 1201 * Caller must eventually call gfs2_rgrp_brelse() to free the bitmaps. 1202 * 1203 * Returns: errno 1204 */ 1205 1206 int gfs2_rgrp_go_instantiate(struct gfs2_glock *gl) 1207 { 1208 struct gfs2_rgrpd *rgd = gl->gl_object; 1209 struct gfs2_sbd *sdp = rgd->rd_sbd; 1210 unsigned int length = rgd->rd_length; 1211 struct gfs2_bitmap *bi; 1212 unsigned int x, y; 1213 int error; 1214 1215 if (rgd->rd_bits[0].bi_bh != NULL) 1216 return 0; 1217 1218 for (x = 0; x < length; x++) { 1219 bi = rgd->rd_bits + x; 1220 error = gfs2_meta_read(gl, rgd->rd_addr + x, 0, 0, &bi->bi_bh); 1221 if (error) 1222 goto fail; 1223 } 1224 1225 for (y = length; y--;) { 1226 bi = rgd->rd_bits + y; 1227 error = gfs2_meta_wait(sdp, bi->bi_bh); 1228 if (error) 1229 goto fail; 1230 if (gfs2_metatype_check(sdp, bi->bi_bh, y ? GFS2_METATYPE_RB : 1231 GFS2_METATYPE_RG)) { 1232 error = -EIO; 1233 goto fail; 1234 } 1235 } 1236 1237 gfs2_rgrp_in(rgd, (rgd->rd_bits[0].bi_bh)->b_data); 1238 rgrp_set_bitmap_flags(rgd); 1239 rgd->rd_flags |= GFS2_RDF_CHECK; 1240 rgd->rd_free_clone = rgd->rd_free; 1241 GLOCK_BUG_ON(rgd->rd_gl, rgd->rd_reserved); 1242 /* max out the rgrp allocation failure point */ 1243 rgd->rd_extfail_pt = rgd->rd_free; 1244 if (cpu_to_be32(GFS2_MAGIC) != rgd->rd_rgl->rl_magic) { 1245 rgd->rd_rgl->rl_unlinked = cpu_to_be32(count_unlinked(rgd)); 1246 gfs2_rgrp_ondisk2lvb(rgd->rd_rgl, 1247 rgd->rd_bits[0].bi_bh->b_data); 1248 } else if (sdp->sd_args.ar_rgrplvb) { 1249 if (!gfs2_rgrp_lvb_valid(rgd)){ 1250 gfs2_consist_rgrpd(rgd); 1251 error = -EIO; 1252 goto fail; 1253 } 1254 if (rgd->rd_rgl->rl_unlinked == 0) 1255 rgd->rd_flags &= ~GFS2_RDF_CHECK; 1256 } 1257 return 0; 1258 1259 fail: 1260 while (x--) { 1261 bi = rgd->rd_bits + x; 1262 brelse(bi->bi_bh); 1263 bi->bi_bh = NULL; 1264 gfs2_assert_warn(sdp, !bi->bi_clone); 1265 } 1266 return error; 1267 } 1268 1269 static int update_rgrp_lvb(struct gfs2_rgrpd *rgd, struct gfs2_holder *gh) 1270 { 1271 u32 rl_flags; 1272 1273 if (!test_bit(GLF_INSTANTIATE_NEEDED, &gh->gh_gl->gl_flags)) 1274 return 0; 1275 1276 if (cpu_to_be32(GFS2_MAGIC) != rgd->rd_rgl->rl_magic) 1277 return gfs2_instantiate(gh); 1278 1279 rl_flags = be32_to_cpu(rgd->rd_rgl->rl_flags); 1280 rl_flags &= ~GFS2_RDF_MASK; 1281 rgd->rd_flags &= GFS2_RDF_MASK; 1282 rgd->rd_flags |= (rl_flags | GFS2_RDF_CHECK); 1283 if (rgd->rd_rgl->rl_unlinked == 0) 1284 rgd->rd_flags &= ~GFS2_RDF_CHECK; 1285 rgd->rd_free = be32_to_cpu(rgd->rd_rgl->rl_free); 1286 rgrp_set_bitmap_flags(rgd); 1287 rgd->rd_free_clone = rgd->rd_free; 1288 GLOCK_BUG_ON(rgd->rd_gl, rgd->rd_reserved); 1289 /* max out the rgrp allocation failure point */ 1290 rgd->rd_extfail_pt = rgd->rd_free; 1291 rgd->rd_dinodes = be32_to_cpu(rgd->rd_rgl->rl_dinodes); 1292 rgd->rd_igeneration = be64_to_cpu(rgd->rd_rgl->rl_igeneration); 1293 return 0; 1294 } 1295 1296 /** 1297 * gfs2_rgrp_brelse - Release RG bitmaps read in with gfs2_rgrp_bh_get() 1298 * @rgd: The resource group 1299 * 1300 */ 1301 1302 void gfs2_rgrp_brelse(struct gfs2_rgrpd *rgd) 1303 { 1304 int x, length = rgd->rd_length; 1305 1306 for (x = 0; x < length; x++) { 1307 struct gfs2_bitmap *bi = rgd->rd_bits + x; 1308 if (bi->bi_bh) { 1309 brelse(bi->bi_bh); 1310 bi->bi_bh = NULL; 1311 } 1312 } 1313 set_bit(GLF_INSTANTIATE_NEEDED, &rgd->rd_gl->gl_flags); 1314 } 1315 1316 int gfs2_rgrp_send_discards(struct gfs2_sbd *sdp, u64 offset, 1317 struct buffer_head *bh, 1318 const struct gfs2_bitmap *bi, unsigned minlen, u64 *ptrimmed) 1319 { 1320 struct super_block *sb = sdp->sd_vfs; 1321 u64 blk; 1322 sector_t start = 0; 1323 sector_t nr_blks = 0; 1324 int rv = -EIO; 1325 unsigned int x; 1326 u32 trimmed = 0; 1327 u8 diff; 1328 1329 for (x = 0; x < bi->bi_bytes; x++) { 1330 const u8 *clone = bi->bi_clone ? bi->bi_clone : bi->bi_bh->b_data; 1331 clone += bi->bi_offset; 1332 clone += x; 1333 if (bh) { 1334 const u8 *orig = bh->b_data + bi->bi_offset + x; 1335 diff = ~(*orig | (*orig >> 1)) & (*clone | (*clone >> 1)); 1336 } else { 1337 diff = ~(*clone | (*clone >> 1)); 1338 } 1339 diff &= 0x55; 1340 if (diff == 0) 1341 continue; 1342 blk = offset + ((bi->bi_start + x) * GFS2_NBBY); 1343 while(diff) { 1344 if (diff & 1) { 1345 if (nr_blks == 0) 1346 goto start_new_extent; 1347 if ((start + nr_blks) != blk) { 1348 if (nr_blks >= minlen) { 1349 rv = sb_issue_discard(sb, 1350 start, nr_blks, 1351 GFP_NOFS, 0); 1352 if (rv) 1353 goto fail; 1354 trimmed += nr_blks; 1355 } 1356 nr_blks = 0; 1357 start_new_extent: 1358 start = blk; 1359 } 1360 nr_blks++; 1361 } 1362 diff >>= 2; 1363 blk++; 1364 } 1365 } 1366 if (nr_blks >= minlen) { 1367 rv = sb_issue_discard(sb, start, nr_blks, GFP_NOFS, 0); 1368 if (rv) 1369 goto fail; 1370 trimmed += nr_blks; 1371 } 1372 if (ptrimmed) 1373 *ptrimmed = trimmed; 1374 return 0; 1375 1376 fail: 1377 if (sdp->sd_args.ar_discard) 1378 fs_warn(sdp, "error %d on discard request, turning discards off for this filesystem\n", rv); 1379 sdp->sd_args.ar_discard = 0; 1380 return rv; 1381 } 1382 1383 /** 1384 * gfs2_fitrim - Generate discard requests for unused bits of the filesystem 1385 * @filp: Any file on the filesystem 1386 * @argp: Pointer to the arguments (also used to pass result) 1387 * 1388 * Returns: 0 on success, otherwise error code 1389 */ 1390 1391 int gfs2_fitrim(struct file *filp, void __user *argp) 1392 { 1393 struct inode *inode = file_inode(filp); 1394 struct gfs2_sbd *sdp = GFS2_SB(inode); 1395 struct block_device *bdev = sdp->sd_vfs->s_bdev; 1396 struct buffer_head *bh; 1397 struct gfs2_rgrpd *rgd; 1398 struct gfs2_rgrpd *rgd_end; 1399 struct gfs2_holder gh; 1400 struct fstrim_range r; 1401 int ret = 0; 1402 u64 amt; 1403 u64 trimmed = 0; 1404 u64 start, end, minlen; 1405 unsigned int x; 1406 unsigned bs_shift = sdp->sd_sb.sb_bsize_shift; 1407 1408 if (!capable(CAP_SYS_ADMIN)) 1409 return -EPERM; 1410 1411 if (!test_bit(SDF_JOURNAL_LIVE, &sdp->sd_flags)) 1412 return -EROFS; 1413 1414 if (!bdev_max_discard_sectors(bdev)) 1415 return -EOPNOTSUPP; 1416 1417 if (copy_from_user(&r, argp, sizeof(r))) 1418 return -EFAULT; 1419 1420 ret = gfs2_rindex_update(sdp); 1421 if (ret) 1422 return ret; 1423 1424 start = r.start >> bs_shift; 1425 end = start + (r.len >> bs_shift); 1426 minlen = max_t(u64, r.minlen, sdp->sd_sb.sb_bsize); 1427 minlen = max_t(u64, minlen, bdev_discard_granularity(bdev)) >> bs_shift; 1428 1429 if (end <= start || minlen > sdp->sd_max_rg_data) 1430 return -EINVAL; 1431 1432 rgd = gfs2_blk2rgrpd(sdp, start, 0); 1433 rgd_end = gfs2_blk2rgrpd(sdp, end, 0); 1434 1435 if ((gfs2_rgrpd_get_first(sdp) == gfs2_rgrpd_get_next(rgd_end)) 1436 && (start > rgd_end->rd_data0 + rgd_end->rd_data)) 1437 return -EINVAL; /* start is beyond the end of the fs */ 1438 1439 while (1) { 1440 1441 ret = gfs2_glock_nq_init(rgd->rd_gl, LM_ST_EXCLUSIVE, 1442 LM_FLAG_NODE_SCOPE, &gh); 1443 if (ret) 1444 goto out; 1445 1446 if (!(rgd->rd_flags & GFS2_RGF_TRIMMED)) { 1447 /* Trim each bitmap in the rgrp */ 1448 for (x = 0; x < rgd->rd_length; x++) { 1449 struct gfs2_bitmap *bi = rgd->rd_bits + x; 1450 rgrp_lock_local(rgd); 1451 ret = gfs2_rgrp_send_discards(sdp, 1452 rgd->rd_data0, NULL, bi, minlen, 1453 &amt); 1454 rgrp_unlock_local(rgd); 1455 if (ret) { 1456 gfs2_glock_dq_uninit(&gh); 1457 goto out; 1458 } 1459 trimmed += amt; 1460 } 1461 1462 /* Mark rgrp as having been trimmed */ 1463 ret = gfs2_trans_begin(sdp, RES_RG_HDR, 0); 1464 if (ret == 0) { 1465 bh = rgd->rd_bits[0].bi_bh; 1466 rgrp_lock_local(rgd); 1467 rgd->rd_flags |= GFS2_RGF_TRIMMED; 1468 gfs2_trans_add_meta(rgd->rd_gl, bh); 1469 gfs2_rgrp_out(rgd, bh->b_data); 1470 rgrp_unlock_local(rgd); 1471 gfs2_trans_end(sdp); 1472 } 1473 } 1474 gfs2_glock_dq_uninit(&gh); 1475 1476 if (rgd == rgd_end) 1477 break; 1478 1479 rgd = gfs2_rgrpd_get_next(rgd); 1480 } 1481 1482 out: 1483 r.len = trimmed << bs_shift; 1484 if (copy_to_user(argp, &r, sizeof(r))) 1485 return -EFAULT; 1486 1487 return ret; 1488 } 1489 1490 /** 1491 * rs_insert - insert a new multi-block reservation into the rgrp's rb_tree 1492 * @ip: the inode structure 1493 * 1494 */ 1495 static void rs_insert(struct gfs2_inode *ip) 1496 { 1497 struct rb_node **newn, *parent = NULL; 1498 int rc; 1499 struct gfs2_blkreserv *rs = &ip->i_res; 1500 struct gfs2_rgrpd *rgd = rs->rs_rgd; 1501 1502 BUG_ON(gfs2_rs_active(rs)); 1503 1504 spin_lock(&rgd->rd_rsspin); 1505 newn = &rgd->rd_rstree.rb_node; 1506 while (*newn) { 1507 struct gfs2_blkreserv *cur = 1508 rb_entry(*newn, struct gfs2_blkreserv, rs_node); 1509 1510 parent = *newn; 1511 rc = rs_cmp(rs->rs_start, rs->rs_requested, cur); 1512 if (rc > 0) 1513 newn = &((*newn)->rb_right); 1514 else if (rc < 0) 1515 newn = &((*newn)->rb_left); 1516 else { 1517 spin_unlock(&rgd->rd_rsspin); 1518 WARN_ON(1); 1519 return; 1520 } 1521 } 1522 1523 rb_link_node(&rs->rs_node, parent, newn); 1524 rb_insert_color(&rs->rs_node, &rgd->rd_rstree); 1525 1526 /* Do our rgrp accounting for the reservation */ 1527 rgd->rd_requested += rs->rs_requested; /* blocks requested */ 1528 spin_unlock(&rgd->rd_rsspin); 1529 trace_gfs2_rs(rs, TRACE_RS_INSERT); 1530 } 1531 1532 /** 1533 * rgd_free - return the number of free blocks we can allocate 1534 * @rgd: the resource group 1535 * @rs: The reservation to free 1536 * 1537 * This function returns the number of free blocks for an rgrp. 1538 * That's the clone-free blocks (blocks that are free, not including those 1539 * still being used for unlinked files that haven't been deleted.) 1540 * 1541 * It also subtracts any blocks reserved by someone else, but does not 1542 * include free blocks that are still part of our current reservation, 1543 * because obviously we can (and will) allocate them. 1544 */ 1545 static inline u32 rgd_free(struct gfs2_rgrpd *rgd, struct gfs2_blkreserv *rs) 1546 { 1547 u32 tot_reserved, tot_free; 1548 1549 if (WARN_ON_ONCE(rgd->rd_requested < rs->rs_requested)) 1550 return 0; 1551 tot_reserved = rgd->rd_requested - rs->rs_requested; 1552 1553 if (rgd->rd_free_clone < tot_reserved) 1554 tot_reserved = 0; 1555 1556 tot_free = rgd->rd_free_clone - tot_reserved; 1557 1558 return tot_free; 1559 } 1560 1561 /** 1562 * rg_mblk_search - find a group of multiple free blocks to form a reservation 1563 * @rgd: the resource group descriptor 1564 * @ip: pointer to the inode for which we're reserving blocks 1565 * @ap: the allocation parameters 1566 * 1567 */ 1568 1569 static void rg_mblk_search(struct gfs2_rgrpd *rgd, struct gfs2_inode *ip, 1570 const struct gfs2_alloc_parms *ap) 1571 { 1572 struct gfs2_rbm rbm = { .rgd = rgd, }; 1573 u64 goal; 1574 struct gfs2_blkreserv *rs = &ip->i_res; 1575 u32 extlen; 1576 u32 free_blocks, blocks_available; 1577 int ret; 1578 struct inode *inode = &ip->i_inode; 1579 1580 spin_lock(&rgd->rd_rsspin); 1581 free_blocks = rgd_free(rgd, rs); 1582 if (rgd->rd_free_clone < rgd->rd_requested) 1583 free_blocks = 0; 1584 blocks_available = rgd->rd_free_clone - rgd->rd_reserved; 1585 if (rgd == rs->rs_rgd) 1586 blocks_available += rs->rs_reserved; 1587 spin_unlock(&rgd->rd_rsspin); 1588 1589 if (S_ISDIR(inode->i_mode)) 1590 extlen = 1; 1591 else { 1592 extlen = max_t(u32, atomic_read(&ip->i_sizehint), ap->target); 1593 extlen = clamp(extlen, (u32)RGRP_RSRV_MINBLKS, free_blocks); 1594 } 1595 if (free_blocks < extlen || blocks_available < extlen) 1596 return; 1597 1598 /* Find bitmap block that contains bits for goal block */ 1599 if (rgrp_contains_block(rgd, ip->i_goal)) 1600 goal = ip->i_goal; 1601 else 1602 goal = rgd->rd_last_alloc + rgd->rd_data0; 1603 1604 if (WARN_ON(gfs2_rbm_from_block(&rbm, goal))) 1605 return; 1606 1607 ret = gfs2_rbm_find(&rbm, GFS2_BLKST_FREE, &extlen, &ip->i_res, true); 1608 if (ret == 0) { 1609 rs->rs_start = gfs2_rbm_to_block(&rbm); 1610 rs->rs_requested = extlen; 1611 rs_insert(ip); 1612 } else { 1613 if (goal == rgd->rd_last_alloc + rgd->rd_data0) 1614 rgd->rd_last_alloc = 0; 1615 } 1616 } 1617 1618 /** 1619 * gfs2_next_unreserved_block - Return next block that is not reserved 1620 * @rgd: The resource group 1621 * @block: The starting block 1622 * @length: The required length 1623 * @ignore_rs: Reservation to ignore 1624 * 1625 * If the block does not appear in any reservation, then return the 1626 * block number unchanged. If it does appear in the reservation, then 1627 * keep looking through the tree of reservations in order to find the 1628 * first block number which is not reserved. 1629 */ 1630 1631 static u64 gfs2_next_unreserved_block(struct gfs2_rgrpd *rgd, u64 block, 1632 u32 length, 1633 struct gfs2_blkreserv *ignore_rs) 1634 { 1635 struct gfs2_blkreserv *rs; 1636 struct rb_node *n; 1637 int rc; 1638 1639 spin_lock(&rgd->rd_rsspin); 1640 n = rgd->rd_rstree.rb_node; 1641 while (n) { 1642 rs = rb_entry(n, struct gfs2_blkreserv, rs_node); 1643 rc = rs_cmp(block, length, rs); 1644 if (rc < 0) 1645 n = n->rb_left; 1646 else if (rc > 0) 1647 n = n->rb_right; 1648 else 1649 break; 1650 } 1651 1652 if (n) { 1653 while (rs_cmp(block, length, rs) == 0 && rs != ignore_rs) { 1654 block = rs->rs_start + rs->rs_requested; 1655 n = n->rb_right; 1656 if (n == NULL) 1657 break; 1658 rs = rb_entry(n, struct gfs2_blkreserv, rs_node); 1659 } 1660 } 1661 1662 spin_unlock(&rgd->rd_rsspin); 1663 return block; 1664 } 1665 1666 /** 1667 * gfs2_reservation_check_and_update - Check for reservations during block alloc 1668 * @rbm: The current position in the resource group 1669 * @rs: Our own reservation 1670 * @minext: The minimum extent length 1671 * @maxext: A pointer to the maximum extent structure 1672 * 1673 * This checks the current position in the rgrp to see whether there is 1674 * a reservation covering this block. If not then this function is a 1675 * no-op. If there is, then the position is moved to the end of the 1676 * contiguous reservation(s) so that we are pointing at the first 1677 * non-reserved block. 1678 * 1679 * Returns: 0 if no reservation, 1 if @rbm has changed, otherwise an error 1680 */ 1681 1682 static int gfs2_reservation_check_and_update(struct gfs2_rbm *rbm, 1683 struct gfs2_blkreserv *rs, 1684 u32 minext, 1685 struct gfs2_extent *maxext) 1686 { 1687 u64 block = gfs2_rbm_to_block(rbm); 1688 u32 extlen = 1; 1689 u64 nblock; 1690 1691 /* 1692 * If we have a minimum extent length, then skip over any extent 1693 * which is less than the min extent length in size. 1694 */ 1695 if (minext > 1) { 1696 extlen = gfs2_free_extlen(rbm, minext); 1697 if (extlen <= maxext->len) 1698 goto fail; 1699 } 1700 1701 /* 1702 * Check the extent which has been found against the reservations 1703 * and skip if parts of it are already reserved 1704 */ 1705 nblock = gfs2_next_unreserved_block(rbm->rgd, block, extlen, rs); 1706 if (nblock == block) { 1707 if (!minext || extlen >= minext) 1708 return 0; 1709 1710 if (extlen > maxext->len) { 1711 maxext->len = extlen; 1712 maxext->rbm = *rbm; 1713 } 1714 } else { 1715 u64 len = nblock - block; 1716 if (len >= (u64)1 << 32) 1717 return -E2BIG; 1718 extlen = len; 1719 } 1720 fail: 1721 if (gfs2_rbm_add(rbm, extlen)) 1722 return -E2BIG; 1723 return 1; 1724 } 1725 1726 /** 1727 * gfs2_rbm_find - Look for blocks of a particular state 1728 * @rbm: Value/result starting position and final position 1729 * @state: The state which we want to find 1730 * @minext: Pointer to the requested extent length 1731 * This is updated to be the actual reservation size. 1732 * @rs: Our own reservation (NULL to skip checking for reservations) 1733 * @nowrap: Stop looking at the end of the rgrp, rather than wrapping 1734 * around until we've reached the starting point. 1735 * 1736 * Side effects: 1737 * - If looking for free blocks, we set GBF_FULL on each bitmap which 1738 * has no free blocks in it. 1739 * - If looking for free blocks, we set rd_extfail_pt on each rgrp which 1740 * has come up short on a free block search. 1741 * 1742 * Returns: 0 on success, -ENOSPC if there is no block of the requested state 1743 */ 1744 1745 static int gfs2_rbm_find(struct gfs2_rbm *rbm, u8 state, u32 *minext, 1746 struct gfs2_blkreserv *rs, bool nowrap) 1747 { 1748 bool scan_from_start = rbm->bii == 0 && rbm->offset == 0; 1749 struct buffer_head *bh; 1750 int last_bii; 1751 u32 offset; 1752 u8 *buffer; 1753 bool wrapped = false; 1754 int ret; 1755 struct gfs2_bitmap *bi; 1756 struct gfs2_extent maxext = { .rbm.rgd = rbm->rgd, }; 1757 1758 /* 1759 * Determine the last bitmap to search. If we're not starting at the 1760 * beginning of a bitmap, we need to search that bitmap twice to scan 1761 * the entire resource group. 1762 */ 1763 last_bii = rbm->bii - (rbm->offset == 0); 1764 1765 while(1) { 1766 bi = rbm_bi(rbm); 1767 if (test_bit(GBF_FULL, &bi->bi_flags) && 1768 (state == GFS2_BLKST_FREE)) 1769 goto next_bitmap; 1770 1771 bh = bi->bi_bh; 1772 buffer = bh->b_data + bi->bi_offset; 1773 WARN_ON(!buffer_uptodate(bh)); 1774 if (state != GFS2_BLKST_UNLINKED && bi->bi_clone) 1775 buffer = bi->bi_clone + bi->bi_offset; 1776 offset = gfs2_bitfit(buffer, bi->bi_bytes, rbm->offset, state); 1777 if (offset == BFITNOENT) { 1778 if (state == GFS2_BLKST_FREE && rbm->offset == 0) 1779 set_bit(GBF_FULL, &bi->bi_flags); 1780 goto next_bitmap; 1781 } 1782 rbm->offset = offset; 1783 if (!rs || !minext) 1784 return 0; 1785 1786 ret = gfs2_reservation_check_and_update(rbm, rs, *minext, 1787 &maxext); 1788 if (ret == 0) 1789 return 0; 1790 if (ret > 0) 1791 goto next_iter; 1792 if (ret == -E2BIG) { 1793 rbm->bii = 0; 1794 rbm->offset = 0; 1795 goto res_covered_end_of_rgrp; 1796 } 1797 return ret; 1798 1799 next_bitmap: /* Find next bitmap in the rgrp */ 1800 rbm->offset = 0; 1801 rbm->bii++; 1802 if (rbm->bii == rbm->rgd->rd_length) 1803 rbm->bii = 0; 1804 res_covered_end_of_rgrp: 1805 if (rbm->bii == 0) { 1806 if (wrapped) 1807 break; 1808 wrapped = true; 1809 if (nowrap) 1810 break; 1811 } 1812 next_iter: 1813 /* Have we scanned the entire resource group? */ 1814 if (wrapped && rbm->bii > last_bii) 1815 break; 1816 } 1817 1818 if (state != GFS2_BLKST_FREE) 1819 return -ENOSPC; 1820 1821 /* If the extent was too small, and it's smaller than the smallest 1822 to have failed before, remember for future reference that it's 1823 useless to search this rgrp again for this amount or more. */ 1824 if (wrapped && (scan_from_start || rbm->bii > last_bii) && 1825 *minext < rbm->rgd->rd_extfail_pt) 1826 rbm->rgd->rd_extfail_pt = *minext - 1; 1827 1828 /* If the maximum extent we found is big enough to fulfill the 1829 minimum requirements, use it anyway. */ 1830 if (maxext.len) { 1831 *rbm = maxext.rbm; 1832 *minext = maxext.len; 1833 return 0; 1834 } 1835 1836 return -ENOSPC; 1837 } 1838 1839 /** 1840 * try_rgrp_unlink - Look for any unlinked, allocated, but unused inodes 1841 * @rgd: The rgrp 1842 * @last_unlinked: block address of the last dinode we unlinked 1843 * @skip: block address we should explicitly not unlink 1844 * 1845 * Returns: 0 if no error 1846 * The inode, if one has been found, in inode. 1847 */ 1848 1849 static void try_rgrp_unlink(struct gfs2_rgrpd *rgd, u64 *last_unlinked, u64 skip) 1850 { 1851 u64 block; 1852 struct gfs2_sbd *sdp = rgd->rd_sbd; 1853 struct gfs2_glock *gl; 1854 struct gfs2_inode *ip; 1855 int error; 1856 int found = 0; 1857 struct gfs2_rbm rbm = { .rgd = rgd, .bii = 0, .offset = 0 }; 1858 1859 while (1) { 1860 error = gfs2_rbm_find(&rbm, GFS2_BLKST_UNLINKED, NULL, NULL, 1861 true); 1862 if (error == -ENOSPC) 1863 break; 1864 if (WARN_ON_ONCE(error)) 1865 break; 1866 1867 block = gfs2_rbm_to_block(&rbm); 1868 if (gfs2_rbm_from_block(&rbm, block + 1)) 1869 break; 1870 if (*last_unlinked != NO_BLOCK && block <= *last_unlinked) 1871 continue; 1872 if (block == skip) 1873 continue; 1874 *last_unlinked = block; 1875 1876 error = gfs2_glock_get(sdp, block, &gfs2_iopen_glops, CREATE, &gl); 1877 if (error) 1878 continue; 1879 1880 /* If the inode is already in cache, we can ignore it here 1881 * because the existing inode disposal code will deal with 1882 * it when all refs have gone away. Accessing gl_object like 1883 * this is not safe in general. Here it is ok because we do 1884 * not dereference the pointer, and we only need an approx 1885 * answer to whether it is NULL or not. 1886 */ 1887 ip = gl->gl_object; 1888 1889 if (ip || !gfs2_queue_verify_delete(gl, false)) 1890 gfs2_glock_put(gl); 1891 else 1892 found++; 1893 1894 /* Limit reclaim to sensible number of tasks */ 1895 if (found > NR_CPUS) 1896 return; 1897 } 1898 1899 rgd->rd_flags &= ~GFS2_RDF_CHECK; 1900 return; 1901 } 1902 1903 /** 1904 * gfs2_rgrp_congested - Use stats to figure out whether an rgrp is congested 1905 * @rgd: The rgrp in question 1906 * @loops: An indication of how picky we can be (0=very, 1=less so) 1907 * 1908 * This function uses the recently added glock statistics in order to 1909 * figure out whether a parciular resource group is suffering from 1910 * contention from multiple nodes. This is done purely on the basis 1911 * of timings, since this is the only data we have to work with and 1912 * our aim here is to reject a resource group which is highly contended 1913 * but (very important) not to do this too often in order to ensure that 1914 * we do not land up introducing fragmentation by changing resource 1915 * groups when not actually required. 1916 * 1917 * The calculation is fairly simple, we want to know whether the SRTTB 1918 * (i.e. smoothed round trip time for blocking operations) to acquire 1919 * the lock for this rgrp's glock is significantly greater than the 1920 * time taken for resource groups on average. We introduce a margin in 1921 * the form of the variable @var which is computed as the sum of the two 1922 * respective variences, and multiplied by a factor depending on @loops 1923 * and whether we have a lot of data to base the decision on. This is 1924 * then tested against the square difference of the means in order to 1925 * decide whether the result is statistically significant or not. 1926 * 1927 * Returns: A boolean verdict on the congestion status 1928 */ 1929 1930 static bool gfs2_rgrp_congested(const struct gfs2_rgrpd *rgd, int loops) 1931 { 1932 const struct gfs2_glock *gl = rgd->rd_gl; 1933 const struct gfs2_sbd *sdp = glock_sbd(gl); 1934 struct gfs2_lkstats *st; 1935 u64 r_dcount, l_dcount; 1936 u64 l_srttb, a_srttb = 0; 1937 s64 srttb_diff; 1938 u64 sqr_diff; 1939 u64 var; 1940 int cpu, nonzero = 0; 1941 1942 preempt_disable(); 1943 for_each_present_cpu(cpu) { 1944 st = &per_cpu_ptr(sdp->sd_lkstats, cpu)->lkstats[LM_TYPE_RGRP]; 1945 if (st->stats[GFS2_LKS_SRTTB]) { 1946 a_srttb += st->stats[GFS2_LKS_SRTTB]; 1947 nonzero++; 1948 } 1949 } 1950 st = &this_cpu_ptr(sdp->sd_lkstats)->lkstats[LM_TYPE_RGRP]; 1951 if (nonzero) 1952 do_div(a_srttb, nonzero); 1953 r_dcount = st->stats[GFS2_LKS_DCOUNT]; 1954 var = st->stats[GFS2_LKS_SRTTVARB] + 1955 gl->gl_stats.stats[GFS2_LKS_SRTTVARB]; 1956 preempt_enable(); 1957 1958 l_srttb = gl->gl_stats.stats[GFS2_LKS_SRTTB]; 1959 l_dcount = gl->gl_stats.stats[GFS2_LKS_DCOUNT]; 1960 1961 if ((l_dcount < 1) || (r_dcount < 1) || (a_srttb == 0)) 1962 return false; 1963 1964 srttb_diff = a_srttb - l_srttb; 1965 sqr_diff = srttb_diff * srttb_diff; 1966 1967 var *= 2; 1968 if (l_dcount < 8 || r_dcount < 8) 1969 var *= 2; 1970 if (loops == 1) 1971 var *= 2; 1972 1973 return ((srttb_diff < 0) && (sqr_diff > var)); 1974 } 1975 1976 /** 1977 * gfs2_rgrp_used_recently - test if an rgrp has been used recently 1978 * @rs: The block reservation with the rgrp to test 1979 * @msecs: The time limit in milliseconds 1980 * 1981 * Returns: True if the rgrp glock has been used within the time limit 1982 */ 1983 static bool gfs2_rgrp_used_recently(const struct gfs2_blkreserv *rs, 1984 u64 msecs) 1985 { 1986 u64 tdiff; 1987 1988 tdiff = ktime_to_ns(ktime_sub(ktime_get_real(), 1989 rs->rs_rgd->rd_gl->gl_dstamp)); 1990 1991 return tdiff > (msecs * 1000 * 1000); 1992 } 1993 1994 static u32 gfs2_orlov_skip(const struct gfs2_inode *ip) 1995 { 1996 const struct gfs2_sbd *sdp = GFS2_SB(&ip->i_inode); 1997 1998 return get_random_u32() % sdp->sd_rgrps; 1999 } 2000 2001 static bool gfs2_select_rgrp(struct gfs2_rgrpd **pos, const struct gfs2_rgrpd *begin) 2002 { 2003 struct gfs2_rgrpd *rgd = *pos; 2004 struct gfs2_sbd *sdp = rgd->rd_sbd; 2005 2006 rgd = gfs2_rgrpd_get_next(rgd); 2007 if (rgd == NULL) 2008 rgd = gfs2_rgrpd_get_first(sdp); 2009 *pos = rgd; 2010 if (rgd != begin) /* If we didn't wrap */ 2011 return true; 2012 return false; 2013 } 2014 2015 /** 2016 * fast_to_acquire - determine if a resource group will be fast to acquire 2017 * @rgd: The rgrp 2018 * 2019 * If this is one of our preferred rgrps, it should be quicker to acquire, 2020 * because we tried to set ourselves up as dlm lock master. 2021 */ 2022 static inline int fast_to_acquire(struct gfs2_rgrpd *rgd) 2023 { 2024 struct gfs2_glock *gl = rgd->rd_gl; 2025 2026 if (gl->gl_state != LM_ST_UNLOCKED && list_empty(&gl->gl_holders) && 2027 !test_bit(GLF_DEMOTE_IN_PROGRESS, &gl->gl_flags) && 2028 !test_bit(GLF_DEMOTE, &gl->gl_flags)) 2029 return 1; 2030 if (rgd->rd_flags & GFS2_RDF_PREFERRED) 2031 return 1; 2032 return 0; 2033 } 2034 2035 /** 2036 * gfs2_inplace_reserve - Reserve space in the filesystem 2037 * @ip: the inode to reserve space for 2038 * @ap: the allocation parameters 2039 * 2040 * We try our best to find an rgrp that has at least ap->target blocks 2041 * available. After a couple of passes (loops == 2), the prospects of finding 2042 * such an rgrp diminish. At this stage, we return the first rgrp that has 2043 * at least ap->min_target blocks available. 2044 * 2045 * Returns: 0 on success, 2046 * -ENOMEM if a suitable rgrp can't be found 2047 * errno otherwise 2048 */ 2049 2050 int gfs2_inplace_reserve(struct gfs2_inode *ip, struct gfs2_alloc_parms *ap) 2051 { 2052 struct gfs2_sbd *sdp = GFS2_SB(&ip->i_inode); 2053 struct gfs2_rgrpd *begin = NULL; 2054 struct gfs2_blkreserv *rs = &ip->i_res; 2055 int error = 0, flags = LM_FLAG_NODE_SCOPE; 2056 bool rg_locked; 2057 u64 last_unlinked = NO_BLOCK; 2058 u32 target = ap->target; 2059 int loops = 0; 2060 u32 free_blocks, blocks_available, skip = 0; 2061 2062 BUG_ON(rs->rs_reserved); 2063 2064 if (sdp->sd_args.ar_rgrplvb) 2065 flags |= GL_SKIP; 2066 if (gfs2_assert_warn(sdp, target)) 2067 return -EINVAL; 2068 if (gfs2_rs_active(rs)) { 2069 begin = rs->rs_rgd; 2070 } else if (rs->rs_rgd && 2071 rgrp_contains_block(rs->rs_rgd, ip->i_goal)) { 2072 begin = rs->rs_rgd; 2073 } else { 2074 check_and_update_goal(ip); 2075 rs->rs_rgd = begin = gfs2_blk2rgrpd(sdp, ip->i_goal, 1); 2076 } 2077 if (S_ISDIR(ip->i_inode.i_mode) && (ap->aflags & GFS2_AF_ORLOV)) 2078 skip = gfs2_orlov_skip(ip); 2079 if (rs->rs_rgd == NULL) 2080 return -EBADSLT; 2081 2082 while (loops < 3) { 2083 struct gfs2_rgrpd *rgd; 2084 2085 rg_locked = gfs2_glock_is_locked_by_me(rs->rs_rgd->rd_gl); 2086 if (rg_locked) { 2087 rgrp_lock_local(rs->rs_rgd); 2088 } else { 2089 if (skip && skip--) 2090 goto next_rgrp; 2091 if (!gfs2_rs_active(rs)) { 2092 if (loops == 0 && 2093 !fast_to_acquire(rs->rs_rgd)) 2094 goto next_rgrp; 2095 if ((loops < 2) && 2096 gfs2_rgrp_used_recently(rs, 1000) && 2097 gfs2_rgrp_congested(rs->rs_rgd, loops)) 2098 goto next_rgrp; 2099 } 2100 error = gfs2_glock_nq_init(rs->rs_rgd->rd_gl, 2101 LM_ST_EXCLUSIVE, flags, 2102 &ip->i_rgd_gh); 2103 if (unlikely(error)) 2104 return error; 2105 rgrp_lock_local(rs->rs_rgd); 2106 if (!gfs2_rs_active(rs) && (loops < 2) && 2107 gfs2_rgrp_congested(rs->rs_rgd, loops)) 2108 goto skip_rgrp; 2109 if (sdp->sd_args.ar_rgrplvb) { 2110 error = update_rgrp_lvb(rs->rs_rgd, 2111 &ip->i_rgd_gh); 2112 if (unlikely(error)) { 2113 rgrp_unlock_local(rs->rs_rgd); 2114 gfs2_glock_dq_uninit(&ip->i_rgd_gh); 2115 return error; 2116 } 2117 } 2118 } 2119 2120 /* Skip unusable resource groups */ 2121 if ((rs->rs_rgd->rd_flags & (GFS2_RGF_NOALLOC | 2122 GFS2_RDF_ERROR)) || 2123 (loops == 0 && target > rs->rs_rgd->rd_extfail_pt)) 2124 goto skip_rgrp; 2125 2126 if (sdp->sd_args.ar_rgrplvb) { 2127 error = gfs2_instantiate(&ip->i_rgd_gh); 2128 if (error) 2129 goto skip_rgrp; 2130 } 2131 2132 /* Get a reservation if we don't already have one */ 2133 if (!gfs2_rs_active(rs)) 2134 rg_mblk_search(rs->rs_rgd, ip, ap); 2135 2136 /* Skip rgrps when we can't get a reservation on first pass */ 2137 if (!gfs2_rs_active(rs) && (loops < 1)) 2138 goto check_rgrp; 2139 2140 /* If rgrp has enough free space, use it */ 2141 rgd = rs->rs_rgd; 2142 spin_lock(&rgd->rd_rsspin); 2143 free_blocks = rgd_free(rgd, rs); 2144 blocks_available = rgd->rd_free_clone - rgd->rd_reserved; 2145 if (free_blocks < target || blocks_available < target) { 2146 spin_unlock(&rgd->rd_rsspin); 2147 goto check_rgrp; 2148 } 2149 rs->rs_reserved = ap->target; 2150 if (rs->rs_reserved > blocks_available) 2151 rs->rs_reserved = blocks_available; 2152 rgd->rd_reserved += rs->rs_reserved; 2153 spin_unlock(&rgd->rd_rsspin); 2154 rgrp_unlock_local(rs->rs_rgd); 2155 return 0; 2156 check_rgrp: 2157 /* Check for unlinked inodes which can be reclaimed */ 2158 if (rs->rs_rgd->rd_flags & GFS2_RDF_CHECK) 2159 try_rgrp_unlink(rs->rs_rgd, &last_unlinked, 2160 ip->i_no_addr); 2161 skip_rgrp: 2162 rgrp_unlock_local(rs->rs_rgd); 2163 2164 /* Drop reservation, if we couldn't use reserved rgrp */ 2165 if (gfs2_rs_active(rs)) 2166 gfs2_rs_deltree(rs); 2167 2168 /* Unlock rgrp if required */ 2169 if (!rg_locked) 2170 gfs2_glock_dq_uninit(&ip->i_rgd_gh); 2171 next_rgrp: 2172 /* Find the next rgrp, and continue looking */ 2173 if (gfs2_select_rgrp(&rs->rs_rgd, begin)) 2174 continue; 2175 if (skip) 2176 continue; 2177 2178 /* If we've scanned all the rgrps, but found no free blocks 2179 * then this checks for some less likely conditions before 2180 * trying again. 2181 */ 2182 loops++; 2183 /* Check that fs hasn't grown if writing to rindex */ 2184 if (ip == GFS2_I(sdp->sd_rindex) && !sdp->sd_rindex_uptodate) { 2185 error = gfs2_ri_update(ip); 2186 if (error) 2187 return error; 2188 } 2189 /* Flushing the log may release space */ 2190 if (loops == 2) { 2191 if (ap->min_target) 2192 target = ap->min_target; 2193 gfs2_log_flush(sdp, NULL, GFS2_LOG_HEAD_FLUSH_NORMAL | 2194 GFS2_LFC_INPLACE_RESERVE); 2195 } 2196 } 2197 2198 return -ENOSPC; 2199 } 2200 2201 /** 2202 * gfs2_inplace_release - release an inplace reservation 2203 * @ip: the inode the reservation was taken out on 2204 * 2205 * Release a reservation made by gfs2_inplace_reserve(). 2206 */ 2207 2208 void gfs2_inplace_release(struct gfs2_inode *ip) 2209 { 2210 struct gfs2_blkreserv *rs = &ip->i_res; 2211 2212 if (rs->rs_reserved) { 2213 struct gfs2_rgrpd *rgd = rs->rs_rgd; 2214 2215 spin_lock(&rgd->rd_rsspin); 2216 GLOCK_BUG_ON(rgd->rd_gl, rgd->rd_reserved < rs->rs_reserved); 2217 rgd->rd_reserved -= rs->rs_reserved; 2218 spin_unlock(&rgd->rd_rsspin); 2219 rs->rs_reserved = 0; 2220 } 2221 if (gfs2_holder_initialized(&ip->i_rgd_gh)) 2222 gfs2_glock_dq_uninit(&ip->i_rgd_gh); 2223 } 2224 2225 /** 2226 * gfs2_alloc_extent - allocate an extent from a given bitmap 2227 * @rbm: the resource group information 2228 * @dinode: TRUE if the first block we allocate is for a dinode 2229 * @n: The extent length (value/result) 2230 * 2231 * Add the bitmap buffer to the transaction. 2232 * Set the found bits to @new_state to change block's allocation state. 2233 */ 2234 static void gfs2_alloc_extent(const struct gfs2_rbm *rbm, bool dinode, 2235 unsigned int *n) 2236 { 2237 struct gfs2_rbm pos = { .rgd = rbm->rgd, }; 2238 const unsigned int elen = *n; 2239 u64 block; 2240 int ret; 2241 2242 *n = 1; 2243 block = gfs2_rbm_to_block(rbm); 2244 gfs2_trans_add_meta(rbm->rgd->rd_gl, rbm_bi(rbm)->bi_bh); 2245 gfs2_setbit(rbm, true, dinode ? GFS2_BLKST_DINODE : GFS2_BLKST_USED); 2246 block++; 2247 while (*n < elen) { 2248 ret = gfs2_rbm_from_block(&pos, block); 2249 if (ret || gfs2_testbit(&pos, true) != GFS2_BLKST_FREE) 2250 break; 2251 gfs2_trans_add_meta(pos.rgd->rd_gl, rbm_bi(&pos)->bi_bh); 2252 gfs2_setbit(&pos, true, GFS2_BLKST_USED); 2253 (*n)++; 2254 block++; 2255 } 2256 } 2257 2258 /** 2259 * rgblk_free - Change alloc state of given block(s) 2260 * @sdp: the filesystem 2261 * @rgd: the resource group the blocks are in 2262 * @bstart: the start of a run of blocks to free 2263 * @blen: the length of the block run (all must lie within ONE RG!) 2264 * @new_state: GFS2_BLKST_XXX the after-allocation block state 2265 */ 2266 2267 static void rgblk_free(struct gfs2_sbd *sdp, struct gfs2_rgrpd *rgd, 2268 u64 bstart, u32 blen, unsigned char new_state) 2269 { 2270 struct gfs2_rbm rbm; 2271 struct gfs2_bitmap *bi, *bi_prev = NULL; 2272 2273 rbm.rgd = rgd; 2274 if (WARN_ON_ONCE(gfs2_rbm_from_block(&rbm, bstart))) 2275 return; 2276 while (blen--) { 2277 bi = rbm_bi(&rbm); 2278 if (bi != bi_prev) { 2279 if (!bi->bi_clone) { 2280 bi->bi_clone = kmalloc(bi->bi_bh->b_size, 2281 GFP_NOFS | __GFP_NOFAIL); 2282 memcpy(bi->bi_clone + bi->bi_offset, 2283 bi->bi_bh->b_data + bi->bi_offset, 2284 bi->bi_bytes); 2285 } 2286 gfs2_trans_add_meta(rbm.rgd->rd_gl, bi->bi_bh); 2287 bi_prev = bi; 2288 } 2289 gfs2_setbit(&rbm, false, new_state); 2290 gfs2_rbm_add(&rbm, 1); 2291 } 2292 } 2293 2294 /** 2295 * gfs2_rgrp_dump - print out an rgrp 2296 * @seq: The iterator 2297 * @rgd: The rgrp in question 2298 * @fs_id_buf: pointer to file system id (if requested) 2299 * 2300 */ 2301 2302 void gfs2_rgrp_dump(struct seq_file *seq, struct gfs2_rgrpd *rgd, 2303 const char *fs_id_buf) 2304 { 2305 struct gfs2_blkreserv *trs; 2306 const struct rb_node *n; 2307 2308 spin_lock(&rgd->rd_rsspin); 2309 gfs2_print_dbg(seq, "%s R: n:%llu f:%02x b:%u/%u i:%u q:%u r:%u e:%u\n", 2310 fs_id_buf, 2311 (unsigned long long)rgd->rd_addr, rgd->rd_flags, 2312 rgd->rd_free, rgd->rd_free_clone, rgd->rd_dinodes, 2313 rgd->rd_requested, rgd->rd_reserved, rgd->rd_extfail_pt); 2314 if (rgd->rd_sbd->sd_args.ar_rgrplvb && rgd->rd_rgl) { 2315 struct gfs2_rgrp_lvb *rgl = rgd->rd_rgl; 2316 2317 gfs2_print_dbg(seq, "%s L: f:%02x b:%u i:%u\n", fs_id_buf, 2318 be32_to_cpu(rgl->rl_flags), 2319 be32_to_cpu(rgl->rl_free), 2320 be32_to_cpu(rgl->rl_dinodes)); 2321 } 2322 for (n = rb_first(&rgd->rd_rstree); n; n = rb_next(&trs->rs_node)) { 2323 trs = rb_entry(n, struct gfs2_blkreserv, rs_node); 2324 dump_rs(seq, trs, fs_id_buf); 2325 } 2326 spin_unlock(&rgd->rd_rsspin); 2327 } 2328 2329 static void gfs2_rgrp_error(struct gfs2_rgrpd *rgd) 2330 { 2331 struct gfs2_sbd *sdp = rgd->rd_sbd; 2332 char fs_id_buf[sizeof(sdp->sd_fsname) + 7]; 2333 2334 fs_warn(sdp, "rgrp %llu has an error, marking it readonly until umount\n", 2335 (unsigned long long)rgd->rd_addr); 2336 fs_warn(sdp, "umount on all nodes and run fsck.gfs2 to fix the error\n"); 2337 sprintf(fs_id_buf, "fsid=%s: ", sdp->sd_fsname); 2338 gfs2_rgrp_dump(NULL, rgd, fs_id_buf); 2339 rgd->rd_flags |= GFS2_RDF_ERROR; 2340 } 2341 2342 /** 2343 * gfs2_adjust_reservation - Adjust (or remove) a reservation after allocation 2344 * @ip: The inode we have just allocated blocks for 2345 * @rbm: The start of the allocated blocks 2346 * @len: The extent length 2347 * 2348 * Adjusts a reservation after an allocation has taken place. If the 2349 * reservation does not match the allocation, or if it is now empty 2350 * then it is removed. 2351 */ 2352 2353 static void gfs2_adjust_reservation(struct gfs2_inode *ip, 2354 const struct gfs2_rbm *rbm, unsigned len) 2355 { 2356 struct gfs2_blkreserv *rs = &ip->i_res; 2357 struct gfs2_rgrpd *rgd = rbm->rgd; 2358 2359 BUG_ON(rs->rs_reserved < len); 2360 rs->rs_reserved -= len; 2361 if (gfs2_rs_active(rs)) { 2362 u64 start = gfs2_rbm_to_block(rbm); 2363 2364 if (rs->rs_start == start) { 2365 unsigned int rlen; 2366 2367 rs->rs_start += len; 2368 rlen = min(rs->rs_requested, len); 2369 rs->rs_requested -= rlen; 2370 rgd->rd_requested -= rlen; 2371 trace_gfs2_rs(rs, TRACE_RS_CLAIM); 2372 if (rs->rs_start < rgd->rd_data0 + rgd->rd_data && 2373 rs->rs_requested) 2374 return; 2375 /* We used up our block reservation, so we should 2376 reserve more blocks next time. */ 2377 atomic_add(RGRP_RSRV_ADDBLKS, &ip->i_sizehint); 2378 } 2379 __rs_deltree(rs); 2380 } 2381 } 2382 2383 /** 2384 * gfs2_set_alloc_start - Set starting point for block allocation 2385 * @rbm: The rbm which will be set to the required location 2386 * @ip: The gfs2 inode 2387 * @dinode: Flag to say if allocation includes a new inode 2388 * 2389 * This sets the starting point from the reservation if one is active 2390 * otherwise it falls back to guessing a start point based on the 2391 * inode's goal block or the last allocation point in the rgrp. 2392 */ 2393 2394 static void gfs2_set_alloc_start(struct gfs2_rbm *rbm, 2395 const struct gfs2_inode *ip, bool dinode) 2396 { 2397 u64 goal; 2398 2399 if (gfs2_rs_active(&ip->i_res)) { 2400 goal = ip->i_res.rs_start; 2401 } else { 2402 if (!dinode && rgrp_contains_block(rbm->rgd, ip->i_goal)) 2403 goal = ip->i_goal; 2404 else 2405 goal = rbm->rgd->rd_last_alloc + rbm->rgd->rd_data0; 2406 } 2407 if (WARN_ON_ONCE(gfs2_rbm_from_block(rbm, goal))) { 2408 rbm->bii = 0; 2409 rbm->offset = 0; 2410 } 2411 } 2412 2413 /** 2414 * gfs2_alloc_blocks - Allocate one or more blocks of data and/or a dinode 2415 * @ip: the inode to allocate the block for 2416 * @bn: Used to return the starting block number 2417 * @nblocks: requested number of blocks/extent length (value/result) 2418 * @dinode: 1 if we're allocating a dinode block, else 0 2419 * 2420 * Returns: 0 or error 2421 */ 2422 2423 int gfs2_alloc_blocks(struct gfs2_inode *ip, u64 *bn, unsigned int *nblocks, 2424 bool dinode) 2425 { 2426 struct gfs2_sbd *sdp = GFS2_SB(&ip->i_inode); 2427 struct buffer_head *dibh; 2428 struct gfs2_rbm rbm = { .rgd = ip->i_res.rs_rgd, }; 2429 u64 block; /* block, within the file system scope */ 2430 u32 minext = 1; 2431 int error = -ENOSPC; 2432 2433 BUG_ON(ip->i_res.rs_reserved < *nblocks); 2434 2435 rgrp_lock_local(rbm.rgd); 2436 if (gfs2_rs_active(&ip->i_res)) { 2437 gfs2_set_alloc_start(&rbm, ip, dinode); 2438 error = gfs2_rbm_find(&rbm, GFS2_BLKST_FREE, &minext, &ip->i_res, false); 2439 } 2440 if (error == -ENOSPC) { 2441 gfs2_set_alloc_start(&rbm, ip, dinode); 2442 error = gfs2_rbm_find(&rbm, GFS2_BLKST_FREE, &minext, NULL, false); 2443 } 2444 2445 /* Since all blocks are reserved in advance, this shouldn't happen */ 2446 if (error) { 2447 fs_warn(sdp, "inum=%llu error=%d, nblocks=%u, full=%d fail_pt=%d\n", 2448 (unsigned long long)ip->i_no_addr, error, *nblocks, 2449 test_bit(GBF_FULL, &rbm.rgd->rd_bits->bi_flags), 2450 rbm.rgd->rd_extfail_pt); 2451 goto rgrp_error; 2452 } 2453 2454 gfs2_alloc_extent(&rbm, dinode, nblocks); 2455 block = gfs2_rbm_to_block(&rbm); 2456 rbm.rgd->rd_last_alloc = block - rbm.rgd->rd_data0; 2457 if (!dinode) { 2458 ip->i_goal = block + *nblocks - 1; 2459 error = gfs2_meta_inode_buffer(ip, &dibh); 2460 if (error == 0) { 2461 struct gfs2_dinode *di = 2462 (struct gfs2_dinode *)dibh->b_data; 2463 gfs2_trans_add_meta(gfs2_inode_glock(&ip->i_inode), dibh); 2464 di->di_goal_meta = di->di_goal_data = 2465 cpu_to_be64(ip->i_goal); 2466 brelse(dibh); 2467 } 2468 } 2469 spin_lock(&rbm.rgd->rd_rsspin); 2470 gfs2_adjust_reservation(ip, &rbm, *nblocks); 2471 if (rbm.rgd->rd_free < *nblocks || rbm.rgd->rd_reserved < *nblocks) { 2472 fs_warn(sdp, "nblocks=%u\n", *nblocks); 2473 spin_unlock(&rbm.rgd->rd_rsspin); 2474 goto rgrp_error; 2475 } 2476 GLOCK_BUG_ON(rbm.rgd->rd_gl, rbm.rgd->rd_reserved < *nblocks); 2477 GLOCK_BUG_ON(rbm.rgd->rd_gl, rbm.rgd->rd_free_clone < *nblocks); 2478 GLOCK_BUG_ON(rbm.rgd->rd_gl, rbm.rgd->rd_free < *nblocks); 2479 rbm.rgd->rd_reserved -= *nblocks; 2480 rbm.rgd->rd_free_clone -= *nblocks; 2481 rbm.rgd->rd_free -= *nblocks; 2482 spin_unlock(&rbm.rgd->rd_rsspin); 2483 if (dinode) { 2484 u64 generation; 2485 2486 rbm.rgd->rd_dinodes++; 2487 generation = rbm.rgd->rd_igeneration++; 2488 if (generation == 0) 2489 generation = rbm.rgd->rd_igeneration++; 2490 ip->i_generation = generation; 2491 } 2492 2493 gfs2_trans_add_meta(rbm.rgd->rd_gl, rbm.rgd->rd_bits[0].bi_bh); 2494 gfs2_rgrp_out(rbm.rgd, rbm.rgd->rd_bits[0].bi_bh->b_data); 2495 rgrp_unlock_local(rbm.rgd); 2496 2497 gfs2_statfs_change(sdp, 0, -(s64)*nblocks, dinode ? 1 : 0); 2498 if (dinode) 2499 gfs2_trans_remove_revoke(sdp, block, *nblocks); 2500 2501 gfs2_quota_change(ip, *nblocks, ip->i_inode.i_uid, ip->i_inode.i_gid); 2502 2503 trace_gfs2_block_alloc(ip, rbm.rgd, block, *nblocks, 2504 dinode ? GFS2_BLKST_DINODE : GFS2_BLKST_USED); 2505 *bn = block; 2506 return 0; 2507 2508 rgrp_error: 2509 rgrp_unlock_local(rbm.rgd); 2510 gfs2_rgrp_error(rbm.rgd); 2511 return -EIO; 2512 } 2513 2514 /** 2515 * __gfs2_free_blocks - free a contiguous run of block(s) 2516 * @ip: the inode these blocks are being freed from 2517 * @rgd: the resource group the blocks are in 2518 * @bstart: first block of a run of contiguous blocks 2519 * @blen: the length of the block run 2520 * @meta: 1 if the blocks represent metadata 2521 * 2522 */ 2523 2524 void __gfs2_free_blocks(struct gfs2_inode *ip, struct gfs2_rgrpd *rgd, 2525 u64 bstart, u32 blen, int meta) 2526 { 2527 struct gfs2_sbd *sdp = GFS2_SB(&ip->i_inode); 2528 2529 rgrp_lock_local(rgd); 2530 rgblk_free(sdp, rgd, bstart, blen, GFS2_BLKST_FREE); 2531 trace_gfs2_block_alloc(ip, rgd, bstart, blen, GFS2_BLKST_FREE); 2532 rgd->rd_free += blen; 2533 rgd->rd_flags &= ~GFS2_RGF_TRIMMED; 2534 gfs2_trans_add_meta(rgd->rd_gl, rgd->rd_bits[0].bi_bh); 2535 gfs2_rgrp_out(rgd, rgd->rd_bits[0].bi_bh->b_data); 2536 rgrp_unlock_local(rgd); 2537 2538 /* Directories keep their data in the metadata address space */ 2539 if (meta || (ip->i_diskflags & GFS2_DIF_EXHASH) || gfs2_is_jdata(ip)) 2540 gfs2_journal_wipe(ip, bstart, blen); 2541 } 2542 2543 /** 2544 * gfs2_free_meta - free a contiguous run of data block(s) 2545 * @ip: the inode these blocks are being freed from 2546 * @rgd: the resource group the blocks are in 2547 * @bstart: first block of a run of contiguous blocks 2548 * @blen: the length of the block run 2549 * 2550 */ 2551 2552 void gfs2_free_meta(struct gfs2_inode *ip, struct gfs2_rgrpd *rgd, 2553 u64 bstart, u32 blen) 2554 { 2555 struct gfs2_sbd *sdp = GFS2_SB(&ip->i_inode); 2556 2557 __gfs2_free_blocks(ip, rgd, bstart, blen, 1); 2558 gfs2_statfs_change(sdp, 0, +blen, 0); 2559 gfs2_quota_change(ip, -(s64)blen, ip->i_inode.i_uid, ip->i_inode.i_gid); 2560 } 2561 2562 void gfs2_unlink_di(struct inode *inode) 2563 { 2564 struct gfs2_inode *ip = GFS2_I(inode); 2565 struct gfs2_sbd *sdp = GFS2_SB(inode); 2566 struct gfs2_rgrpd *rgd; 2567 u64 blkno = ip->i_no_addr; 2568 2569 rgd = gfs2_blk2rgrpd(sdp, blkno, true); 2570 if (!rgd) 2571 return; 2572 rgrp_lock_local(rgd); 2573 rgblk_free(sdp, rgd, blkno, 1, GFS2_BLKST_UNLINKED); 2574 trace_gfs2_block_alloc(ip, rgd, blkno, 1, GFS2_BLKST_UNLINKED); 2575 gfs2_trans_add_meta(rgd->rd_gl, rgd->rd_bits[0].bi_bh); 2576 gfs2_rgrp_out(rgd, rgd->rd_bits[0].bi_bh->b_data); 2577 be32_add_cpu(&rgd->rd_rgl->rl_unlinked, 1); 2578 rgrp_unlock_local(rgd); 2579 } 2580 2581 void gfs2_free_di(struct gfs2_rgrpd *rgd, struct gfs2_inode *ip) 2582 { 2583 struct gfs2_sbd *sdp = rgd->rd_sbd; 2584 2585 rgrp_lock_local(rgd); 2586 rgblk_free(sdp, rgd, ip->i_no_addr, 1, GFS2_BLKST_FREE); 2587 if (!rgd->rd_dinodes) 2588 gfs2_consist_rgrpd(rgd); 2589 rgd->rd_dinodes--; 2590 rgd->rd_free++; 2591 2592 gfs2_trans_add_meta(rgd->rd_gl, rgd->rd_bits[0].bi_bh); 2593 gfs2_rgrp_out(rgd, rgd->rd_bits[0].bi_bh->b_data); 2594 be32_add_cpu(&rgd->rd_rgl->rl_unlinked, -1); 2595 rgrp_unlock_local(rgd); 2596 2597 gfs2_statfs_change(sdp, 0, +1, -1); 2598 trace_gfs2_block_alloc(ip, rgd, ip->i_no_addr, 1, GFS2_BLKST_FREE); 2599 gfs2_quota_change(ip, -1, ip->i_inode.i_uid, ip->i_inode.i_gid); 2600 gfs2_journal_wipe(ip, ip->i_no_addr, 1); 2601 } 2602 2603 /** 2604 * gfs2_check_blk_type - Check the type of a block 2605 * @sdp: The superblock 2606 * @no_addr: The block number to check 2607 * @type: The block type we are looking for 2608 * 2609 * The inode glock of @no_addr must be held. The @type to check for is either 2610 * GFS2_BLKST_DINODE or GFS2_BLKST_UNLINKED; checking for type GFS2_BLKST_FREE 2611 * or GFS2_BLKST_USED would make no sense. 2612 * 2613 * Returns: 0 if the block type matches the expected type 2614 * -ESTALE if it doesn't match 2615 * or -ve errno if something went wrong while checking 2616 */ 2617 2618 int gfs2_check_blk_type(struct gfs2_sbd *sdp, u64 no_addr, unsigned int type) 2619 { 2620 struct gfs2_rgrpd *rgd; 2621 struct gfs2_holder rgd_gh; 2622 struct gfs2_rbm rbm; 2623 int error = -EINVAL; 2624 2625 rgd = gfs2_blk2rgrpd(sdp, no_addr, 1); 2626 if (!rgd) 2627 goto fail; 2628 2629 error = gfs2_glock_nq_init(rgd->rd_gl, LM_ST_SHARED, 0, &rgd_gh); 2630 if (error) 2631 goto fail; 2632 2633 rbm.rgd = rgd; 2634 error = gfs2_rbm_from_block(&rbm, no_addr); 2635 if (!WARN_ON_ONCE(error)) { 2636 /* 2637 * No need to take the local resource group lock here; the 2638 * inode glock of @no_addr provides the necessary 2639 * synchronization in case the block is an inode. (In case 2640 * the block is not an inode, the block type will not match 2641 * the @type we are looking for.) 2642 */ 2643 if (gfs2_testbit(&rbm, false) != type) 2644 error = -ESTALE; 2645 } 2646 2647 gfs2_glock_dq_uninit(&rgd_gh); 2648 2649 fail: 2650 return error; 2651 } 2652 2653 /** 2654 * gfs2_rlist_add - add a RG to a list of RGs 2655 * @ip: the inode 2656 * @rlist: the list of resource groups 2657 * @block: the block 2658 * 2659 * Figure out what RG a block belongs to and add that RG to the list 2660 * 2661 * FIXME: Don't use NOFAIL 2662 * 2663 */ 2664 2665 void gfs2_rlist_add(struct gfs2_inode *ip, struct gfs2_rgrp_list *rlist, 2666 u64 block) 2667 { 2668 struct gfs2_sbd *sdp = GFS2_SB(&ip->i_inode); 2669 struct gfs2_rgrpd *rgd; 2670 struct gfs2_rgrpd **tmp; 2671 unsigned int new_space; 2672 unsigned int x; 2673 2674 if (gfs2_assert_warn(sdp, !rlist->rl_ghs)) 2675 return; 2676 2677 /* 2678 * The resource group last accessed is kept in the last position. 2679 */ 2680 2681 if (rlist->rl_rgrps) { 2682 rgd = rlist->rl_rgd[rlist->rl_rgrps - 1]; 2683 if (rgrp_contains_block(rgd, block)) 2684 return; 2685 rgd = gfs2_blk2rgrpd(sdp, block, 1); 2686 } else { 2687 rgd = ip->i_res.rs_rgd; 2688 if (!rgd || !rgrp_contains_block(rgd, block)) 2689 rgd = gfs2_blk2rgrpd(sdp, block, 1); 2690 } 2691 2692 if (!rgd) { 2693 fs_err(sdp, "rlist_add: no rgrp for block %llu\n", 2694 (unsigned long long)block); 2695 return; 2696 } 2697 2698 for (x = 0; x < rlist->rl_rgrps; x++) { 2699 if (rlist->rl_rgd[x] == rgd) { 2700 swap(rlist->rl_rgd[x], 2701 rlist->rl_rgd[rlist->rl_rgrps - 1]); 2702 return; 2703 } 2704 } 2705 2706 if (rlist->rl_rgrps == rlist->rl_space) { 2707 new_space = rlist->rl_space + 10; 2708 2709 tmp = kzalloc_objs(struct gfs2_rgrpd *, new_space, 2710 GFP_NOFS | __GFP_NOFAIL); 2711 2712 if (rlist->rl_rgd) { 2713 memcpy(tmp, rlist->rl_rgd, 2714 rlist->rl_space * sizeof(struct gfs2_rgrpd *)); 2715 kfree(rlist->rl_rgd); 2716 } 2717 2718 rlist->rl_space = new_space; 2719 rlist->rl_rgd = tmp; 2720 } 2721 2722 rlist->rl_rgd[rlist->rl_rgrps++] = rgd; 2723 } 2724 2725 /** 2726 * gfs2_rlist_alloc - all RGs have been added to the rlist, now allocate 2727 * and initialize an array of glock holders for them 2728 * @rlist: the list of resource groups 2729 * @state: the state we're requesting 2730 * @flags: the modifier flags 2731 * 2732 * FIXME: Don't use NOFAIL 2733 * 2734 */ 2735 2736 void gfs2_rlist_alloc(struct gfs2_rgrp_list *rlist, 2737 unsigned int state, u16 flags) 2738 { 2739 unsigned int x; 2740 2741 rlist->rl_ghs = kmalloc_objs(struct gfs2_holder, rlist->rl_rgrps, 2742 GFP_NOFS | __GFP_NOFAIL); 2743 for (x = 0; x < rlist->rl_rgrps; x++) 2744 gfs2_holder_init(rlist->rl_rgd[x]->rd_gl, state, flags, 2745 &rlist->rl_ghs[x]); 2746 } 2747 2748 /** 2749 * gfs2_rlist_free - free a resource group list 2750 * @rlist: the list of resource groups 2751 * 2752 */ 2753 2754 void gfs2_rlist_free(struct gfs2_rgrp_list *rlist) 2755 { 2756 unsigned int x; 2757 2758 kfree(rlist->rl_rgd); 2759 2760 if (rlist->rl_ghs) { 2761 for (x = 0; x < rlist->rl_rgrps; x++) 2762 gfs2_holder_uninit(&rlist->rl_ghs[x]); 2763 kfree(rlist->rl_ghs); 2764 rlist->rl_ghs = NULL; 2765 } 2766 } 2767 2768 void rgrp_lock_local(struct gfs2_rgrpd *rgd) 2769 { 2770 mutex_lock(&rgd->rd_mutex); 2771 } 2772 2773 void rgrp_unlock_local(struct gfs2_rgrpd *rgd) 2774 { 2775 mutex_unlock(&rgd->rd_mutex); 2776 } 2777