1 /* 2 * Copyright (C) Sistina Software, Inc. 1997-2003 All rights reserved. 3 * Copyright (C) 2004-2006 Red Hat, Inc. All rights reserved. 4 * 5 * This copyrighted material is made available to anyone wishing to use, 6 * modify, copy, or redistribute it subject to the terms and conditions 7 * of the GNU General Public License version 2. 8 */ 9 10 #include <linux/spinlock.h> 11 #include <linux/completion.h> 12 #include <linux/buffer_head.h> 13 #include <linux/blkdev.h> 14 #include <linux/gfs2_ondisk.h> 15 #include <linux/crc32.h> 16 17 #include "gfs2.h" 18 #include "incore.h" 19 #include "bmap.h" 20 #include "glock.h" 21 #include "inode.h" 22 #include "meta_io.h" 23 #include "quota.h" 24 #include "rgrp.h" 25 #include "log.h" 26 #include "super.h" 27 #include "trans.h" 28 #include "dir.h" 29 #include "util.h" 30 #include "trace_gfs2.h" 31 32 /* This doesn't need to be that large as max 64 bit pointers in a 4k 33 * block is 512, so __u16 is fine for that. It saves stack space to 34 * keep it small. 35 */ 36 struct metapath { 37 struct buffer_head *mp_bh[GFS2_MAX_META_HEIGHT]; 38 __u16 mp_list[GFS2_MAX_META_HEIGHT]; 39 }; 40 41 struct strip_mine { 42 int sm_first; 43 unsigned int sm_height; 44 }; 45 46 /** 47 * gfs2_unstuffer_page - unstuff a stuffed inode into a block cached by a page 48 * @ip: the inode 49 * @dibh: the dinode buffer 50 * @block: the block number that was allocated 51 * @page: The (optional) page. This is looked up if @page is NULL 52 * 53 * Returns: errno 54 */ 55 56 static int gfs2_unstuffer_page(struct gfs2_inode *ip, struct buffer_head *dibh, 57 u64 block, struct page *page) 58 { 59 struct inode *inode = &ip->i_inode; 60 struct buffer_head *bh; 61 int release = 0; 62 63 if (!page || page->index) { 64 page = find_or_create_page(inode->i_mapping, 0, GFP_NOFS); 65 if (!page) 66 return -ENOMEM; 67 release = 1; 68 } 69 70 if (!PageUptodate(page)) { 71 void *kaddr = kmap(page); 72 u64 dsize = i_size_read(inode); 73 74 if (dsize > (dibh->b_size - sizeof(struct gfs2_dinode))) 75 dsize = dibh->b_size - sizeof(struct gfs2_dinode); 76 77 memcpy(kaddr, dibh->b_data + sizeof(struct gfs2_dinode), dsize); 78 memset(kaddr + dsize, 0, PAGE_SIZE - dsize); 79 kunmap(page); 80 81 SetPageUptodate(page); 82 } 83 84 if (!page_has_buffers(page)) 85 create_empty_buffers(page, BIT(inode->i_blkbits), 86 BIT(BH_Uptodate)); 87 88 bh = page_buffers(page); 89 90 if (!buffer_mapped(bh)) 91 map_bh(bh, inode->i_sb, block); 92 93 set_buffer_uptodate(bh); 94 if (!gfs2_is_jdata(ip)) 95 mark_buffer_dirty(bh); 96 if (!gfs2_is_writeback(ip)) 97 gfs2_trans_add_data(ip->i_gl, bh); 98 99 if (release) { 100 unlock_page(page); 101 put_page(page); 102 } 103 104 return 0; 105 } 106 107 /** 108 * gfs2_unstuff_dinode - Unstuff a dinode when the data has grown too big 109 * @ip: The GFS2 inode to unstuff 110 * @page: The (optional) page. This is looked up if the @page is NULL 111 * 112 * This routine unstuffs a dinode and returns it to a "normal" state such 113 * that the height can be grown in the traditional way. 114 * 115 * Returns: errno 116 */ 117 118 int gfs2_unstuff_dinode(struct gfs2_inode *ip, struct page *page) 119 { 120 struct buffer_head *bh, *dibh; 121 struct gfs2_dinode *di; 122 u64 block = 0; 123 int isdir = gfs2_is_dir(ip); 124 int error; 125 126 down_write(&ip->i_rw_mutex); 127 128 error = gfs2_meta_inode_buffer(ip, &dibh); 129 if (error) 130 goto out; 131 132 if (i_size_read(&ip->i_inode)) { 133 /* Get a free block, fill it with the stuffed data, 134 and write it out to disk */ 135 136 unsigned int n = 1; 137 error = gfs2_alloc_blocks(ip, &block, &n, 0, NULL); 138 if (error) 139 goto out_brelse; 140 if (isdir) { 141 gfs2_trans_add_unrevoke(GFS2_SB(&ip->i_inode), block, 1); 142 error = gfs2_dir_get_new_buffer(ip, block, &bh); 143 if (error) 144 goto out_brelse; 145 gfs2_buffer_copy_tail(bh, sizeof(struct gfs2_meta_header), 146 dibh, sizeof(struct gfs2_dinode)); 147 brelse(bh); 148 } else { 149 error = gfs2_unstuffer_page(ip, dibh, block, page); 150 if (error) 151 goto out_brelse; 152 } 153 } 154 155 /* Set up the pointer to the new block */ 156 157 gfs2_trans_add_meta(ip->i_gl, dibh); 158 di = (struct gfs2_dinode *)dibh->b_data; 159 gfs2_buffer_clear_tail(dibh, sizeof(struct gfs2_dinode)); 160 161 if (i_size_read(&ip->i_inode)) { 162 *(__be64 *)(di + 1) = cpu_to_be64(block); 163 gfs2_add_inode_blocks(&ip->i_inode, 1); 164 di->di_blocks = cpu_to_be64(gfs2_get_inode_blocks(&ip->i_inode)); 165 } 166 167 ip->i_height = 1; 168 di->di_height = cpu_to_be16(1); 169 170 out_brelse: 171 brelse(dibh); 172 out: 173 up_write(&ip->i_rw_mutex); 174 return error; 175 } 176 177 178 /** 179 * find_metapath - Find path through the metadata tree 180 * @sdp: The superblock 181 * @mp: The metapath to return the result in 182 * @block: The disk block to look up 183 * @height: The pre-calculated height of the metadata tree 184 * 185 * This routine returns a struct metapath structure that defines a path 186 * through the metadata of inode "ip" to get to block "block". 187 * 188 * Example: 189 * Given: "ip" is a height 3 file, "offset" is 101342453, and this is a 190 * filesystem with a blocksize of 4096. 191 * 192 * find_metapath() would return a struct metapath structure set to: 193 * mp_offset = 101342453, mp_height = 3, mp_list[0] = 0, mp_list[1] = 48, 194 * and mp_list[2] = 165. 195 * 196 * That means that in order to get to the block containing the byte at 197 * offset 101342453, we would load the indirect block pointed to by pointer 198 * 0 in the dinode. We would then load the indirect block pointed to by 199 * pointer 48 in that indirect block. We would then load the data block 200 * pointed to by pointer 165 in that indirect block. 201 * 202 * ---------------------------------------- 203 * | Dinode | | 204 * | | 4| 205 * | |0 1 2 3 4 5 9| 206 * | | 6| 207 * ---------------------------------------- 208 * | 209 * | 210 * V 211 * ---------------------------------------- 212 * | Indirect Block | 213 * | 5| 214 * | 4 4 4 4 4 5 5 1| 215 * |0 5 6 7 8 9 0 1 2| 216 * ---------------------------------------- 217 * | 218 * | 219 * V 220 * ---------------------------------------- 221 * | Indirect Block | 222 * | 1 1 1 1 1 5| 223 * | 6 6 6 6 6 1| 224 * |0 3 4 5 6 7 2| 225 * ---------------------------------------- 226 * | 227 * | 228 * V 229 * ---------------------------------------- 230 * | Data block containing offset | 231 * | 101342453 | 232 * | | 233 * | | 234 * ---------------------------------------- 235 * 236 */ 237 238 static void find_metapath(const struct gfs2_sbd *sdp, u64 block, 239 struct metapath *mp, unsigned int height) 240 { 241 unsigned int i; 242 243 for (i = height; i--;) 244 mp->mp_list[i] = do_div(block, sdp->sd_inptrs); 245 246 } 247 248 static inline unsigned int metapath_branch_start(const struct metapath *mp) 249 { 250 if (mp->mp_list[0] == 0) 251 return 2; 252 return 1; 253 } 254 255 /** 256 * metapointer - Return pointer to start of metadata in a buffer 257 * @height: The metadata height (0 = dinode) 258 * @mp: The metapath 259 * 260 * Return a pointer to the block number of the next height of the metadata 261 * tree given a buffer containing the pointer to the current height of the 262 * metadata tree. 263 */ 264 265 static inline __be64 *metapointer(unsigned int height, const struct metapath *mp) 266 { 267 struct buffer_head *bh = mp->mp_bh[height]; 268 unsigned int head_size = (height > 0) ? 269 sizeof(struct gfs2_meta_header) : sizeof(struct gfs2_dinode); 270 return ((__be64 *)(bh->b_data + head_size)) + mp->mp_list[height]; 271 } 272 273 static void gfs2_metapath_ra(struct gfs2_glock *gl, 274 const struct buffer_head *bh, const __be64 *pos) 275 { 276 struct buffer_head *rabh; 277 const __be64 *endp = (const __be64 *)(bh->b_data + bh->b_size); 278 const __be64 *t; 279 280 for (t = pos; t < endp; t++) { 281 if (!*t) 282 continue; 283 284 rabh = gfs2_getbuf(gl, be64_to_cpu(*t), CREATE); 285 if (trylock_buffer(rabh)) { 286 if (!buffer_uptodate(rabh)) { 287 rabh->b_end_io = end_buffer_read_sync; 288 submit_bh(REQ_OP_READ, REQ_RAHEAD | REQ_META, 289 rabh); 290 continue; 291 } 292 unlock_buffer(rabh); 293 } 294 brelse(rabh); 295 } 296 } 297 298 /** 299 * lookup_metapath - Walk the metadata tree to a specific point 300 * @ip: The inode 301 * @mp: The metapath 302 * 303 * Assumes that the inode's buffer has already been looked up and 304 * hooked onto mp->mp_bh[0] and that the metapath has been initialised 305 * by find_metapath(). 306 * 307 * If this function encounters part of the tree which has not been 308 * allocated, it returns the current height of the tree at the point 309 * at which it found the unallocated block. Blocks which are found are 310 * added to the mp->mp_bh[] list. 311 * 312 * Returns: error or height of metadata tree 313 */ 314 315 static int lookup_metapath(struct gfs2_inode *ip, struct metapath *mp) 316 { 317 unsigned int end_of_metadata = ip->i_height - 1; 318 unsigned int x; 319 __be64 *ptr; 320 u64 dblock; 321 int ret; 322 323 for (x = 0; x < end_of_metadata; x++) { 324 ptr = metapointer(x, mp); 325 dblock = be64_to_cpu(*ptr); 326 if (!dblock) 327 return x + 1; 328 329 ret = gfs2_meta_indirect_buffer(ip, x+1, dblock, &mp->mp_bh[x+1]); 330 if (ret) 331 return ret; 332 } 333 334 return ip->i_height; 335 } 336 337 static inline void release_metapath(struct metapath *mp) 338 { 339 int i; 340 341 for (i = 0; i < GFS2_MAX_META_HEIGHT; i++) { 342 if (mp->mp_bh[i] == NULL) 343 break; 344 brelse(mp->mp_bh[i]); 345 } 346 } 347 348 /** 349 * gfs2_extent_length - Returns length of an extent of blocks 350 * @start: Start of the buffer 351 * @len: Length of the buffer in bytes 352 * @ptr: Current position in the buffer 353 * @limit: Max extent length to return (0 = unlimited) 354 * @eob: Set to 1 if we hit "end of block" 355 * 356 * If the first block is zero (unallocated) it will return the number of 357 * unallocated blocks in the extent, otherwise it will return the number 358 * of contiguous blocks in the extent. 359 * 360 * Returns: The length of the extent (minimum of one block) 361 */ 362 363 static inline unsigned int gfs2_extent_length(void *start, unsigned int len, __be64 *ptr, size_t limit, int *eob) 364 { 365 const __be64 *end = (start + len); 366 const __be64 *first = ptr; 367 u64 d = be64_to_cpu(*ptr); 368 369 *eob = 0; 370 do { 371 ptr++; 372 if (ptr >= end) 373 break; 374 if (limit && --limit == 0) 375 break; 376 if (d) 377 d++; 378 } while(be64_to_cpu(*ptr) == d); 379 if (ptr >= end) 380 *eob = 1; 381 return (ptr - first); 382 } 383 384 static inline void bmap_lock(struct gfs2_inode *ip, int create) 385 { 386 if (create) 387 down_write(&ip->i_rw_mutex); 388 else 389 down_read(&ip->i_rw_mutex); 390 } 391 392 static inline void bmap_unlock(struct gfs2_inode *ip, int create) 393 { 394 if (create) 395 up_write(&ip->i_rw_mutex); 396 else 397 up_read(&ip->i_rw_mutex); 398 } 399 400 static inline __be64 *gfs2_indirect_init(struct metapath *mp, 401 struct gfs2_glock *gl, unsigned int i, 402 unsigned offset, u64 bn) 403 { 404 __be64 *ptr = (__be64 *)(mp->mp_bh[i - 1]->b_data + 405 ((i > 1) ? sizeof(struct gfs2_meta_header) : 406 sizeof(struct gfs2_dinode))); 407 BUG_ON(i < 1); 408 BUG_ON(mp->mp_bh[i] != NULL); 409 mp->mp_bh[i] = gfs2_meta_new(gl, bn); 410 gfs2_trans_add_meta(gl, mp->mp_bh[i]); 411 gfs2_metatype_set(mp->mp_bh[i], GFS2_METATYPE_IN, GFS2_FORMAT_IN); 412 gfs2_buffer_clear_tail(mp->mp_bh[i], sizeof(struct gfs2_meta_header)); 413 ptr += offset; 414 *ptr = cpu_to_be64(bn); 415 return ptr; 416 } 417 418 enum alloc_state { 419 ALLOC_DATA = 0, 420 ALLOC_GROW_DEPTH = 1, 421 ALLOC_GROW_HEIGHT = 2, 422 /* ALLOC_UNSTUFF = 3, TBD and rather complicated */ 423 }; 424 425 /** 426 * gfs2_bmap_alloc - Build a metadata tree of the requested height 427 * @inode: The GFS2 inode 428 * @lblock: The logical starting block of the extent 429 * @bh_map: This is used to return the mapping details 430 * @mp: The metapath 431 * @sheight: The starting height (i.e. whats already mapped) 432 * @height: The height to build to 433 * @maxlen: The max number of data blocks to alloc 434 * 435 * In this routine we may have to alloc: 436 * i) Indirect blocks to grow the metadata tree height 437 * ii) Indirect blocks to fill in lower part of the metadata tree 438 * iii) Data blocks 439 * 440 * The function is in two parts. The first part works out the total 441 * number of blocks which we need. The second part does the actual 442 * allocation asking for an extent at a time (if enough contiguous free 443 * blocks are available, there will only be one request per bmap call) 444 * and uses the state machine to initialise the blocks in order. 445 * 446 * Returns: errno on error 447 */ 448 449 static int gfs2_bmap_alloc(struct inode *inode, const sector_t lblock, 450 struct buffer_head *bh_map, struct metapath *mp, 451 const unsigned int sheight, 452 const unsigned int height, 453 const size_t maxlen) 454 { 455 struct gfs2_inode *ip = GFS2_I(inode); 456 struct gfs2_sbd *sdp = GFS2_SB(inode); 457 struct super_block *sb = sdp->sd_vfs; 458 struct buffer_head *dibh = mp->mp_bh[0]; 459 u64 bn, dblock = 0; 460 unsigned n, i, blks, alloced = 0, iblks = 0, branch_start = 0; 461 unsigned dblks = 0; 462 unsigned ptrs_per_blk; 463 const unsigned end_of_metadata = height - 1; 464 int ret; 465 int eob = 0; 466 enum alloc_state state; 467 __be64 *ptr; 468 __be64 zero_bn = 0; 469 470 BUG_ON(sheight < 1); 471 BUG_ON(dibh == NULL); 472 473 gfs2_trans_add_meta(ip->i_gl, dibh); 474 475 if (height == sheight) { 476 struct buffer_head *bh; 477 /* Bottom indirect block exists, find unalloced extent size */ 478 ptr = metapointer(end_of_metadata, mp); 479 bh = mp->mp_bh[end_of_metadata]; 480 dblks = gfs2_extent_length(bh->b_data, bh->b_size, ptr, maxlen, 481 &eob); 482 BUG_ON(dblks < 1); 483 state = ALLOC_DATA; 484 } else { 485 /* Need to allocate indirect blocks */ 486 ptrs_per_blk = height > 1 ? sdp->sd_inptrs : sdp->sd_diptrs; 487 dblks = min(maxlen, (size_t)(ptrs_per_blk - 488 mp->mp_list[end_of_metadata])); 489 if (height == ip->i_height) { 490 /* Writing into existing tree, extend tree down */ 491 iblks = height - sheight; 492 state = ALLOC_GROW_DEPTH; 493 } else { 494 /* Building up tree height */ 495 state = ALLOC_GROW_HEIGHT; 496 iblks = height - ip->i_height; 497 branch_start = metapath_branch_start(mp); 498 iblks += (height - branch_start); 499 } 500 } 501 502 /* start of the second part of the function (state machine) */ 503 504 blks = dblks + iblks; 505 i = sheight; 506 do { 507 int error; 508 n = blks - alloced; 509 error = gfs2_alloc_blocks(ip, &bn, &n, 0, NULL); 510 if (error) 511 return error; 512 alloced += n; 513 if (state != ALLOC_DATA || gfs2_is_jdata(ip)) 514 gfs2_trans_add_unrevoke(sdp, bn, n); 515 switch (state) { 516 /* Growing height of tree */ 517 case ALLOC_GROW_HEIGHT: 518 if (i == 1) { 519 ptr = (__be64 *)(dibh->b_data + 520 sizeof(struct gfs2_dinode)); 521 zero_bn = *ptr; 522 } 523 for (; i - 1 < height - ip->i_height && n > 0; i++, n--) 524 gfs2_indirect_init(mp, ip->i_gl, i, 0, bn++); 525 if (i - 1 == height - ip->i_height) { 526 i--; 527 gfs2_buffer_copy_tail(mp->mp_bh[i], 528 sizeof(struct gfs2_meta_header), 529 dibh, sizeof(struct gfs2_dinode)); 530 gfs2_buffer_clear_tail(dibh, 531 sizeof(struct gfs2_dinode) + 532 sizeof(__be64)); 533 ptr = (__be64 *)(mp->mp_bh[i]->b_data + 534 sizeof(struct gfs2_meta_header)); 535 *ptr = zero_bn; 536 state = ALLOC_GROW_DEPTH; 537 for(i = branch_start; i < height; i++) { 538 if (mp->mp_bh[i] == NULL) 539 break; 540 brelse(mp->mp_bh[i]); 541 mp->mp_bh[i] = NULL; 542 } 543 i = branch_start; 544 } 545 if (n == 0) 546 break; 547 /* Branching from existing tree */ 548 case ALLOC_GROW_DEPTH: 549 if (i > 1 && i < height) 550 gfs2_trans_add_meta(ip->i_gl, mp->mp_bh[i-1]); 551 for (; i < height && n > 0; i++, n--) 552 gfs2_indirect_init(mp, ip->i_gl, i, 553 mp->mp_list[i-1], bn++); 554 if (i == height) 555 state = ALLOC_DATA; 556 if (n == 0) 557 break; 558 /* Tree complete, adding data blocks */ 559 case ALLOC_DATA: 560 BUG_ON(n > dblks); 561 BUG_ON(mp->mp_bh[end_of_metadata] == NULL); 562 gfs2_trans_add_meta(ip->i_gl, mp->mp_bh[end_of_metadata]); 563 dblks = n; 564 ptr = metapointer(end_of_metadata, mp); 565 dblock = bn; 566 while (n-- > 0) 567 *ptr++ = cpu_to_be64(bn++); 568 if (buffer_zeronew(bh_map)) { 569 ret = sb_issue_zeroout(sb, dblock, dblks, 570 GFP_NOFS); 571 if (ret) { 572 fs_err(sdp, 573 "Failed to zero data buffers\n"); 574 clear_buffer_zeronew(bh_map); 575 } 576 } 577 break; 578 } 579 } while ((state != ALLOC_DATA) || !dblock); 580 581 ip->i_height = height; 582 gfs2_add_inode_blocks(&ip->i_inode, alloced); 583 gfs2_dinode_out(ip, mp->mp_bh[0]->b_data); 584 map_bh(bh_map, inode->i_sb, dblock); 585 bh_map->b_size = dblks << inode->i_blkbits; 586 set_buffer_new(bh_map); 587 return 0; 588 } 589 590 /** 591 * gfs2_block_map - Map a block from an inode to a disk block 592 * @inode: The inode 593 * @lblock: The logical block number 594 * @bh_map: The bh to be mapped 595 * @create: True if its ok to alloc blocks to satify the request 596 * 597 * Sets buffer_mapped() if successful, sets buffer_boundary() if a 598 * read of metadata will be required before the next block can be 599 * mapped. Sets buffer_new() if new blocks were allocated. 600 * 601 * Returns: errno 602 */ 603 604 int gfs2_block_map(struct inode *inode, sector_t lblock, 605 struct buffer_head *bh_map, int create) 606 { 607 struct gfs2_inode *ip = GFS2_I(inode); 608 struct gfs2_sbd *sdp = GFS2_SB(inode); 609 unsigned int bsize = sdp->sd_sb.sb_bsize; 610 const size_t maxlen = bh_map->b_size >> inode->i_blkbits; 611 const u64 *arr = sdp->sd_heightsize; 612 __be64 *ptr; 613 u64 size; 614 struct metapath mp; 615 int ret; 616 int eob; 617 unsigned int len; 618 struct buffer_head *bh; 619 u8 height; 620 621 BUG_ON(maxlen == 0); 622 623 memset(mp.mp_bh, 0, sizeof(mp.mp_bh)); 624 bmap_lock(ip, create); 625 clear_buffer_mapped(bh_map); 626 clear_buffer_new(bh_map); 627 clear_buffer_boundary(bh_map); 628 trace_gfs2_bmap(ip, bh_map, lblock, create, 1); 629 if (gfs2_is_dir(ip)) { 630 bsize = sdp->sd_jbsize; 631 arr = sdp->sd_jheightsize; 632 } 633 634 ret = gfs2_meta_inode_buffer(ip, &mp.mp_bh[0]); 635 if (ret) 636 goto out; 637 638 height = ip->i_height; 639 size = (lblock + 1) * bsize; 640 while (size > arr[height]) 641 height++; 642 find_metapath(sdp, lblock, &mp, height); 643 ret = 1; 644 if (height > ip->i_height || gfs2_is_stuffed(ip)) 645 goto do_alloc; 646 ret = lookup_metapath(ip, &mp); 647 if (ret < 0) 648 goto out; 649 if (ret != ip->i_height) 650 goto do_alloc; 651 ptr = metapointer(ip->i_height - 1, &mp); 652 if (*ptr == 0) 653 goto do_alloc; 654 map_bh(bh_map, inode->i_sb, be64_to_cpu(*ptr)); 655 bh = mp.mp_bh[ip->i_height - 1]; 656 len = gfs2_extent_length(bh->b_data, bh->b_size, ptr, maxlen, &eob); 657 bh_map->b_size = (len << inode->i_blkbits); 658 if (eob) 659 set_buffer_boundary(bh_map); 660 ret = 0; 661 out: 662 release_metapath(&mp); 663 trace_gfs2_bmap(ip, bh_map, lblock, create, ret); 664 bmap_unlock(ip, create); 665 return ret; 666 667 do_alloc: 668 /* All allocations are done here, firstly check create flag */ 669 if (!create) { 670 BUG_ON(gfs2_is_stuffed(ip)); 671 ret = 0; 672 goto out; 673 } 674 675 /* At this point ret is the tree depth of already allocated blocks */ 676 ret = gfs2_bmap_alloc(inode, lblock, bh_map, &mp, ret, height, maxlen); 677 goto out; 678 } 679 680 /* 681 * Deprecated: do not use in new code 682 */ 683 int gfs2_extent_map(struct inode *inode, u64 lblock, int *new, u64 *dblock, unsigned *extlen) 684 { 685 struct buffer_head bh = { .b_state = 0, .b_blocknr = 0 }; 686 int ret; 687 int create = *new; 688 689 BUG_ON(!extlen); 690 BUG_ON(!dblock); 691 BUG_ON(!new); 692 693 bh.b_size = BIT(inode->i_blkbits + (create ? 0 : 5)); 694 ret = gfs2_block_map(inode, lblock, &bh, create); 695 *extlen = bh.b_size >> inode->i_blkbits; 696 *dblock = bh.b_blocknr; 697 if (buffer_new(&bh)) 698 *new = 1; 699 else 700 *new = 0; 701 return ret; 702 } 703 704 /** 705 * do_strip - Look for a layer a particular layer of the file and strip it off 706 * @ip: the inode 707 * @dibh: the dinode buffer 708 * @bh: A buffer of pointers 709 * @top: The first pointer in the buffer 710 * @bottom: One more than the last pointer 711 * @height: the height this buffer is at 712 * @sm: a pointer to a struct strip_mine 713 * 714 * Returns: errno 715 */ 716 717 static int do_strip(struct gfs2_inode *ip, struct buffer_head *dibh, 718 struct buffer_head *bh, __be64 *top, __be64 *bottom, 719 unsigned int height, struct strip_mine *sm) 720 { 721 struct gfs2_sbd *sdp = GFS2_SB(&ip->i_inode); 722 struct gfs2_rgrp_list rlist; 723 struct gfs2_trans *tr; 724 u64 bn, bstart; 725 u32 blen, btotal; 726 __be64 *p; 727 unsigned int rg_blocks = 0; 728 int metadata; 729 unsigned int revokes = 0; 730 int x; 731 int error; 732 int jblocks_rqsted; 733 734 error = gfs2_rindex_update(sdp); 735 if (error) 736 return error; 737 738 if (!*top) 739 sm->sm_first = 0; 740 741 if (height != sm->sm_height) 742 return 0; 743 744 if (sm->sm_first) { 745 top++; 746 sm->sm_first = 0; 747 } 748 749 metadata = (height != ip->i_height - 1); 750 if (metadata) 751 revokes = (height) ? sdp->sd_inptrs : sdp->sd_diptrs; 752 else if (ip->i_depth) 753 revokes = sdp->sd_inptrs; 754 755 memset(&rlist, 0, sizeof(struct gfs2_rgrp_list)); 756 bstart = 0; 757 blen = 0; 758 759 for (p = top; p < bottom; p++) { 760 if (!*p) 761 continue; 762 763 bn = be64_to_cpu(*p); 764 765 if (bstart + blen == bn) 766 blen++; 767 else { 768 if (bstart) 769 gfs2_rlist_add(ip, &rlist, bstart); 770 771 bstart = bn; 772 blen = 1; 773 } 774 } 775 776 if (bstart) 777 gfs2_rlist_add(ip, &rlist, bstart); 778 else 779 goto out; /* Nothing to do */ 780 781 gfs2_rlist_alloc(&rlist, LM_ST_EXCLUSIVE); 782 783 for (x = 0; x < rlist.rl_rgrps; x++) { 784 struct gfs2_rgrpd *rgd; 785 rgd = rlist.rl_ghs[x].gh_gl->gl_object; 786 rg_blocks += rgd->rd_length; 787 } 788 789 error = gfs2_glock_nq_m(rlist.rl_rgrps, rlist.rl_ghs); 790 if (error) 791 goto out_rlist; 792 793 if (gfs2_rs_active(&ip->i_res)) /* needs to be done with the rgrp glock held */ 794 gfs2_rs_deltree(&ip->i_res); 795 796 restart: 797 jblocks_rqsted = rg_blocks + RES_DINODE + 798 RES_INDIRECT + RES_STATFS + RES_QUOTA + 799 gfs2_struct2blk(sdp, revokes, sizeof(u64)); 800 if (jblocks_rqsted > atomic_read(&sdp->sd_log_thresh2)) 801 jblocks_rqsted = atomic_read(&sdp->sd_log_thresh2); 802 error = gfs2_trans_begin(sdp, jblocks_rqsted, revokes); 803 if (error) 804 goto out_rg_gunlock; 805 806 tr = current->journal_info; 807 down_write(&ip->i_rw_mutex); 808 809 gfs2_trans_add_meta(ip->i_gl, dibh); 810 gfs2_trans_add_meta(ip->i_gl, bh); 811 812 bstart = 0; 813 blen = 0; 814 btotal = 0; 815 816 for (p = top; p < bottom; p++) { 817 if (!*p) 818 continue; 819 820 /* check for max reasonable journal transaction blocks */ 821 if (tr->tr_num_buf_new + RES_STATFS + 822 RES_QUOTA >= atomic_read(&sdp->sd_log_thresh2)) { 823 if (rg_blocks >= tr->tr_num_buf_new) 824 rg_blocks -= tr->tr_num_buf_new; 825 else 826 rg_blocks = 0; 827 break; 828 } 829 830 bn = be64_to_cpu(*p); 831 832 if (bstart + blen == bn) 833 blen++; 834 else { 835 if (bstart) { 836 __gfs2_free_blocks(ip, bstart, blen, metadata); 837 btotal += blen; 838 } 839 840 bstart = bn; 841 blen = 1; 842 } 843 844 *p = 0; 845 gfs2_add_inode_blocks(&ip->i_inode, -1); 846 } 847 if (p == bottom) 848 rg_blocks = 0; 849 850 if (bstart) { 851 __gfs2_free_blocks(ip, bstart, blen, metadata); 852 btotal += blen; 853 } 854 855 gfs2_statfs_change(sdp, 0, +btotal, 0); 856 gfs2_quota_change(ip, -(s64)btotal, ip->i_inode.i_uid, 857 ip->i_inode.i_gid); 858 859 ip->i_inode.i_mtime = ip->i_inode.i_ctime = current_time(&ip->i_inode); 860 861 gfs2_dinode_out(ip, dibh->b_data); 862 863 up_write(&ip->i_rw_mutex); 864 865 gfs2_trans_end(sdp); 866 867 if (rg_blocks) 868 goto restart; 869 870 out_rg_gunlock: 871 gfs2_glock_dq_m(rlist.rl_rgrps, rlist.rl_ghs); 872 out_rlist: 873 gfs2_rlist_free(&rlist); 874 out: 875 return error; 876 } 877 878 /** 879 * recursive_scan - recursively scan through the end of a file 880 * @ip: the inode 881 * @dibh: the dinode buffer 882 * @mp: the path through the metadata to the point to start 883 * @height: the height the recursion is at 884 * @block: the indirect block to look at 885 * @first: 1 if this is the first block 886 * @sm: data opaque to this function to pass to @bc 887 * 888 * When this is first called @height and @block should be zero and 889 * @first should be 1. 890 * 891 * Returns: errno 892 */ 893 894 static int recursive_scan(struct gfs2_inode *ip, struct buffer_head *dibh, 895 struct metapath *mp, unsigned int height, 896 u64 block, int first, struct strip_mine *sm) 897 { 898 struct gfs2_sbd *sdp = GFS2_SB(&ip->i_inode); 899 struct buffer_head *bh = NULL; 900 __be64 *top, *bottom; 901 u64 bn; 902 int error; 903 int mh_size = sizeof(struct gfs2_meta_header); 904 905 if (!height) { 906 error = gfs2_meta_inode_buffer(ip, &bh); 907 if (error) 908 return error; 909 dibh = bh; 910 911 top = (__be64 *)(bh->b_data + sizeof(struct gfs2_dinode)) + mp->mp_list[0]; 912 bottom = (__be64 *)(bh->b_data + sizeof(struct gfs2_dinode)) + sdp->sd_diptrs; 913 } else { 914 error = gfs2_meta_indirect_buffer(ip, height, block, &bh); 915 if (error) 916 return error; 917 918 top = (__be64 *)(bh->b_data + mh_size) + 919 (first ? mp->mp_list[height] : 0); 920 921 bottom = (__be64 *)(bh->b_data + mh_size) + sdp->sd_inptrs; 922 } 923 924 error = do_strip(ip, dibh, bh, top, bottom, height, sm); 925 if (error) 926 goto out; 927 928 if (height < ip->i_height - 1) { 929 930 gfs2_metapath_ra(ip->i_gl, bh, top); 931 932 for (; top < bottom; top++, first = 0) { 933 if (!*top) 934 continue; 935 936 bn = be64_to_cpu(*top); 937 938 error = recursive_scan(ip, dibh, mp, height + 1, bn, 939 first, sm); 940 if (error) 941 break; 942 } 943 } 944 out: 945 brelse(bh); 946 return error; 947 } 948 949 950 /** 951 * gfs2_block_truncate_page - Deal with zeroing out data for truncate 952 * 953 * This is partly borrowed from ext3. 954 */ 955 static int gfs2_block_truncate_page(struct address_space *mapping, loff_t from) 956 { 957 struct inode *inode = mapping->host; 958 struct gfs2_inode *ip = GFS2_I(inode); 959 unsigned long index = from >> PAGE_SHIFT; 960 unsigned offset = from & (PAGE_SIZE-1); 961 unsigned blocksize, iblock, length, pos; 962 struct buffer_head *bh; 963 struct page *page; 964 int err; 965 966 page = find_or_create_page(mapping, index, GFP_NOFS); 967 if (!page) 968 return 0; 969 970 blocksize = inode->i_sb->s_blocksize; 971 length = blocksize - (offset & (blocksize - 1)); 972 iblock = index << (PAGE_SHIFT - inode->i_sb->s_blocksize_bits); 973 974 if (!page_has_buffers(page)) 975 create_empty_buffers(page, blocksize, 0); 976 977 /* Find the buffer that contains "offset" */ 978 bh = page_buffers(page); 979 pos = blocksize; 980 while (offset >= pos) { 981 bh = bh->b_this_page; 982 iblock++; 983 pos += blocksize; 984 } 985 986 err = 0; 987 988 if (!buffer_mapped(bh)) { 989 gfs2_block_map(inode, iblock, bh, 0); 990 /* unmapped? It's a hole - nothing to do */ 991 if (!buffer_mapped(bh)) 992 goto unlock; 993 } 994 995 /* Ok, it's mapped. Make sure it's up-to-date */ 996 if (PageUptodate(page)) 997 set_buffer_uptodate(bh); 998 999 if (!buffer_uptodate(bh)) { 1000 err = -EIO; 1001 ll_rw_block(REQ_OP_READ, 0, 1, &bh); 1002 wait_on_buffer(bh); 1003 /* Uhhuh. Read error. Complain and punt. */ 1004 if (!buffer_uptodate(bh)) 1005 goto unlock; 1006 err = 0; 1007 } 1008 1009 if (!gfs2_is_writeback(ip)) 1010 gfs2_trans_add_data(ip->i_gl, bh); 1011 1012 zero_user(page, offset, length); 1013 mark_buffer_dirty(bh); 1014 unlock: 1015 unlock_page(page); 1016 put_page(page); 1017 return err; 1018 } 1019 1020 #define GFS2_JTRUNC_REVOKES 8192 1021 1022 /** 1023 * gfs2_journaled_truncate - Wrapper for truncate_pagecache for jdata files 1024 * @inode: The inode being truncated 1025 * @oldsize: The original (larger) size 1026 * @newsize: The new smaller size 1027 * 1028 * With jdata files, we have to journal a revoke for each block which is 1029 * truncated. As a result, we need to split this into separate transactions 1030 * if the number of pages being truncated gets too large. 1031 */ 1032 1033 static int gfs2_journaled_truncate(struct inode *inode, u64 oldsize, u64 newsize) 1034 { 1035 struct gfs2_sbd *sdp = GFS2_SB(inode); 1036 u64 max_chunk = GFS2_JTRUNC_REVOKES * sdp->sd_vfs->s_blocksize; 1037 u64 chunk; 1038 int error; 1039 1040 while (oldsize != newsize) { 1041 chunk = oldsize - newsize; 1042 if (chunk > max_chunk) 1043 chunk = max_chunk; 1044 truncate_pagecache(inode, oldsize - chunk); 1045 oldsize -= chunk; 1046 gfs2_trans_end(sdp); 1047 error = gfs2_trans_begin(sdp, RES_DINODE, GFS2_JTRUNC_REVOKES); 1048 if (error) 1049 return error; 1050 } 1051 1052 return 0; 1053 } 1054 1055 static int trunc_start(struct inode *inode, u64 oldsize, u64 newsize) 1056 { 1057 struct gfs2_inode *ip = GFS2_I(inode); 1058 struct gfs2_sbd *sdp = GFS2_SB(inode); 1059 struct address_space *mapping = inode->i_mapping; 1060 struct buffer_head *dibh; 1061 int journaled = gfs2_is_jdata(ip); 1062 int error; 1063 1064 if (journaled) 1065 error = gfs2_trans_begin(sdp, RES_DINODE + RES_JDATA, GFS2_JTRUNC_REVOKES); 1066 else 1067 error = gfs2_trans_begin(sdp, RES_DINODE, 0); 1068 if (error) 1069 return error; 1070 1071 error = gfs2_meta_inode_buffer(ip, &dibh); 1072 if (error) 1073 goto out; 1074 1075 gfs2_trans_add_meta(ip->i_gl, dibh); 1076 1077 if (gfs2_is_stuffed(ip)) { 1078 gfs2_buffer_clear_tail(dibh, sizeof(struct gfs2_dinode) + newsize); 1079 } else { 1080 if (newsize & (u64)(sdp->sd_sb.sb_bsize - 1)) { 1081 error = gfs2_block_truncate_page(mapping, newsize); 1082 if (error) 1083 goto out_brelse; 1084 } 1085 ip->i_diskflags |= GFS2_DIF_TRUNC_IN_PROG; 1086 } 1087 1088 i_size_write(inode, newsize); 1089 ip->i_inode.i_mtime = ip->i_inode.i_ctime = current_time(&ip->i_inode); 1090 gfs2_dinode_out(ip, dibh->b_data); 1091 1092 if (journaled) 1093 error = gfs2_journaled_truncate(inode, oldsize, newsize); 1094 else 1095 truncate_pagecache(inode, newsize); 1096 1097 if (error) { 1098 brelse(dibh); 1099 return error; 1100 } 1101 1102 out_brelse: 1103 brelse(dibh); 1104 out: 1105 gfs2_trans_end(sdp); 1106 return error; 1107 } 1108 1109 static int trunc_dealloc(struct gfs2_inode *ip, u64 size) 1110 { 1111 struct gfs2_sbd *sdp = GFS2_SB(&ip->i_inode); 1112 unsigned int height = ip->i_height; 1113 u64 lblock; 1114 struct metapath mp; 1115 int error; 1116 1117 if (!size) 1118 lblock = 0; 1119 else 1120 lblock = (size - 1) >> sdp->sd_sb.sb_bsize_shift; 1121 1122 find_metapath(sdp, lblock, &mp, ip->i_height); 1123 error = gfs2_rindex_update(sdp); 1124 if (error) 1125 return error; 1126 1127 error = gfs2_quota_hold(ip, NO_UID_QUOTA_CHANGE, NO_GID_QUOTA_CHANGE); 1128 if (error) 1129 return error; 1130 1131 while (height--) { 1132 struct strip_mine sm; 1133 sm.sm_first = !!size; 1134 sm.sm_height = height; 1135 1136 error = recursive_scan(ip, NULL, &mp, 0, 0, 1, &sm); 1137 if (error) 1138 break; 1139 } 1140 1141 gfs2_quota_unhold(ip); 1142 1143 return error; 1144 } 1145 1146 static int trunc_end(struct gfs2_inode *ip) 1147 { 1148 struct gfs2_sbd *sdp = GFS2_SB(&ip->i_inode); 1149 struct buffer_head *dibh; 1150 int error; 1151 1152 error = gfs2_trans_begin(sdp, RES_DINODE, 0); 1153 if (error) 1154 return error; 1155 1156 down_write(&ip->i_rw_mutex); 1157 1158 error = gfs2_meta_inode_buffer(ip, &dibh); 1159 if (error) 1160 goto out; 1161 1162 if (!i_size_read(&ip->i_inode)) { 1163 ip->i_height = 0; 1164 ip->i_goal = ip->i_no_addr; 1165 gfs2_buffer_clear_tail(dibh, sizeof(struct gfs2_dinode)); 1166 gfs2_ordered_del_inode(ip); 1167 } 1168 ip->i_inode.i_mtime = ip->i_inode.i_ctime = current_time(&ip->i_inode); 1169 ip->i_diskflags &= ~GFS2_DIF_TRUNC_IN_PROG; 1170 1171 gfs2_trans_add_meta(ip->i_gl, dibh); 1172 gfs2_dinode_out(ip, dibh->b_data); 1173 brelse(dibh); 1174 1175 out: 1176 up_write(&ip->i_rw_mutex); 1177 gfs2_trans_end(sdp); 1178 return error; 1179 } 1180 1181 /** 1182 * do_shrink - make a file smaller 1183 * @inode: the inode 1184 * @oldsize: the current inode size 1185 * @newsize: the size to make the file 1186 * 1187 * Called with an exclusive lock on @inode. The @size must 1188 * be equal to or smaller than the current inode size. 1189 * 1190 * Returns: errno 1191 */ 1192 1193 static int do_shrink(struct inode *inode, u64 oldsize, u64 newsize) 1194 { 1195 struct gfs2_inode *ip = GFS2_I(inode); 1196 int error; 1197 1198 error = trunc_start(inode, oldsize, newsize); 1199 if (error < 0) 1200 return error; 1201 if (gfs2_is_stuffed(ip)) 1202 return 0; 1203 1204 error = trunc_dealloc(ip, newsize); 1205 if (error == 0) 1206 error = trunc_end(ip); 1207 1208 return error; 1209 } 1210 1211 void gfs2_trim_blocks(struct inode *inode) 1212 { 1213 u64 size = inode->i_size; 1214 int ret; 1215 1216 ret = do_shrink(inode, size, size); 1217 WARN_ON(ret != 0); 1218 } 1219 1220 /** 1221 * do_grow - Touch and update inode size 1222 * @inode: The inode 1223 * @size: The new size 1224 * 1225 * This function updates the timestamps on the inode and 1226 * may also increase the size of the inode. This function 1227 * must not be called with @size any smaller than the current 1228 * inode size. 1229 * 1230 * Although it is not strictly required to unstuff files here, 1231 * earlier versions of GFS2 have a bug in the stuffed file reading 1232 * code which will result in a buffer overrun if the size is larger 1233 * than the max stuffed file size. In order to prevent this from 1234 * occurring, such files are unstuffed, but in other cases we can 1235 * just update the inode size directly. 1236 * 1237 * Returns: 0 on success, or -ve on error 1238 */ 1239 1240 static int do_grow(struct inode *inode, u64 size) 1241 { 1242 struct gfs2_inode *ip = GFS2_I(inode); 1243 struct gfs2_sbd *sdp = GFS2_SB(inode); 1244 struct gfs2_alloc_parms ap = { .target = 1, }; 1245 struct buffer_head *dibh; 1246 int error; 1247 int unstuff = 0; 1248 1249 if (gfs2_is_stuffed(ip) && 1250 (size > (sdp->sd_sb.sb_bsize - sizeof(struct gfs2_dinode)))) { 1251 error = gfs2_quota_lock_check(ip, &ap); 1252 if (error) 1253 return error; 1254 1255 error = gfs2_inplace_reserve(ip, &ap); 1256 if (error) 1257 goto do_grow_qunlock; 1258 unstuff = 1; 1259 } 1260 1261 error = gfs2_trans_begin(sdp, RES_DINODE + RES_STATFS + RES_RG_BIT + 1262 (sdp->sd_args.ar_quota == GFS2_QUOTA_OFF ? 1263 0 : RES_QUOTA), 0); 1264 if (error) 1265 goto do_grow_release; 1266 1267 if (unstuff) { 1268 error = gfs2_unstuff_dinode(ip, NULL); 1269 if (error) 1270 goto do_end_trans; 1271 } 1272 1273 error = gfs2_meta_inode_buffer(ip, &dibh); 1274 if (error) 1275 goto do_end_trans; 1276 1277 i_size_write(inode, size); 1278 ip->i_inode.i_mtime = ip->i_inode.i_ctime = current_time(&ip->i_inode); 1279 gfs2_trans_add_meta(ip->i_gl, dibh); 1280 gfs2_dinode_out(ip, dibh->b_data); 1281 brelse(dibh); 1282 1283 do_end_trans: 1284 gfs2_trans_end(sdp); 1285 do_grow_release: 1286 if (unstuff) { 1287 gfs2_inplace_release(ip); 1288 do_grow_qunlock: 1289 gfs2_quota_unlock(ip); 1290 } 1291 return error; 1292 } 1293 1294 /** 1295 * gfs2_setattr_size - make a file a given size 1296 * @inode: the inode 1297 * @newsize: the size to make the file 1298 * 1299 * The file size can grow, shrink, or stay the same size. This 1300 * is called holding i_mutex and an exclusive glock on the inode 1301 * in question. 1302 * 1303 * Returns: errno 1304 */ 1305 1306 int gfs2_setattr_size(struct inode *inode, u64 newsize) 1307 { 1308 struct gfs2_inode *ip = GFS2_I(inode); 1309 int ret; 1310 u64 oldsize; 1311 1312 BUG_ON(!S_ISREG(inode->i_mode)); 1313 1314 ret = inode_newsize_ok(inode, newsize); 1315 if (ret) 1316 return ret; 1317 1318 inode_dio_wait(inode); 1319 1320 ret = gfs2_rsqa_alloc(ip); 1321 if (ret) 1322 goto out; 1323 1324 oldsize = inode->i_size; 1325 if (newsize >= oldsize) { 1326 ret = do_grow(inode, newsize); 1327 goto out; 1328 } 1329 1330 ret = do_shrink(inode, oldsize, newsize); 1331 out: 1332 gfs2_rsqa_delete(ip, NULL); 1333 return ret; 1334 } 1335 1336 int gfs2_truncatei_resume(struct gfs2_inode *ip) 1337 { 1338 int error; 1339 error = trunc_dealloc(ip, i_size_read(&ip->i_inode)); 1340 if (!error) 1341 error = trunc_end(ip); 1342 return error; 1343 } 1344 1345 int gfs2_file_dealloc(struct gfs2_inode *ip) 1346 { 1347 return trunc_dealloc(ip, 0); 1348 } 1349 1350 /** 1351 * gfs2_free_journal_extents - Free cached journal bmap info 1352 * @jd: The journal 1353 * 1354 */ 1355 1356 void gfs2_free_journal_extents(struct gfs2_jdesc *jd) 1357 { 1358 struct gfs2_journal_extent *jext; 1359 1360 while(!list_empty(&jd->extent_list)) { 1361 jext = list_entry(jd->extent_list.next, struct gfs2_journal_extent, list); 1362 list_del(&jext->list); 1363 kfree(jext); 1364 } 1365 } 1366 1367 /** 1368 * gfs2_add_jextent - Add or merge a new extent to extent cache 1369 * @jd: The journal descriptor 1370 * @lblock: The logical block at start of new extent 1371 * @dblock: The physical block at start of new extent 1372 * @blocks: Size of extent in fs blocks 1373 * 1374 * Returns: 0 on success or -ENOMEM 1375 */ 1376 1377 static int gfs2_add_jextent(struct gfs2_jdesc *jd, u64 lblock, u64 dblock, u64 blocks) 1378 { 1379 struct gfs2_journal_extent *jext; 1380 1381 if (!list_empty(&jd->extent_list)) { 1382 jext = list_entry(jd->extent_list.prev, struct gfs2_journal_extent, list); 1383 if ((jext->dblock + jext->blocks) == dblock) { 1384 jext->blocks += blocks; 1385 return 0; 1386 } 1387 } 1388 1389 jext = kzalloc(sizeof(struct gfs2_journal_extent), GFP_NOFS); 1390 if (jext == NULL) 1391 return -ENOMEM; 1392 jext->dblock = dblock; 1393 jext->lblock = lblock; 1394 jext->blocks = blocks; 1395 list_add_tail(&jext->list, &jd->extent_list); 1396 jd->nr_extents++; 1397 return 0; 1398 } 1399 1400 /** 1401 * gfs2_map_journal_extents - Cache journal bmap info 1402 * @sdp: The super block 1403 * @jd: The journal to map 1404 * 1405 * Create a reusable "extent" mapping from all logical 1406 * blocks to all physical blocks for the given journal. This will save 1407 * us time when writing journal blocks. Most journals will have only one 1408 * extent that maps all their logical blocks. That's because gfs2.mkfs 1409 * arranges the journal blocks sequentially to maximize performance. 1410 * So the extent would map the first block for the entire file length. 1411 * However, gfs2_jadd can happen while file activity is happening, so 1412 * those journals may not be sequential. Less likely is the case where 1413 * the users created their own journals by mounting the metafs and 1414 * laying it out. But it's still possible. These journals might have 1415 * several extents. 1416 * 1417 * Returns: 0 on success, or error on failure 1418 */ 1419 1420 int gfs2_map_journal_extents(struct gfs2_sbd *sdp, struct gfs2_jdesc *jd) 1421 { 1422 u64 lblock = 0; 1423 u64 lblock_stop; 1424 struct gfs2_inode *ip = GFS2_I(jd->jd_inode); 1425 struct buffer_head bh; 1426 unsigned int shift = sdp->sd_sb.sb_bsize_shift; 1427 u64 size; 1428 int rc; 1429 1430 lblock_stop = i_size_read(jd->jd_inode) >> shift; 1431 size = (lblock_stop - lblock) << shift; 1432 jd->nr_extents = 0; 1433 WARN_ON(!list_empty(&jd->extent_list)); 1434 1435 do { 1436 bh.b_state = 0; 1437 bh.b_blocknr = 0; 1438 bh.b_size = size; 1439 rc = gfs2_block_map(jd->jd_inode, lblock, &bh, 0); 1440 if (rc || !buffer_mapped(&bh)) 1441 goto fail; 1442 rc = gfs2_add_jextent(jd, lblock, bh.b_blocknr, bh.b_size >> shift); 1443 if (rc) 1444 goto fail; 1445 size -= bh.b_size; 1446 lblock += (bh.b_size >> ip->i_inode.i_blkbits); 1447 } while(size > 0); 1448 1449 fs_info(sdp, "journal %d mapped with %u extents\n", jd->jd_jid, 1450 jd->nr_extents); 1451 return 0; 1452 1453 fail: 1454 fs_warn(sdp, "error %d mapping journal %u at offset %llu (extent %u)\n", 1455 rc, jd->jd_jid, 1456 (unsigned long long)(i_size_read(jd->jd_inode) - size), 1457 jd->nr_extents); 1458 fs_warn(sdp, "bmap=%d lblock=%llu block=%llu, state=0x%08lx, size=%llu\n", 1459 rc, (unsigned long long)lblock, (unsigned long long)bh.b_blocknr, 1460 bh.b_state, (unsigned long long)bh.b_size); 1461 gfs2_free_journal_extents(jd); 1462 return rc; 1463 } 1464 1465 /** 1466 * gfs2_write_alloc_required - figure out if a write will require an allocation 1467 * @ip: the file being written to 1468 * @offset: the offset to write to 1469 * @len: the number of bytes being written 1470 * 1471 * Returns: 1 if an alloc is required, 0 otherwise 1472 */ 1473 1474 int gfs2_write_alloc_required(struct gfs2_inode *ip, u64 offset, 1475 unsigned int len) 1476 { 1477 struct gfs2_sbd *sdp = GFS2_SB(&ip->i_inode); 1478 struct buffer_head bh; 1479 unsigned int shift; 1480 u64 lblock, lblock_stop, size; 1481 u64 end_of_file; 1482 1483 if (!len) 1484 return 0; 1485 1486 if (gfs2_is_stuffed(ip)) { 1487 if (offset + len > 1488 sdp->sd_sb.sb_bsize - sizeof(struct gfs2_dinode)) 1489 return 1; 1490 return 0; 1491 } 1492 1493 shift = sdp->sd_sb.sb_bsize_shift; 1494 BUG_ON(gfs2_is_dir(ip)); 1495 end_of_file = (i_size_read(&ip->i_inode) + sdp->sd_sb.sb_bsize - 1) >> shift; 1496 lblock = offset >> shift; 1497 lblock_stop = (offset + len + sdp->sd_sb.sb_bsize - 1) >> shift; 1498 if (lblock_stop > end_of_file) 1499 return 1; 1500 1501 size = (lblock_stop - lblock) << shift; 1502 do { 1503 bh.b_state = 0; 1504 bh.b_size = size; 1505 gfs2_block_map(&ip->i_inode, lblock, &bh, 0); 1506 if (!buffer_mapped(&bh)) 1507 return 1; 1508 size -= bh.b_size; 1509 lblock += (bh.b_size >> ip->i_inode.i_blkbits); 1510 } while(size > 0); 1511 1512 return 0; 1513 } 1514 1515