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