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 u64 bn, bstart; 724 u32 blen, btotal; 725 __be64 *p; 726 unsigned int rg_blocks = 0; 727 int metadata; 728 unsigned int revokes = 0; 729 int x; 730 int error; 731 732 error = gfs2_rindex_update(sdp); 733 if (error) 734 return error; 735 736 if (!*top) 737 sm->sm_first = 0; 738 739 if (height != sm->sm_height) 740 return 0; 741 742 if (sm->sm_first) { 743 top++; 744 sm->sm_first = 0; 745 } 746 747 metadata = (height != ip->i_height - 1); 748 if (metadata) 749 revokes = (height) ? sdp->sd_inptrs : sdp->sd_diptrs; 750 else if (ip->i_depth) 751 revokes = sdp->sd_inptrs; 752 753 memset(&rlist, 0, sizeof(struct gfs2_rgrp_list)); 754 bstart = 0; 755 blen = 0; 756 757 for (p = top; p < bottom; p++) { 758 if (!*p) 759 continue; 760 761 bn = be64_to_cpu(*p); 762 763 if (bstart + blen == bn) 764 blen++; 765 else { 766 if (bstart) 767 gfs2_rlist_add(ip, &rlist, bstart); 768 769 bstart = bn; 770 blen = 1; 771 } 772 } 773 774 if (bstart) 775 gfs2_rlist_add(ip, &rlist, bstart); 776 else 777 goto out; /* Nothing to do */ 778 779 gfs2_rlist_alloc(&rlist, LM_ST_EXCLUSIVE); 780 781 for (x = 0; x < rlist.rl_rgrps; x++) { 782 struct gfs2_rgrpd *rgd; 783 rgd = rlist.rl_ghs[x].gh_gl->gl_object; 784 rg_blocks += rgd->rd_length; 785 } 786 787 error = gfs2_glock_nq_m(rlist.rl_rgrps, rlist.rl_ghs); 788 if (error) 789 goto out_rlist; 790 791 if (gfs2_rs_active(&ip->i_res)) /* needs to be done with the rgrp glock held */ 792 gfs2_rs_deltree(&ip->i_res); 793 794 error = gfs2_trans_begin(sdp, rg_blocks + RES_DINODE + 795 RES_INDIRECT + RES_STATFS + RES_QUOTA, 796 revokes); 797 if (error) 798 goto out_rg_gunlock; 799 800 down_write(&ip->i_rw_mutex); 801 802 gfs2_trans_add_meta(ip->i_gl, dibh); 803 gfs2_trans_add_meta(ip->i_gl, bh); 804 805 bstart = 0; 806 blen = 0; 807 btotal = 0; 808 809 for (p = top; p < bottom; p++) { 810 if (!*p) 811 continue; 812 813 bn = be64_to_cpu(*p); 814 815 if (bstart + blen == bn) 816 blen++; 817 else { 818 if (bstart) { 819 __gfs2_free_blocks(ip, bstart, blen, metadata); 820 btotal += blen; 821 } 822 823 bstart = bn; 824 blen = 1; 825 } 826 827 *p = 0; 828 gfs2_add_inode_blocks(&ip->i_inode, -1); 829 } 830 if (bstart) { 831 __gfs2_free_blocks(ip, bstart, blen, metadata); 832 btotal += blen; 833 } 834 835 gfs2_statfs_change(sdp, 0, +btotal, 0); 836 gfs2_quota_change(ip, -(s64)btotal, ip->i_inode.i_uid, 837 ip->i_inode.i_gid); 838 839 ip->i_inode.i_mtime = ip->i_inode.i_ctime = current_time(&ip->i_inode); 840 841 gfs2_dinode_out(ip, dibh->b_data); 842 843 up_write(&ip->i_rw_mutex); 844 845 gfs2_trans_end(sdp); 846 847 out_rg_gunlock: 848 gfs2_glock_dq_m(rlist.rl_rgrps, rlist.rl_ghs); 849 out_rlist: 850 gfs2_rlist_free(&rlist); 851 out: 852 return error; 853 } 854 855 /** 856 * recursive_scan - recursively scan through the end of a file 857 * @ip: the inode 858 * @dibh: the dinode buffer 859 * @mp: the path through the metadata to the point to start 860 * @height: the height the recursion is at 861 * @block: the indirect block to look at 862 * @first: 1 if this is the first block 863 * @sm: data opaque to this function to pass to @bc 864 * 865 * When this is first called @height and @block should be zero and 866 * @first should be 1. 867 * 868 * Returns: errno 869 */ 870 871 static int recursive_scan(struct gfs2_inode *ip, struct buffer_head *dibh, 872 struct metapath *mp, unsigned int height, 873 u64 block, int first, struct strip_mine *sm) 874 { 875 struct gfs2_sbd *sdp = GFS2_SB(&ip->i_inode); 876 struct buffer_head *bh = NULL; 877 __be64 *top, *bottom; 878 u64 bn; 879 int error; 880 int mh_size = sizeof(struct gfs2_meta_header); 881 882 if (!height) { 883 error = gfs2_meta_inode_buffer(ip, &bh); 884 if (error) 885 return error; 886 dibh = bh; 887 888 top = (__be64 *)(bh->b_data + sizeof(struct gfs2_dinode)) + mp->mp_list[0]; 889 bottom = (__be64 *)(bh->b_data + sizeof(struct gfs2_dinode)) + sdp->sd_diptrs; 890 } else { 891 error = gfs2_meta_indirect_buffer(ip, height, block, &bh); 892 if (error) 893 return error; 894 895 top = (__be64 *)(bh->b_data + mh_size) + 896 (first ? mp->mp_list[height] : 0); 897 898 bottom = (__be64 *)(bh->b_data + mh_size) + sdp->sd_inptrs; 899 } 900 901 error = do_strip(ip, dibh, bh, top, bottom, height, sm); 902 if (error) 903 goto out; 904 905 if (height < ip->i_height - 1) { 906 907 gfs2_metapath_ra(ip->i_gl, bh, top); 908 909 for (; top < bottom; top++, first = 0) { 910 if (!*top) 911 continue; 912 913 bn = be64_to_cpu(*top); 914 915 error = recursive_scan(ip, dibh, mp, height + 1, bn, 916 first, sm); 917 if (error) 918 break; 919 } 920 } 921 out: 922 brelse(bh); 923 return error; 924 } 925 926 927 /** 928 * gfs2_block_truncate_page - Deal with zeroing out data for truncate 929 * 930 * This is partly borrowed from ext3. 931 */ 932 static int gfs2_block_truncate_page(struct address_space *mapping, loff_t from) 933 { 934 struct inode *inode = mapping->host; 935 struct gfs2_inode *ip = GFS2_I(inode); 936 unsigned long index = from >> PAGE_SHIFT; 937 unsigned offset = from & (PAGE_SIZE-1); 938 unsigned blocksize, iblock, length, pos; 939 struct buffer_head *bh; 940 struct page *page; 941 int err; 942 943 page = find_or_create_page(mapping, index, GFP_NOFS); 944 if (!page) 945 return 0; 946 947 blocksize = inode->i_sb->s_blocksize; 948 length = blocksize - (offset & (blocksize - 1)); 949 iblock = index << (PAGE_SHIFT - inode->i_sb->s_blocksize_bits); 950 951 if (!page_has_buffers(page)) 952 create_empty_buffers(page, blocksize, 0); 953 954 /* Find the buffer that contains "offset" */ 955 bh = page_buffers(page); 956 pos = blocksize; 957 while (offset >= pos) { 958 bh = bh->b_this_page; 959 iblock++; 960 pos += blocksize; 961 } 962 963 err = 0; 964 965 if (!buffer_mapped(bh)) { 966 gfs2_block_map(inode, iblock, bh, 0); 967 /* unmapped? It's a hole - nothing to do */ 968 if (!buffer_mapped(bh)) 969 goto unlock; 970 } 971 972 /* Ok, it's mapped. Make sure it's up-to-date */ 973 if (PageUptodate(page)) 974 set_buffer_uptodate(bh); 975 976 if (!buffer_uptodate(bh)) { 977 err = -EIO; 978 ll_rw_block(REQ_OP_READ, 0, 1, &bh); 979 wait_on_buffer(bh); 980 /* Uhhuh. Read error. Complain and punt. */ 981 if (!buffer_uptodate(bh)) 982 goto unlock; 983 err = 0; 984 } 985 986 if (!gfs2_is_writeback(ip)) 987 gfs2_trans_add_data(ip->i_gl, bh); 988 989 zero_user(page, offset, length); 990 mark_buffer_dirty(bh); 991 unlock: 992 unlock_page(page); 993 put_page(page); 994 return err; 995 } 996 997 #define GFS2_JTRUNC_REVOKES 8192 998 999 /** 1000 * gfs2_journaled_truncate - Wrapper for truncate_pagecache for jdata files 1001 * @inode: The inode being truncated 1002 * @oldsize: The original (larger) size 1003 * @newsize: The new smaller size 1004 * 1005 * With jdata files, we have to journal a revoke for each block which is 1006 * truncated. As a result, we need to split this into separate transactions 1007 * if the number of pages being truncated gets too large. 1008 */ 1009 1010 static int gfs2_journaled_truncate(struct inode *inode, u64 oldsize, u64 newsize) 1011 { 1012 struct gfs2_sbd *sdp = GFS2_SB(inode); 1013 u64 max_chunk = GFS2_JTRUNC_REVOKES * sdp->sd_vfs->s_blocksize; 1014 u64 chunk; 1015 int error; 1016 1017 while (oldsize != newsize) { 1018 chunk = oldsize - newsize; 1019 if (chunk > max_chunk) 1020 chunk = max_chunk; 1021 truncate_pagecache(inode, oldsize - chunk); 1022 oldsize -= chunk; 1023 gfs2_trans_end(sdp); 1024 error = gfs2_trans_begin(sdp, RES_DINODE, GFS2_JTRUNC_REVOKES); 1025 if (error) 1026 return error; 1027 } 1028 1029 return 0; 1030 } 1031 1032 static int trunc_start(struct inode *inode, u64 oldsize, u64 newsize) 1033 { 1034 struct gfs2_inode *ip = GFS2_I(inode); 1035 struct gfs2_sbd *sdp = GFS2_SB(inode); 1036 struct address_space *mapping = inode->i_mapping; 1037 struct buffer_head *dibh; 1038 int journaled = gfs2_is_jdata(ip); 1039 int error; 1040 1041 if (journaled) 1042 error = gfs2_trans_begin(sdp, RES_DINODE + RES_JDATA, GFS2_JTRUNC_REVOKES); 1043 else 1044 error = gfs2_trans_begin(sdp, RES_DINODE, 0); 1045 if (error) 1046 return error; 1047 1048 error = gfs2_meta_inode_buffer(ip, &dibh); 1049 if (error) 1050 goto out; 1051 1052 gfs2_trans_add_meta(ip->i_gl, dibh); 1053 1054 if (gfs2_is_stuffed(ip)) { 1055 gfs2_buffer_clear_tail(dibh, sizeof(struct gfs2_dinode) + newsize); 1056 } else { 1057 if (newsize & (u64)(sdp->sd_sb.sb_bsize - 1)) { 1058 error = gfs2_block_truncate_page(mapping, newsize); 1059 if (error) 1060 goto out_brelse; 1061 } 1062 ip->i_diskflags |= GFS2_DIF_TRUNC_IN_PROG; 1063 } 1064 1065 i_size_write(inode, newsize); 1066 ip->i_inode.i_mtime = ip->i_inode.i_ctime = current_time(&ip->i_inode); 1067 gfs2_dinode_out(ip, dibh->b_data); 1068 1069 if (journaled) 1070 error = gfs2_journaled_truncate(inode, oldsize, newsize); 1071 else 1072 truncate_pagecache(inode, newsize); 1073 1074 if (error) { 1075 brelse(dibh); 1076 return error; 1077 } 1078 1079 out_brelse: 1080 brelse(dibh); 1081 out: 1082 gfs2_trans_end(sdp); 1083 return error; 1084 } 1085 1086 static int trunc_dealloc(struct gfs2_inode *ip, u64 size) 1087 { 1088 struct gfs2_sbd *sdp = GFS2_SB(&ip->i_inode); 1089 unsigned int height = ip->i_height; 1090 u64 lblock; 1091 struct metapath mp; 1092 int error; 1093 1094 if (!size) 1095 lblock = 0; 1096 else 1097 lblock = (size - 1) >> sdp->sd_sb.sb_bsize_shift; 1098 1099 find_metapath(sdp, lblock, &mp, ip->i_height); 1100 error = gfs2_rindex_update(sdp); 1101 if (error) 1102 return error; 1103 1104 error = gfs2_quota_hold(ip, NO_UID_QUOTA_CHANGE, NO_GID_QUOTA_CHANGE); 1105 if (error) 1106 return error; 1107 1108 while (height--) { 1109 struct strip_mine sm; 1110 sm.sm_first = !!size; 1111 sm.sm_height = height; 1112 1113 error = recursive_scan(ip, NULL, &mp, 0, 0, 1, &sm); 1114 if (error) 1115 break; 1116 } 1117 1118 gfs2_quota_unhold(ip); 1119 1120 return error; 1121 } 1122 1123 static int trunc_end(struct gfs2_inode *ip) 1124 { 1125 struct gfs2_sbd *sdp = GFS2_SB(&ip->i_inode); 1126 struct buffer_head *dibh; 1127 int error; 1128 1129 error = gfs2_trans_begin(sdp, RES_DINODE, 0); 1130 if (error) 1131 return error; 1132 1133 down_write(&ip->i_rw_mutex); 1134 1135 error = gfs2_meta_inode_buffer(ip, &dibh); 1136 if (error) 1137 goto out; 1138 1139 if (!i_size_read(&ip->i_inode)) { 1140 ip->i_height = 0; 1141 ip->i_goal = ip->i_no_addr; 1142 gfs2_buffer_clear_tail(dibh, sizeof(struct gfs2_dinode)); 1143 gfs2_ordered_del_inode(ip); 1144 } 1145 ip->i_inode.i_mtime = ip->i_inode.i_ctime = current_time(&ip->i_inode); 1146 ip->i_diskflags &= ~GFS2_DIF_TRUNC_IN_PROG; 1147 1148 gfs2_trans_add_meta(ip->i_gl, dibh); 1149 gfs2_dinode_out(ip, dibh->b_data); 1150 brelse(dibh); 1151 1152 out: 1153 up_write(&ip->i_rw_mutex); 1154 gfs2_trans_end(sdp); 1155 return error; 1156 } 1157 1158 /** 1159 * do_shrink - make a file smaller 1160 * @inode: the inode 1161 * @oldsize: the current inode size 1162 * @newsize: the size to make the file 1163 * 1164 * Called with an exclusive lock on @inode. The @size must 1165 * be equal to or smaller than the current inode size. 1166 * 1167 * Returns: errno 1168 */ 1169 1170 static int do_shrink(struct inode *inode, u64 oldsize, u64 newsize) 1171 { 1172 struct gfs2_inode *ip = GFS2_I(inode); 1173 int error; 1174 1175 error = trunc_start(inode, oldsize, newsize); 1176 if (error < 0) 1177 return error; 1178 if (gfs2_is_stuffed(ip)) 1179 return 0; 1180 1181 error = trunc_dealloc(ip, newsize); 1182 if (error == 0) 1183 error = trunc_end(ip); 1184 1185 return error; 1186 } 1187 1188 void gfs2_trim_blocks(struct inode *inode) 1189 { 1190 u64 size = inode->i_size; 1191 int ret; 1192 1193 ret = do_shrink(inode, size, size); 1194 WARN_ON(ret != 0); 1195 } 1196 1197 /** 1198 * do_grow - Touch and update inode size 1199 * @inode: The inode 1200 * @size: The new size 1201 * 1202 * This function updates the timestamps on the inode and 1203 * may also increase the size of the inode. This function 1204 * must not be called with @size any smaller than the current 1205 * inode size. 1206 * 1207 * Although it is not strictly required to unstuff files here, 1208 * earlier versions of GFS2 have a bug in the stuffed file reading 1209 * code which will result in a buffer overrun if the size is larger 1210 * than the max stuffed file size. In order to prevent this from 1211 * occurring, such files are unstuffed, but in other cases we can 1212 * just update the inode size directly. 1213 * 1214 * Returns: 0 on success, or -ve on error 1215 */ 1216 1217 static int do_grow(struct inode *inode, u64 size) 1218 { 1219 struct gfs2_inode *ip = GFS2_I(inode); 1220 struct gfs2_sbd *sdp = GFS2_SB(inode); 1221 struct gfs2_alloc_parms ap = { .target = 1, }; 1222 struct buffer_head *dibh; 1223 int error; 1224 int unstuff = 0; 1225 1226 if (gfs2_is_stuffed(ip) && 1227 (size > (sdp->sd_sb.sb_bsize - sizeof(struct gfs2_dinode)))) { 1228 error = gfs2_quota_lock_check(ip, &ap); 1229 if (error) 1230 return error; 1231 1232 error = gfs2_inplace_reserve(ip, &ap); 1233 if (error) 1234 goto do_grow_qunlock; 1235 unstuff = 1; 1236 } 1237 1238 error = gfs2_trans_begin(sdp, RES_DINODE + RES_STATFS + RES_RG_BIT + 1239 (sdp->sd_args.ar_quota == GFS2_QUOTA_OFF ? 1240 0 : RES_QUOTA), 0); 1241 if (error) 1242 goto do_grow_release; 1243 1244 if (unstuff) { 1245 error = gfs2_unstuff_dinode(ip, NULL); 1246 if (error) 1247 goto do_end_trans; 1248 } 1249 1250 error = gfs2_meta_inode_buffer(ip, &dibh); 1251 if (error) 1252 goto do_end_trans; 1253 1254 i_size_write(inode, size); 1255 ip->i_inode.i_mtime = ip->i_inode.i_ctime = current_time(&ip->i_inode); 1256 gfs2_trans_add_meta(ip->i_gl, dibh); 1257 gfs2_dinode_out(ip, dibh->b_data); 1258 brelse(dibh); 1259 1260 do_end_trans: 1261 gfs2_trans_end(sdp); 1262 do_grow_release: 1263 if (unstuff) { 1264 gfs2_inplace_release(ip); 1265 do_grow_qunlock: 1266 gfs2_quota_unlock(ip); 1267 } 1268 return error; 1269 } 1270 1271 /** 1272 * gfs2_setattr_size - make a file a given size 1273 * @inode: the inode 1274 * @newsize: the size to make the file 1275 * 1276 * The file size can grow, shrink, or stay the same size. This 1277 * is called holding i_mutex and an exclusive glock on the inode 1278 * in question. 1279 * 1280 * Returns: errno 1281 */ 1282 1283 int gfs2_setattr_size(struct inode *inode, u64 newsize) 1284 { 1285 struct gfs2_inode *ip = GFS2_I(inode); 1286 int ret; 1287 u64 oldsize; 1288 1289 BUG_ON(!S_ISREG(inode->i_mode)); 1290 1291 ret = inode_newsize_ok(inode, newsize); 1292 if (ret) 1293 return ret; 1294 1295 inode_dio_wait(inode); 1296 1297 ret = gfs2_rsqa_alloc(ip); 1298 if (ret) 1299 goto out; 1300 1301 oldsize = inode->i_size; 1302 if (newsize >= oldsize) { 1303 ret = do_grow(inode, newsize); 1304 goto out; 1305 } 1306 1307 ret = do_shrink(inode, oldsize, newsize); 1308 out: 1309 gfs2_rsqa_delete(ip, NULL); 1310 return ret; 1311 } 1312 1313 int gfs2_truncatei_resume(struct gfs2_inode *ip) 1314 { 1315 int error; 1316 error = trunc_dealloc(ip, i_size_read(&ip->i_inode)); 1317 if (!error) 1318 error = trunc_end(ip); 1319 return error; 1320 } 1321 1322 int gfs2_file_dealloc(struct gfs2_inode *ip) 1323 { 1324 return trunc_dealloc(ip, 0); 1325 } 1326 1327 /** 1328 * gfs2_free_journal_extents - Free cached journal bmap info 1329 * @jd: The journal 1330 * 1331 */ 1332 1333 void gfs2_free_journal_extents(struct gfs2_jdesc *jd) 1334 { 1335 struct gfs2_journal_extent *jext; 1336 1337 while(!list_empty(&jd->extent_list)) { 1338 jext = list_entry(jd->extent_list.next, struct gfs2_journal_extent, list); 1339 list_del(&jext->list); 1340 kfree(jext); 1341 } 1342 } 1343 1344 /** 1345 * gfs2_add_jextent - Add or merge a new extent to extent cache 1346 * @jd: The journal descriptor 1347 * @lblock: The logical block at start of new extent 1348 * @dblock: The physical block at start of new extent 1349 * @blocks: Size of extent in fs blocks 1350 * 1351 * Returns: 0 on success or -ENOMEM 1352 */ 1353 1354 static int gfs2_add_jextent(struct gfs2_jdesc *jd, u64 lblock, u64 dblock, u64 blocks) 1355 { 1356 struct gfs2_journal_extent *jext; 1357 1358 if (!list_empty(&jd->extent_list)) { 1359 jext = list_entry(jd->extent_list.prev, struct gfs2_journal_extent, list); 1360 if ((jext->dblock + jext->blocks) == dblock) { 1361 jext->blocks += blocks; 1362 return 0; 1363 } 1364 } 1365 1366 jext = kzalloc(sizeof(struct gfs2_journal_extent), GFP_NOFS); 1367 if (jext == NULL) 1368 return -ENOMEM; 1369 jext->dblock = dblock; 1370 jext->lblock = lblock; 1371 jext->blocks = blocks; 1372 list_add_tail(&jext->list, &jd->extent_list); 1373 jd->nr_extents++; 1374 return 0; 1375 } 1376 1377 /** 1378 * gfs2_map_journal_extents - Cache journal bmap info 1379 * @sdp: The super block 1380 * @jd: The journal to map 1381 * 1382 * Create a reusable "extent" mapping from all logical 1383 * blocks to all physical blocks for the given journal. This will save 1384 * us time when writing journal blocks. Most journals will have only one 1385 * extent that maps all their logical blocks. That's because gfs2.mkfs 1386 * arranges the journal blocks sequentially to maximize performance. 1387 * So the extent would map the first block for the entire file length. 1388 * However, gfs2_jadd can happen while file activity is happening, so 1389 * those journals may not be sequential. Less likely is the case where 1390 * the users created their own journals by mounting the metafs and 1391 * laying it out. But it's still possible. These journals might have 1392 * several extents. 1393 * 1394 * Returns: 0 on success, or error on failure 1395 */ 1396 1397 int gfs2_map_journal_extents(struct gfs2_sbd *sdp, struct gfs2_jdesc *jd) 1398 { 1399 u64 lblock = 0; 1400 u64 lblock_stop; 1401 struct gfs2_inode *ip = GFS2_I(jd->jd_inode); 1402 struct buffer_head bh; 1403 unsigned int shift = sdp->sd_sb.sb_bsize_shift; 1404 u64 size; 1405 int rc; 1406 1407 lblock_stop = i_size_read(jd->jd_inode) >> shift; 1408 size = (lblock_stop - lblock) << shift; 1409 jd->nr_extents = 0; 1410 WARN_ON(!list_empty(&jd->extent_list)); 1411 1412 do { 1413 bh.b_state = 0; 1414 bh.b_blocknr = 0; 1415 bh.b_size = size; 1416 rc = gfs2_block_map(jd->jd_inode, lblock, &bh, 0); 1417 if (rc || !buffer_mapped(&bh)) 1418 goto fail; 1419 rc = gfs2_add_jextent(jd, lblock, bh.b_blocknr, bh.b_size >> shift); 1420 if (rc) 1421 goto fail; 1422 size -= bh.b_size; 1423 lblock += (bh.b_size >> ip->i_inode.i_blkbits); 1424 } while(size > 0); 1425 1426 fs_info(sdp, "journal %d mapped with %u extents\n", jd->jd_jid, 1427 jd->nr_extents); 1428 return 0; 1429 1430 fail: 1431 fs_warn(sdp, "error %d mapping journal %u at offset %llu (extent %u)\n", 1432 rc, jd->jd_jid, 1433 (unsigned long long)(i_size_read(jd->jd_inode) - size), 1434 jd->nr_extents); 1435 fs_warn(sdp, "bmap=%d lblock=%llu block=%llu, state=0x%08lx, size=%llu\n", 1436 rc, (unsigned long long)lblock, (unsigned long long)bh.b_blocknr, 1437 bh.b_state, (unsigned long long)bh.b_size); 1438 gfs2_free_journal_extents(jd); 1439 return rc; 1440 } 1441 1442 /** 1443 * gfs2_write_alloc_required - figure out if a write will require an allocation 1444 * @ip: the file being written to 1445 * @offset: the offset to write to 1446 * @len: the number of bytes being written 1447 * 1448 * Returns: 1 if an alloc is required, 0 otherwise 1449 */ 1450 1451 int gfs2_write_alloc_required(struct gfs2_inode *ip, u64 offset, 1452 unsigned int len) 1453 { 1454 struct gfs2_sbd *sdp = GFS2_SB(&ip->i_inode); 1455 struct buffer_head bh; 1456 unsigned int shift; 1457 u64 lblock, lblock_stop, size; 1458 u64 end_of_file; 1459 1460 if (!len) 1461 return 0; 1462 1463 if (gfs2_is_stuffed(ip)) { 1464 if (offset + len > 1465 sdp->sd_sb.sb_bsize - sizeof(struct gfs2_dinode)) 1466 return 1; 1467 return 0; 1468 } 1469 1470 shift = sdp->sd_sb.sb_bsize_shift; 1471 BUG_ON(gfs2_is_dir(ip)); 1472 end_of_file = (i_size_read(&ip->i_inode) + sdp->sd_sb.sb_bsize - 1) >> shift; 1473 lblock = offset >> shift; 1474 lblock_stop = (offset + len + sdp->sd_sb.sb_bsize - 1) >> shift; 1475 if (lblock_stop > end_of_file) 1476 return 1; 1477 1478 size = (lblock_stop - lblock) << shift; 1479 do { 1480 bh.b_state = 0; 1481 bh.b_size = size; 1482 gfs2_block_map(&ip->i_inode, lblock, &bh, 0); 1483 if (!buffer_mapped(&bh)) 1484 return 1; 1485 size -= bh.b_size; 1486 lblock += (bh.b_size >> ip->i_inode.i_blkbits); 1487 } while(size > 0); 1488 1489 return 0; 1490 } 1491 1492