Merge branch 'iomap-write' into linux-gfs2/for-next
[linux-2.6-microblaze.git] / fs / gfs2 / bmap.c
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 #include <linux/iomap.h>
17
18 #include "gfs2.h"
19 #include "incore.h"
20 #include "bmap.h"
21 #include "glock.h"
22 #include "inode.h"
23 #include "meta_io.h"
24 #include "quota.h"
25 #include "rgrp.h"
26 #include "log.h"
27 #include "super.h"
28 #include "trans.h"
29 #include "dir.h"
30 #include "util.h"
31 #include "aops.h"
32 #include "trace_gfs2.h"
33
34 /* This doesn't need to be that large as max 64 bit pointers in a 4k
35  * block is 512, so __u16 is fine for that. It saves stack space to
36  * keep it small.
37  */
38 struct metapath {
39         struct buffer_head *mp_bh[GFS2_MAX_META_HEIGHT];
40         __u16 mp_list[GFS2_MAX_META_HEIGHT];
41         int mp_fheight; /* find_metapath height */
42         int mp_aheight; /* actual height (lookup height) */
43 };
44
45 static int punch_hole(struct gfs2_inode *ip, u64 offset, u64 length);
46
47 /**
48  * gfs2_unstuffer_page - unstuff a stuffed inode into a block cached by a page
49  * @ip: the inode
50  * @dibh: the dinode buffer
51  * @block: the block number that was allocated
52  * @page: The (optional) page. This is looked up if @page is NULL
53  *
54  * Returns: errno
55  */
56
57 static int gfs2_unstuffer_page(struct gfs2_inode *ip, struct buffer_head *dibh,
58                                u64 block, struct page *page)
59 {
60         struct inode *inode = &ip->i_inode;
61         struct buffer_head *bh;
62         int release = 0;
63
64         if (!page || page->index) {
65                 page = find_or_create_page(inode->i_mapping, 0, GFP_NOFS);
66                 if (!page)
67                         return -ENOMEM;
68                 release = 1;
69         }
70
71         if (!PageUptodate(page)) {
72                 void *kaddr = kmap(page);
73                 u64 dsize = i_size_read(inode);
74  
75                 if (dsize > gfs2_max_stuffed_size(ip))
76                         dsize = gfs2_max_stuffed_size(ip);
77
78                 memcpy(kaddr, dibh->b_data + sizeof(struct gfs2_dinode), dsize);
79                 memset(kaddr + dsize, 0, PAGE_SIZE - dsize);
80                 kunmap(page);
81
82                 SetPageUptodate(page);
83         }
84
85         if (!page_has_buffers(page))
86                 create_empty_buffers(page, BIT(inode->i_blkbits),
87                                      BIT(BH_Uptodate));
88
89         bh = page_buffers(page);
90
91         if (!buffer_mapped(bh))
92                 map_bh(bh, inode->i_sb, block);
93
94         set_buffer_uptodate(bh);
95         if (gfs2_is_jdata(ip))
96                 gfs2_trans_add_data(ip->i_gl, bh);
97         else {
98                 mark_buffer_dirty(bh);
99                 gfs2_ordered_add_inode(ip);
100         }
101
102         if (release) {
103                 unlock_page(page);
104                 put_page(page);
105         }
106
107         return 0;
108 }
109
110 /**
111  * gfs2_unstuff_dinode - Unstuff a dinode when the data has grown too big
112  * @ip: The GFS2 inode to unstuff
113  * @page: The (optional) page. This is looked up if the @page is NULL
114  *
115  * This routine unstuffs a dinode and returns it to a "normal" state such
116  * that the height can be grown in the traditional way.
117  *
118  * Returns: errno
119  */
120
121 int gfs2_unstuff_dinode(struct gfs2_inode *ip, struct page *page)
122 {
123         struct buffer_head *bh, *dibh;
124         struct gfs2_dinode *di;
125         u64 block = 0;
126         int isdir = gfs2_is_dir(ip);
127         int error;
128
129         down_write(&ip->i_rw_mutex);
130
131         error = gfs2_meta_inode_buffer(ip, &dibh);
132         if (error)
133                 goto out;
134
135         if (i_size_read(&ip->i_inode)) {
136                 /* Get a free block, fill it with the stuffed data,
137                    and write it out to disk */
138
139                 unsigned int n = 1;
140                 error = gfs2_alloc_blocks(ip, &block, &n, 0, NULL);
141                 if (error)
142                         goto out_brelse;
143                 if (isdir) {
144                         gfs2_trans_add_unrevoke(GFS2_SB(&ip->i_inode), block, 1);
145                         error = gfs2_dir_get_new_buffer(ip, block, &bh);
146                         if (error)
147                                 goto out_brelse;
148                         gfs2_buffer_copy_tail(bh, sizeof(struct gfs2_meta_header),
149                                               dibh, sizeof(struct gfs2_dinode));
150                         brelse(bh);
151                 } else {
152                         error = gfs2_unstuffer_page(ip, dibh, block, page);
153                         if (error)
154                                 goto out_brelse;
155                 }
156         }
157
158         /*  Set up the pointer to the new block  */
159
160         gfs2_trans_add_meta(ip->i_gl, dibh);
161         di = (struct gfs2_dinode *)dibh->b_data;
162         gfs2_buffer_clear_tail(dibh, sizeof(struct gfs2_dinode));
163
164         if (i_size_read(&ip->i_inode)) {
165                 *(__be64 *)(di + 1) = cpu_to_be64(block);
166                 gfs2_add_inode_blocks(&ip->i_inode, 1);
167                 di->di_blocks = cpu_to_be64(gfs2_get_inode_blocks(&ip->i_inode));
168         }
169
170         ip->i_height = 1;
171         di->di_height = cpu_to_be16(1);
172
173 out_brelse:
174         brelse(dibh);
175 out:
176         up_write(&ip->i_rw_mutex);
177         return error;
178 }
179
180
181 /**
182  * find_metapath - Find path through the metadata tree
183  * @sdp: The superblock
184  * @block: The disk block to look up
185  * @mp: The metapath to return the result in
186  * @height: The pre-calculated height of the metadata tree
187  *
188  *   This routine returns a struct metapath structure that defines a path
189  *   through the metadata of inode "ip" to get to block "block".
190  *
191  *   Example:
192  *   Given:  "ip" is a height 3 file, "offset" is 101342453, and this is a
193  *   filesystem with a blocksize of 4096.
194  *
195  *   find_metapath() would return a struct metapath structure set to:
196  *   mp_fheight = 3, mp_list[0] = 0, mp_list[1] = 48, and mp_list[2] = 165.
197  *
198  *   That means that in order to get to the block containing the byte at
199  *   offset 101342453, we would load the indirect block pointed to by pointer
200  *   0 in the dinode.  We would then load the indirect block pointed to by
201  *   pointer 48 in that indirect block.  We would then load the data block
202  *   pointed to by pointer 165 in that indirect block.
203  *
204  *             ----------------------------------------
205  *             | Dinode |                             |
206  *             |        |                            4|
207  *             |        |0 1 2 3 4 5                 9|
208  *             |        |                            6|
209  *             ----------------------------------------
210  *                       |
211  *                       |
212  *                       V
213  *             ----------------------------------------
214  *             | Indirect Block                       |
215  *             |                                     5|
216  *             |            4 4 4 4 4 5 5            1|
217  *             |0           5 6 7 8 9 0 1            2|
218  *             ----------------------------------------
219  *                                |
220  *                                |
221  *                                V
222  *             ----------------------------------------
223  *             | Indirect Block                       |
224  *             |                         1 1 1 1 1   5|
225  *             |                         6 6 6 6 6   1|
226  *             |0                        3 4 5 6 7   2|
227  *             ----------------------------------------
228  *                                           |
229  *                                           |
230  *                                           V
231  *             ----------------------------------------
232  *             | Data block containing offset         |
233  *             |            101342453                 |
234  *             |                                      |
235  *             |                                      |
236  *             ----------------------------------------
237  *
238  */
239
240 static void find_metapath(const struct gfs2_sbd *sdp, u64 block,
241                           struct metapath *mp, unsigned int height)
242 {
243         unsigned int i;
244
245         mp->mp_fheight = height;
246         for (i = height; i--;)
247                 mp->mp_list[i] = do_div(block, sdp->sd_inptrs);
248 }
249
250 static inline unsigned int metapath_branch_start(const struct metapath *mp)
251 {
252         if (mp->mp_list[0] == 0)
253                 return 2;
254         return 1;
255 }
256
257 /**
258  * metaptr1 - Return the first possible metadata pointer in a metapath buffer
259  * @height: The metadata height (0 = dinode)
260  * @mp: The metapath
261  */
262 static inline __be64 *metaptr1(unsigned int height, const struct metapath *mp)
263 {
264         struct buffer_head *bh = mp->mp_bh[height];
265         if (height == 0)
266                 return ((__be64 *)(bh->b_data + sizeof(struct gfs2_dinode)));
267         return ((__be64 *)(bh->b_data + sizeof(struct gfs2_meta_header)));
268 }
269
270 /**
271  * metapointer - Return pointer to start of metadata in a buffer
272  * @height: The metadata height (0 = dinode)
273  * @mp: The metapath
274  *
275  * Return a pointer to the block number of the next height of the metadata
276  * tree given a buffer containing the pointer to the current height of the
277  * metadata tree.
278  */
279
280 static inline __be64 *metapointer(unsigned int height, const struct metapath *mp)
281 {
282         __be64 *p = metaptr1(height, mp);
283         return p + mp->mp_list[height];
284 }
285
286 static inline const __be64 *metaend(unsigned int height, const struct metapath *mp)
287 {
288         const struct buffer_head *bh = mp->mp_bh[height];
289         return (const __be64 *)(bh->b_data + bh->b_size);
290 }
291
292 static void clone_metapath(struct metapath *clone, struct metapath *mp)
293 {
294         unsigned int hgt;
295
296         *clone = *mp;
297         for (hgt = 0; hgt < mp->mp_aheight; hgt++)
298                 get_bh(clone->mp_bh[hgt]);
299 }
300
301 static void gfs2_metapath_ra(struct gfs2_glock *gl, __be64 *start, __be64 *end)
302 {
303         const __be64 *t;
304
305         for (t = start; t < end; t++) {
306                 struct buffer_head *rabh;
307
308                 if (!*t)
309                         continue;
310
311                 rabh = gfs2_getbuf(gl, be64_to_cpu(*t), CREATE);
312                 if (trylock_buffer(rabh)) {
313                         if (!buffer_uptodate(rabh)) {
314                                 rabh->b_end_io = end_buffer_read_sync;
315                                 submit_bh(REQ_OP_READ,
316                                           REQ_RAHEAD | REQ_META | REQ_PRIO,
317                                           rabh);
318                                 continue;
319                         }
320                         unlock_buffer(rabh);
321                 }
322                 brelse(rabh);
323         }
324 }
325
326 static int __fillup_metapath(struct gfs2_inode *ip, struct metapath *mp,
327                              unsigned int x, unsigned int h)
328 {
329         for (; x < h; x++) {
330                 __be64 *ptr = metapointer(x, mp);
331                 u64 dblock = be64_to_cpu(*ptr);
332                 int ret;
333
334                 if (!dblock)
335                         break;
336                 ret = gfs2_meta_indirect_buffer(ip, x + 1, dblock, &mp->mp_bh[x + 1]);
337                 if (ret)
338                         return ret;
339         }
340         mp->mp_aheight = x + 1;
341         return 0;
342 }
343
344 /**
345  * lookup_metapath - Walk the metadata tree to a specific point
346  * @ip: The inode
347  * @mp: The metapath
348  *
349  * Assumes that the inode's buffer has already been looked up and
350  * hooked onto mp->mp_bh[0] and that the metapath has been initialised
351  * by find_metapath().
352  *
353  * If this function encounters part of the tree which has not been
354  * allocated, it returns the current height of the tree at the point
355  * at which it found the unallocated block. Blocks which are found are
356  * added to the mp->mp_bh[] list.
357  *
358  * Returns: error
359  */
360
361 static int lookup_metapath(struct gfs2_inode *ip, struct metapath *mp)
362 {
363         return __fillup_metapath(ip, mp, 0, ip->i_height - 1);
364 }
365
366 /**
367  * fillup_metapath - fill up buffers for the metadata path to a specific height
368  * @ip: The inode
369  * @mp: The metapath
370  * @h: The height to which it should be mapped
371  *
372  * Similar to lookup_metapath, but does lookups for a range of heights
373  *
374  * Returns: error or the number of buffers filled
375  */
376
377 static int fillup_metapath(struct gfs2_inode *ip, struct metapath *mp, int h)
378 {
379         unsigned int x = 0;
380         int ret;
381
382         if (h) {
383                 /* find the first buffer we need to look up. */
384                 for (x = h - 1; x > 0; x--) {
385                         if (mp->mp_bh[x])
386                                 break;
387                 }
388         }
389         ret = __fillup_metapath(ip, mp, x, h);
390         if (ret)
391                 return ret;
392         return mp->mp_aheight - x - 1;
393 }
394
395 static void release_metapath(struct metapath *mp)
396 {
397         int i;
398
399         for (i = 0; i < GFS2_MAX_META_HEIGHT; i++) {
400                 if (mp->mp_bh[i] == NULL)
401                         break;
402                 brelse(mp->mp_bh[i]);
403                 mp->mp_bh[i] = NULL;
404         }
405 }
406
407 /**
408  * gfs2_extent_length - Returns length of an extent of blocks
409  * @bh: The metadata block
410  * @ptr: Current position in @bh
411  * @limit: Max extent length to return
412  * @eob: Set to 1 if we hit "end of block"
413  *
414  * Returns: The length of the extent (minimum of one block)
415  */
416
417 static inline unsigned int gfs2_extent_length(struct buffer_head *bh, __be64 *ptr, size_t limit, int *eob)
418 {
419         const __be64 *end = (__be64 *)(bh->b_data + bh->b_size);
420         const __be64 *first = ptr;
421         u64 d = be64_to_cpu(*ptr);
422
423         *eob = 0;
424         do {
425                 ptr++;
426                 if (ptr >= end)
427                         break;
428                 d++;
429         } while(be64_to_cpu(*ptr) == d);
430         if (ptr >= end)
431                 *eob = 1;
432         return ptr - first;
433 }
434
435 typedef const __be64 *(*gfs2_metadata_walker)(
436                 struct metapath *mp,
437                 const __be64 *start, const __be64 *end,
438                 u64 factor, void *data);
439
440 #define WALK_STOP ((__be64 *)0)
441 #define WALK_NEXT ((__be64 *)1)
442
443 static int gfs2_walk_metadata(struct inode *inode, sector_t lblock,
444                 u64 len, struct metapath *mp, gfs2_metadata_walker walker,
445                 void *data)
446 {
447         struct metapath clone;
448         struct gfs2_inode *ip = GFS2_I(inode);
449         struct gfs2_sbd *sdp = GFS2_SB(inode);
450         const __be64 *start, *end, *ptr;
451         u64 factor = 1;
452         unsigned int hgt;
453         int ret = 0;
454
455         for (hgt = ip->i_height - 1; hgt >= mp->mp_aheight; hgt--)
456                 factor *= sdp->sd_inptrs;
457
458         for (;;) {
459                 u64 step;
460
461                 /* Walk indirect block. */
462                 start = metapointer(hgt, mp);
463                 end = metaend(hgt, mp);
464
465                 step = (end - start) * factor;
466                 if (step > len)
467                         end = start + DIV_ROUND_UP_ULL(len, factor);
468
469                 ptr = walker(mp, start, end, factor, data);
470                 if (ptr == WALK_STOP)
471                         break;
472                 if (step >= len)
473                         break;
474                 len -= step;
475                 if (ptr != WALK_NEXT) {
476                         BUG_ON(!*ptr);
477                         mp->mp_list[hgt] += ptr - start;
478                         goto fill_up_metapath;
479                 }
480
481 lower_metapath:
482                 /* Decrease height of metapath. */
483                 if (mp != &clone) {
484                         clone_metapath(&clone, mp);
485                         mp = &clone;
486                 }
487                 brelse(mp->mp_bh[hgt]);
488                 mp->mp_bh[hgt] = NULL;
489                 if (!hgt)
490                         break;
491                 hgt--;
492                 factor *= sdp->sd_inptrs;
493
494                 /* Advance in metadata tree. */
495                 (mp->mp_list[hgt])++;
496                 start = metapointer(hgt, mp);
497                 end = metaend(hgt, mp);
498                 if (start >= end) {
499                         mp->mp_list[hgt] = 0;
500                         if (!hgt)
501                                 break;
502                         goto lower_metapath;
503                 }
504
505 fill_up_metapath:
506                 /* Increase height of metapath. */
507                 if (mp != &clone) {
508                         clone_metapath(&clone, mp);
509                         mp = &clone;
510                 }
511                 ret = fillup_metapath(ip, mp, ip->i_height - 1);
512                 if (ret < 0)
513                         break;
514                 hgt += ret;
515                 for (; ret; ret--)
516                         do_div(factor, sdp->sd_inptrs);
517                 mp->mp_aheight = hgt + 1;
518         }
519         if (mp == &clone)
520                 release_metapath(mp);
521         return ret;
522 }
523
524 struct gfs2_hole_walker_args {
525         u64 blocks;
526 };
527
528 static const __be64 *gfs2_hole_walker(struct metapath *mp,
529                 const __be64 *start, const __be64 *end,
530                 u64 factor, void *data)
531 {
532         struct gfs2_hole_walker_args *args = data;
533         const __be64 *ptr;
534
535         for (ptr = start; ptr < end; ptr++) {
536                 if (*ptr) {
537                         args->blocks += (ptr - start) * factor;
538                         if (mp->mp_aheight == mp->mp_fheight)
539                                 return WALK_STOP;
540                         return ptr;  /* increase height */
541                 }
542         }
543         args->blocks += (end - start) * factor;
544         return WALK_NEXT;
545 }
546
547 /**
548  * gfs2_hole_size - figure out the size of a hole
549  * @inode: The inode
550  * @lblock: The logical starting block number
551  * @len: How far to look (in blocks)
552  * @mp: The metapath at lblock
553  * @iomap: The iomap to store the hole size in
554  *
555  * This function modifies @mp.
556  *
557  * Returns: errno on error
558  */
559 static int gfs2_hole_size(struct inode *inode, sector_t lblock, u64 len,
560                           struct metapath *mp, struct iomap *iomap)
561 {
562         struct gfs2_hole_walker_args args = { };
563         int ret = 0;
564
565         ret = gfs2_walk_metadata(inode, lblock, len, mp, gfs2_hole_walker, &args);
566         if (!ret)
567                 iomap->length = args.blocks << inode->i_blkbits;
568         return ret;
569 }
570
571 static inline __be64 *gfs2_indirect_init(struct metapath *mp,
572                                          struct gfs2_glock *gl, unsigned int i,
573                                          unsigned offset, u64 bn)
574 {
575         __be64 *ptr = (__be64 *)(mp->mp_bh[i - 1]->b_data +
576                        ((i > 1) ? sizeof(struct gfs2_meta_header) :
577                                  sizeof(struct gfs2_dinode)));
578         BUG_ON(i < 1);
579         BUG_ON(mp->mp_bh[i] != NULL);
580         mp->mp_bh[i] = gfs2_meta_new(gl, bn);
581         gfs2_trans_add_meta(gl, mp->mp_bh[i]);
582         gfs2_metatype_set(mp->mp_bh[i], GFS2_METATYPE_IN, GFS2_FORMAT_IN);
583         gfs2_buffer_clear_tail(mp->mp_bh[i], sizeof(struct gfs2_meta_header));
584         ptr += offset;
585         *ptr = cpu_to_be64(bn);
586         return ptr;
587 }
588
589 enum alloc_state {
590         ALLOC_DATA = 0,
591         ALLOC_GROW_DEPTH = 1,
592         ALLOC_GROW_HEIGHT = 2,
593         /* ALLOC_UNSTUFF = 3,   TBD and rather complicated */
594 };
595
596 /**
597  * gfs2_iomap_alloc - Build a metadata tree of the requested height
598  * @inode: The GFS2 inode
599  * @iomap: The iomap structure
600  * @flags: iomap flags
601  * @mp: The metapath, with proper height information calculated
602  *
603  * In this routine we may have to alloc:
604  *   i) Indirect blocks to grow the metadata tree height
605  *  ii) Indirect blocks to fill in lower part of the metadata tree
606  * iii) Data blocks
607  *
608  * This function is called after gfs2_iomap_get, which works out the
609  * total number of blocks which we need via gfs2_alloc_size.
610  *
611  * We then do the actual allocation asking for an extent at a time (if
612  * enough contiguous free blocks are available, there will only be one
613  * allocation request per call) and uses the state machine to initialise
614  * the blocks in order.
615  *
616  * Right now, this function will allocate at most one indirect block
617  * worth of data -- with a default block size of 4K, that's slightly
618  * less than 2M.  If this limitation is ever removed to allow huge
619  * allocations, we would probably still want to limit the iomap size we
620  * return to avoid stalling other tasks during huge writes; the next
621  * iomap iteration would then find the blocks already allocated.
622  *
623  * Returns: errno on error
624  */
625
626 static int gfs2_iomap_alloc(struct inode *inode, struct iomap *iomap,
627                             unsigned flags, struct metapath *mp)
628 {
629         struct gfs2_inode *ip = GFS2_I(inode);
630         struct gfs2_sbd *sdp = GFS2_SB(inode);
631         struct buffer_head *dibh = mp->mp_bh[0];
632         u64 bn;
633         unsigned n, i, blks, alloced = 0, iblks = 0, branch_start = 0;
634         size_t dblks = iomap->length >> inode->i_blkbits;
635         const unsigned end_of_metadata = mp->mp_fheight - 1;
636         int ret;
637         enum alloc_state state;
638         __be64 *ptr;
639         __be64 zero_bn = 0;
640
641         BUG_ON(mp->mp_aheight < 1);
642         BUG_ON(dibh == NULL);
643         BUG_ON(dblks < 1);
644
645         gfs2_trans_add_meta(ip->i_gl, dibh);
646
647         down_write(&ip->i_rw_mutex);
648
649         if (mp->mp_fheight == mp->mp_aheight) {
650                 /* Bottom indirect block exists */
651                 state = ALLOC_DATA;
652         } else {
653                 /* Need to allocate indirect blocks */
654                 if (mp->mp_fheight == ip->i_height) {
655                         /* Writing into existing tree, extend tree down */
656                         iblks = mp->mp_fheight - mp->mp_aheight;
657                         state = ALLOC_GROW_DEPTH;
658                 } else {
659                         /* Building up tree height */
660                         state = ALLOC_GROW_HEIGHT;
661                         iblks = mp->mp_fheight - ip->i_height;
662                         branch_start = metapath_branch_start(mp);
663                         iblks += (mp->mp_fheight - branch_start);
664                 }
665         }
666
667         /* start of the second part of the function (state machine) */
668
669         blks = dblks + iblks;
670         i = mp->mp_aheight;
671         do {
672                 n = blks - alloced;
673                 ret = gfs2_alloc_blocks(ip, &bn, &n, 0, NULL);
674                 if (ret)
675                         goto out;
676                 alloced += n;
677                 if (state != ALLOC_DATA || gfs2_is_jdata(ip))
678                         gfs2_trans_add_unrevoke(sdp, bn, n);
679                 switch (state) {
680                 /* Growing height of tree */
681                 case ALLOC_GROW_HEIGHT:
682                         if (i == 1) {
683                                 ptr = (__be64 *)(dibh->b_data +
684                                                  sizeof(struct gfs2_dinode));
685                                 zero_bn = *ptr;
686                         }
687                         for (; i - 1 < mp->mp_fheight - ip->i_height && n > 0;
688                              i++, n--)
689                                 gfs2_indirect_init(mp, ip->i_gl, i, 0, bn++);
690                         if (i - 1 == mp->mp_fheight - ip->i_height) {
691                                 i--;
692                                 gfs2_buffer_copy_tail(mp->mp_bh[i],
693                                                 sizeof(struct gfs2_meta_header),
694                                                 dibh, sizeof(struct gfs2_dinode));
695                                 gfs2_buffer_clear_tail(dibh,
696                                                 sizeof(struct gfs2_dinode) +
697                                                 sizeof(__be64));
698                                 ptr = (__be64 *)(mp->mp_bh[i]->b_data +
699                                         sizeof(struct gfs2_meta_header));
700                                 *ptr = zero_bn;
701                                 state = ALLOC_GROW_DEPTH;
702                                 for(i = branch_start; i < mp->mp_fheight; i++) {
703                                         if (mp->mp_bh[i] == NULL)
704                                                 break;
705                                         brelse(mp->mp_bh[i]);
706                                         mp->mp_bh[i] = NULL;
707                                 }
708                                 i = branch_start;
709                         }
710                         if (n == 0)
711                                 break;
712                 /* Branching from existing tree */
713                 case ALLOC_GROW_DEPTH:
714                         if (i > 1 && i < mp->mp_fheight)
715                                 gfs2_trans_add_meta(ip->i_gl, mp->mp_bh[i-1]);
716                         for (; i < mp->mp_fheight && n > 0; i++, n--)
717                                 gfs2_indirect_init(mp, ip->i_gl, i,
718                                                    mp->mp_list[i-1], bn++);
719                         if (i == mp->mp_fheight)
720                                 state = ALLOC_DATA;
721                         if (n == 0)
722                                 break;
723                 /* Tree complete, adding data blocks */
724                 case ALLOC_DATA:
725                         BUG_ON(n > dblks);
726                         BUG_ON(mp->mp_bh[end_of_metadata] == NULL);
727                         gfs2_trans_add_meta(ip->i_gl, mp->mp_bh[end_of_metadata]);
728                         dblks = n;
729                         ptr = metapointer(end_of_metadata, mp);
730                         iomap->addr = bn << inode->i_blkbits;
731                         iomap->flags |= IOMAP_F_MERGED | IOMAP_F_NEW;
732                         while (n-- > 0)
733                                 *ptr++ = cpu_to_be64(bn++);
734                         break;
735                 }
736         } while (iomap->addr == IOMAP_NULL_ADDR);
737
738         iomap->type = IOMAP_MAPPED;
739         iomap->length = (u64)dblks << inode->i_blkbits;
740         ip->i_height = mp->mp_fheight;
741         gfs2_add_inode_blocks(&ip->i_inode, alloced);
742         gfs2_dinode_out(ip, dibh->b_data);
743 out:
744         up_write(&ip->i_rw_mutex);
745         return ret;
746 }
747
748 #define IOMAP_F_GFS2_BOUNDARY IOMAP_F_PRIVATE
749
750 /**
751  * gfs2_alloc_size - Compute the maximum allocation size
752  * @inode: The inode
753  * @mp: The metapath
754  * @size: Requested size in blocks
755  *
756  * Compute the maximum size of the next allocation at @mp.
757  *
758  * Returns: size in blocks
759  */
760 static u64 gfs2_alloc_size(struct inode *inode, struct metapath *mp, u64 size)
761 {
762         struct gfs2_inode *ip = GFS2_I(inode);
763         struct gfs2_sbd *sdp = GFS2_SB(inode);
764         const __be64 *first, *ptr, *end;
765
766         /*
767          * For writes to stuffed files, this function is called twice via
768          * gfs2_iomap_get, before and after unstuffing. The size we return the
769          * first time needs to be large enough to get the reservation and
770          * allocation sizes right.  The size we return the second time must
771          * be exact or else gfs2_iomap_alloc won't do the right thing.
772          */
773
774         if (gfs2_is_stuffed(ip) || mp->mp_fheight != mp->mp_aheight) {
775                 unsigned int maxsize = mp->mp_fheight > 1 ?
776                         sdp->sd_inptrs : sdp->sd_diptrs;
777                 maxsize -= mp->mp_list[mp->mp_fheight - 1];
778                 if (size > maxsize)
779                         size = maxsize;
780                 return size;
781         }
782
783         first = metapointer(ip->i_height - 1, mp);
784         end = metaend(ip->i_height - 1, mp);
785         if (end - first > size)
786                 end = first + size;
787         for (ptr = first; ptr < end; ptr++) {
788                 if (*ptr)
789                         break;
790         }
791         return ptr - first;
792 }
793
794 /**
795  * gfs2_iomap_get - Map blocks from an inode to disk blocks
796  * @inode: The inode
797  * @pos: Starting position in bytes
798  * @length: Length to map, in bytes
799  * @flags: iomap flags
800  * @iomap: The iomap structure
801  * @mp: The metapath
802  *
803  * Returns: errno
804  */
805 static int gfs2_iomap_get(struct inode *inode, loff_t pos, loff_t length,
806                           unsigned flags, struct iomap *iomap,
807                           struct metapath *mp)
808 {
809         struct gfs2_inode *ip = GFS2_I(inode);
810         struct gfs2_sbd *sdp = GFS2_SB(inode);
811         loff_t size = i_size_read(inode);
812         __be64 *ptr;
813         sector_t lblock;
814         sector_t lblock_stop;
815         int ret;
816         int eob;
817         u64 len;
818         struct buffer_head *dibh = NULL, *bh;
819         u8 height;
820
821         if (!length)
822                 return -EINVAL;
823
824         down_read(&ip->i_rw_mutex);
825
826         ret = gfs2_meta_inode_buffer(ip, &dibh);
827         if (ret)
828                 goto unlock;
829         iomap->private = dibh;
830
831         if (gfs2_is_stuffed(ip)) {
832                 if (flags & IOMAP_WRITE) {
833                         loff_t max_size = gfs2_max_stuffed_size(ip);
834
835                         if (pos + length > max_size)
836                                 goto unstuff;
837                         iomap->length = max_size;
838                 } else {
839                         if (pos >= size) {
840                                 if (flags & IOMAP_REPORT) {
841                                         ret = -ENOENT;
842                                         goto unlock;
843                                 } else {
844                                         /* report a hole */
845                                         iomap->offset = pos;
846                                         iomap->length = length;
847                                         goto do_alloc;
848                                 }
849                         }
850                         iomap->length = size;
851                 }
852                 iomap->addr = (ip->i_no_addr << inode->i_blkbits) +
853                               sizeof(struct gfs2_dinode);
854                 iomap->type = IOMAP_INLINE;
855                 iomap->inline_data = dibh->b_data + sizeof(struct gfs2_dinode);
856                 goto out;
857         }
858
859 unstuff:
860         lblock = pos >> inode->i_blkbits;
861         iomap->offset = lblock << inode->i_blkbits;
862         lblock_stop = (pos + length - 1) >> inode->i_blkbits;
863         len = lblock_stop - lblock + 1;
864         iomap->length = len << inode->i_blkbits;
865
866         get_bh(dibh);
867         mp->mp_bh[0] = dibh;
868
869         height = ip->i_height;
870         while ((lblock + 1) * sdp->sd_sb.sb_bsize > sdp->sd_heightsize[height])
871                 height++;
872         find_metapath(sdp, lblock, mp, height);
873         if (height > ip->i_height || gfs2_is_stuffed(ip))
874                 goto do_alloc;
875
876         ret = lookup_metapath(ip, mp);
877         if (ret)
878                 goto unlock;
879
880         if (mp->mp_aheight != ip->i_height)
881                 goto do_alloc;
882
883         ptr = metapointer(ip->i_height - 1, mp);
884         if (*ptr == 0)
885                 goto do_alloc;
886
887         bh = mp->mp_bh[ip->i_height - 1];
888         len = gfs2_extent_length(bh, ptr, len, &eob);
889
890         iomap->addr = be64_to_cpu(*ptr) << inode->i_blkbits;
891         iomap->length = len << inode->i_blkbits;
892         iomap->type = IOMAP_MAPPED;
893         iomap->flags = IOMAP_F_MERGED;
894         if (eob)
895                 iomap->flags |= IOMAP_F_GFS2_BOUNDARY;
896
897 out:
898         iomap->bdev = inode->i_sb->s_bdev;
899 unlock:
900         up_read(&ip->i_rw_mutex);
901         if (ret && dibh)
902                 brelse(dibh);
903         return ret;
904
905 do_alloc:
906         iomap->addr = IOMAP_NULL_ADDR;
907         iomap->type = IOMAP_HOLE;
908         if (flags & IOMAP_REPORT) {
909                 if (pos >= size)
910                         ret = -ENOENT;
911                 else if (height == ip->i_height)
912                         ret = gfs2_hole_size(inode, lblock, len, mp, iomap);
913                 else
914                         iomap->length = size - pos;
915         } else if (flags & IOMAP_WRITE) {
916                 u64 alloc_size;
917
918                 if (flags & IOMAP_DIRECT)
919                         goto out;  /* (see gfs2_file_direct_write) */
920
921                 len = gfs2_alloc_size(inode, mp, len);
922                 alloc_size = len << inode->i_blkbits;
923                 if (alloc_size < iomap->length)
924                         iomap->length = alloc_size;
925         } else {
926                 if (pos < size && height == ip->i_height)
927                         ret = gfs2_hole_size(inode, lblock, len, mp, iomap);
928         }
929         goto out;
930 }
931
932 static int gfs2_write_lock(struct inode *inode)
933 {
934         struct gfs2_inode *ip = GFS2_I(inode);
935         struct gfs2_sbd *sdp = GFS2_SB(inode);
936         int error;
937
938         gfs2_holder_init(ip->i_gl, LM_ST_EXCLUSIVE, 0, &ip->i_gh);
939         error = gfs2_glock_nq(&ip->i_gh);
940         if (error)
941                 goto out_uninit;
942         if (&ip->i_inode == sdp->sd_rindex) {
943                 struct gfs2_inode *m_ip = GFS2_I(sdp->sd_statfs_inode);
944
945                 error = gfs2_glock_nq_init(m_ip->i_gl, LM_ST_EXCLUSIVE,
946                                            GL_NOCACHE, &m_ip->i_gh);
947                 if (error)
948                         goto out_unlock;
949         }
950         return 0;
951
952 out_unlock:
953         gfs2_glock_dq(&ip->i_gh);
954 out_uninit:
955         gfs2_holder_uninit(&ip->i_gh);
956         return error;
957 }
958
959 static void gfs2_write_unlock(struct inode *inode)
960 {
961         struct gfs2_inode *ip = GFS2_I(inode);
962         struct gfs2_sbd *sdp = GFS2_SB(inode);
963
964         if (&ip->i_inode == sdp->sd_rindex) {
965                 struct gfs2_inode *m_ip = GFS2_I(sdp->sd_statfs_inode);
966
967                 gfs2_glock_dq_uninit(&m_ip->i_gh);
968         }
969         gfs2_glock_dq_uninit(&ip->i_gh);
970 }
971
972 static void gfs2_iomap_journaled_page_done(struct inode *inode, loff_t pos,
973                                 unsigned copied, struct page *page,
974                                 struct iomap *iomap)
975 {
976         struct gfs2_inode *ip = GFS2_I(inode);
977
978         gfs2_page_add_databufs(ip, page, offset_in_page(pos), copied);
979 }
980
981 static int gfs2_iomap_begin_write(struct inode *inode, loff_t pos,
982                                   loff_t length, unsigned flags,
983                                   struct iomap *iomap)
984 {
985         struct metapath mp = { .mp_aheight = 1, };
986         struct gfs2_inode *ip = GFS2_I(inode);
987         struct gfs2_sbd *sdp = GFS2_SB(inode);
988         unsigned int data_blocks = 0, ind_blocks = 0, rblocks;
989         bool unstuff, alloc_required;
990         int ret;
991
992         ret = gfs2_write_lock(inode);
993         if (ret)
994                 return ret;
995
996         unstuff = gfs2_is_stuffed(ip) &&
997                   pos + length > gfs2_max_stuffed_size(ip);
998
999         ret = gfs2_iomap_get(inode, pos, length, flags, iomap, &mp);
1000         if (ret)
1001                 goto out_release;
1002
1003         alloc_required = unstuff || iomap->type == IOMAP_HOLE;
1004
1005         if (alloc_required || gfs2_is_jdata(ip))
1006                 gfs2_write_calc_reserv(ip, iomap->length, &data_blocks,
1007                                        &ind_blocks);
1008
1009         if (alloc_required) {
1010                 struct gfs2_alloc_parms ap = {
1011                         .target = data_blocks + ind_blocks
1012                 };
1013
1014                 ret = gfs2_quota_lock_check(ip, &ap);
1015                 if (ret)
1016                         goto out_release;
1017
1018                 ret = gfs2_inplace_reserve(ip, &ap);
1019                 if (ret)
1020                         goto out_qunlock;
1021         }
1022
1023         rblocks = RES_DINODE + ind_blocks;
1024         if (gfs2_is_jdata(ip))
1025                 rblocks += data_blocks;
1026         if (ind_blocks || data_blocks)
1027                 rblocks += RES_STATFS + RES_QUOTA;
1028         if (inode == sdp->sd_rindex)
1029                 rblocks += 2 * RES_STATFS;
1030         if (alloc_required)
1031                 rblocks += gfs2_rg_blocks(ip, data_blocks + ind_blocks);
1032
1033         ret = gfs2_trans_begin(sdp, rblocks, iomap->length >> inode->i_blkbits);
1034         if (ret)
1035                 goto out_trans_fail;
1036
1037         if (unstuff) {
1038                 ret = gfs2_unstuff_dinode(ip, NULL);
1039                 if (ret)
1040                         goto out_trans_end;
1041                 release_metapath(&mp);
1042                 brelse(iomap->private);
1043                 iomap->private = NULL;
1044                 ret = gfs2_iomap_get(inode, iomap->offset, iomap->length,
1045                                      flags, iomap, &mp);
1046                 if (ret)
1047                         goto out_trans_end;
1048         }
1049
1050         if (iomap->type == IOMAP_HOLE) {
1051                 ret = gfs2_iomap_alloc(inode, iomap, flags, &mp);
1052                 if (ret) {
1053                         gfs2_trans_end(sdp);
1054                         gfs2_inplace_release(ip);
1055                         punch_hole(ip, iomap->offset, iomap->length);
1056                         goto out_qunlock;
1057                 }
1058         }
1059         release_metapath(&mp);
1060         if (gfs2_is_jdata(ip))
1061                 iomap->page_done = gfs2_iomap_journaled_page_done;
1062         return 0;
1063
1064 out_trans_end:
1065         gfs2_trans_end(sdp);
1066 out_trans_fail:
1067         if (alloc_required)
1068                 gfs2_inplace_release(ip);
1069 out_qunlock:
1070         if (alloc_required)
1071                 gfs2_quota_unlock(ip);
1072 out_release:
1073         if (iomap->private)
1074                 brelse(iomap->private);
1075         release_metapath(&mp);
1076         gfs2_write_unlock(inode);
1077         return ret;
1078 }
1079
1080 static int gfs2_iomap_begin(struct inode *inode, loff_t pos, loff_t length,
1081                             unsigned flags, struct iomap *iomap)
1082 {
1083         struct gfs2_inode *ip = GFS2_I(inode);
1084         struct metapath mp = { .mp_aheight = 1, };
1085         int ret;
1086
1087         trace_gfs2_iomap_start(ip, pos, length, flags);
1088         if ((flags & IOMAP_WRITE) && !(flags & IOMAP_DIRECT)) {
1089                 ret = gfs2_iomap_begin_write(inode, pos, length, flags, iomap);
1090         } else {
1091                 ret = gfs2_iomap_get(inode, pos, length, flags, iomap, &mp);
1092                 release_metapath(&mp);
1093                 /*
1094                  * Silently fall back to buffered I/O for stuffed files or if
1095                  * we've hot a hole (see gfs2_file_direct_write).
1096                  */
1097                 if ((flags & IOMAP_WRITE) && (flags & IOMAP_DIRECT) &&
1098                     iomap->type != IOMAP_MAPPED)
1099                         ret = -ENOTBLK;
1100         }
1101         trace_gfs2_iomap_end(ip, iomap, ret);
1102         return ret;
1103 }
1104
1105 static int gfs2_iomap_end(struct inode *inode, loff_t pos, loff_t length,
1106                           ssize_t written, unsigned flags, struct iomap *iomap)
1107 {
1108         struct gfs2_inode *ip = GFS2_I(inode);
1109         struct gfs2_sbd *sdp = GFS2_SB(inode);
1110         struct gfs2_trans *tr = current->journal_info;
1111         struct buffer_head *dibh = iomap->private;
1112
1113         if ((flags & (IOMAP_WRITE | IOMAP_DIRECT)) != IOMAP_WRITE)
1114                 goto out;
1115
1116         if (iomap->type != IOMAP_INLINE) {
1117                 gfs2_ordered_add_inode(ip);
1118
1119                 if (tr->tr_num_buf_new)
1120                         __mark_inode_dirty(inode, I_DIRTY_DATASYNC);
1121                 else
1122                         gfs2_trans_add_meta(ip->i_gl, dibh);
1123         }
1124
1125         if (inode == sdp->sd_rindex) {
1126                 adjust_fs_space(inode);
1127                 sdp->sd_rindex_uptodate = 0;
1128         }
1129
1130         gfs2_trans_end(sdp);
1131         gfs2_inplace_release(ip);
1132
1133         if (length != written && (iomap->flags & IOMAP_F_NEW)) {
1134                 /* Deallocate blocks that were just allocated. */
1135                 loff_t blockmask = i_blocksize(inode) - 1;
1136                 loff_t end = (pos + length) & ~blockmask;
1137
1138                 pos = (pos + written + blockmask) & ~blockmask;
1139                 if (pos < end) {
1140                         truncate_pagecache_range(inode, pos, end - 1);
1141                         punch_hole(ip, pos, end - pos);
1142                 }
1143         }
1144
1145         if (ip->i_qadata && ip->i_qadata->qa_qd_num)
1146                 gfs2_quota_unlock(ip);
1147         gfs2_write_unlock(inode);
1148
1149 out:
1150         if (dibh)
1151                 brelse(dibh);
1152         return 0;
1153 }
1154
1155 const struct iomap_ops gfs2_iomap_ops = {
1156         .iomap_begin = gfs2_iomap_begin,
1157         .iomap_end = gfs2_iomap_end,
1158 };
1159
1160 /**
1161  * gfs2_block_map - Map one or more blocks of an inode to a disk block
1162  * @inode: The inode
1163  * @lblock: The logical block number
1164  * @bh_map: The bh to be mapped
1165  * @create: True if its ok to alloc blocks to satify the request
1166  *
1167  * The size of the requested mapping is defined in bh_map->b_size.
1168  *
1169  * Clears buffer_mapped(bh_map) and leaves bh_map->b_size unchanged
1170  * when @lblock is not mapped.  Sets buffer_mapped(bh_map) and
1171  * bh_map->b_size to indicate the size of the mapping when @lblock and
1172  * successive blocks are mapped, up to the requested size.
1173  *
1174  * Sets buffer_boundary() if a read of metadata will be required
1175  * before the next block can be mapped. Sets buffer_new() if new
1176  * blocks were allocated.
1177  *
1178  * Returns: errno
1179  */
1180
1181 int gfs2_block_map(struct inode *inode, sector_t lblock,
1182                    struct buffer_head *bh_map, int create)
1183 {
1184         struct gfs2_inode *ip = GFS2_I(inode);
1185         loff_t pos = (loff_t)lblock << inode->i_blkbits;
1186         loff_t length = bh_map->b_size;
1187         struct metapath mp = { .mp_aheight = 1, };
1188         struct iomap iomap = { };
1189         int ret;
1190
1191         clear_buffer_mapped(bh_map);
1192         clear_buffer_new(bh_map);
1193         clear_buffer_boundary(bh_map);
1194         trace_gfs2_bmap(ip, bh_map, lblock, create, 1);
1195
1196         if (create) {
1197                 ret = gfs2_iomap_get(inode, pos, length, IOMAP_WRITE, &iomap, &mp);
1198                 if (!ret && iomap.type == IOMAP_HOLE)
1199                         ret = gfs2_iomap_alloc(inode, &iomap, IOMAP_WRITE, &mp);
1200                 release_metapath(&mp);
1201         } else {
1202                 ret = gfs2_iomap_get(inode, pos, length, 0, &iomap, &mp);
1203                 release_metapath(&mp);
1204         }
1205         if (ret)
1206                 goto out;
1207
1208         if (iomap.length > bh_map->b_size) {
1209                 iomap.length = bh_map->b_size;
1210                 iomap.flags &= ~IOMAP_F_GFS2_BOUNDARY;
1211         }
1212         if (iomap.addr != IOMAP_NULL_ADDR)
1213                 map_bh(bh_map, inode->i_sb, iomap.addr >> inode->i_blkbits);
1214         bh_map->b_size = iomap.length;
1215         if (iomap.flags & IOMAP_F_GFS2_BOUNDARY)
1216                 set_buffer_boundary(bh_map);
1217         if (iomap.flags & IOMAP_F_NEW)
1218                 set_buffer_new(bh_map);
1219
1220 out:
1221         trace_gfs2_bmap(ip, bh_map, lblock, create, ret);
1222         return ret;
1223 }
1224
1225 /*
1226  * Deprecated: do not use in new code
1227  */
1228 int gfs2_extent_map(struct inode *inode, u64 lblock, int *new, u64 *dblock, unsigned *extlen)
1229 {
1230         struct buffer_head bh = { .b_state = 0, .b_blocknr = 0 };
1231         int ret;
1232         int create = *new;
1233
1234         BUG_ON(!extlen);
1235         BUG_ON(!dblock);
1236         BUG_ON(!new);
1237
1238         bh.b_size = BIT(inode->i_blkbits + (create ? 0 : 5));
1239         ret = gfs2_block_map(inode, lblock, &bh, create);
1240         *extlen = bh.b_size >> inode->i_blkbits;
1241         *dblock = bh.b_blocknr;
1242         if (buffer_new(&bh))
1243                 *new = 1;
1244         else
1245                 *new = 0;
1246         return ret;
1247 }
1248
1249 /**
1250  * gfs2_block_zero_range - Deal with zeroing out data
1251  *
1252  * This is partly borrowed from ext3.
1253  */
1254 static int gfs2_block_zero_range(struct inode *inode, loff_t from,
1255                                  unsigned int length)
1256 {
1257         struct address_space *mapping = inode->i_mapping;
1258         struct gfs2_inode *ip = GFS2_I(inode);
1259         unsigned long index = from >> PAGE_SHIFT;
1260         unsigned offset = from & (PAGE_SIZE-1);
1261         unsigned blocksize, iblock, pos;
1262         struct buffer_head *bh;
1263         struct page *page;
1264         int err;
1265
1266         page = find_or_create_page(mapping, index, GFP_NOFS);
1267         if (!page)
1268                 return 0;
1269
1270         blocksize = inode->i_sb->s_blocksize;
1271         iblock = index << (PAGE_SHIFT - inode->i_sb->s_blocksize_bits);
1272
1273         if (!page_has_buffers(page))
1274                 create_empty_buffers(page, blocksize, 0);
1275
1276         /* Find the buffer that contains "offset" */
1277         bh = page_buffers(page);
1278         pos = blocksize;
1279         while (offset >= pos) {
1280                 bh = bh->b_this_page;
1281                 iblock++;
1282                 pos += blocksize;
1283         }
1284
1285         err = 0;
1286
1287         if (!buffer_mapped(bh)) {
1288                 gfs2_block_map(inode, iblock, bh, 0);
1289                 /* unmapped? It's a hole - nothing to do */
1290                 if (!buffer_mapped(bh))
1291                         goto unlock;
1292         }
1293
1294         /* Ok, it's mapped. Make sure it's up-to-date */
1295         if (PageUptodate(page))
1296                 set_buffer_uptodate(bh);
1297
1298         if (!buffer_uptodate(bh)) {
1299                 err = -EIO;
1300                 ll_rw_block(REQ_OP_READ, 0, 1, &bh);
1301                 wait_on_buffer(bh);
1302                 /* Uhhuh. Read error. Complain and punt. */
1303                 if (!buffer_uptodate(bh))
1304                         goto unlock;
1305                 err = 0;
1306         }
1307
1308         if (gfs2_is_jdata(ip))
1309                 gfs2_trans_add_data(ip->i_gl, bh);
1310         else
1311                 gfs2_ordered_add_inode(ip);
1312
1313         zero_user(page, offset, length);
1314         mark_buffer_dirty(bh);
1315 unlock:
1316         unlock_page(page);
1317         put_page(page);
1318         return err;
1319 }
1320
1321 #define GFS2_JTRUNC_REVOKES 8192
1322
1323 /**
1324  * gfs2_journaled_truncate - Wrapper for truncate_pagecache for jdata files
1325  * @inode: The inode being truncated
1326  * @oldsize: The original (larger) size
1327  * @newsize: The new smaller size
1328  *
1329  * With jdata files, we have to journal a revoke for each block which is
1330  * truncated. As a result, we need to split this into separate transactions
1331  * if the number of pages being truncated gets too large.
1332  */
1333
1334 static int gfs2_journaled_truncate(struct inode *inode, u64 oldsize, u64 newsize)
1335 {
1336         struct gfs2_sbd *sdp = GFS2_SB(inode);
1337         u64 max_chunk = GFS2_JTRUNC_REVOKES * sdp->sd_vfs->s_blocksize;
1338         u64 chunk;
1339         int error;
1340
1341         while (oldsize != newsize) {
1342                 struct gfs2_trans *tr;
1343                 unsigned int offs;
1344
1345                 chunk = oldsize - newsize;
1346                 if (chunk > max_chunk)
1347                         chunk = max_chunk;
1348
1349                 offs = oldsize & ~PAGE_MASK;
1350                 if (offs && chunk > PAGE_SIZE)
1351                         chunk = offs + ((chunk - offs) & PAGE_MASK);
1352
1353                 truncate_pagecache(inode, oldsize - chunk);
1354                 oldsize -= chunk;
1355
1356                 tr = current->journal_info;
1357                 if (!test_bit(TR_TOUCHED, &tr->tr_flags))
1358                         continue;
1359
1360                 gfs2_trans_end(sdp);
1361                 error = gfs2_trans_begin(sdp, RES_DINODE, GFS2_JTRUNC_REVOKES);
1362                 if (error)
1363                         return error;
1364         }
1365
1366         return 0;
1367 }
1368
1369 static int trunc_start(struct inode *inode, u64 newsize)
1370 {
1371         struct gfs2_inode *ip = GFS2_I(inode);
1372         struct gfs2_sbd *sdp = GFS2_SB(inode);
1373         struct buffer_head *dibh = NULL;
1374         int journaled = gfs2_is_jdata(ip);
1375         u64 oldsize = inode->i_size;
1376         int error;
1377
1378         if (journaled)
1379                 error = gfs2_trans_begin(sdp, RES_DINODE + RES_JDATA, GFS2_JTRUNC_REVOKES);
1380         else
1381                 error = gfs2_trans_begin(sdp, RES_DINODE, 0);
1382         if (error)
1383                 return error;
1384
1385         error = gfs2_meta_inode_buffer(ip, &dibh);
1386         if (error)
1387                 goto out;
1388
1389         gfs2_trans_add_meta(ip->i_gl, dibh);
1390
1391         if (gfs2_is_stuffed(ip)) {
1392                 gfs2_buffer_clear_tail(dibh, sizeof(struct gfs2_dinode) + newsize);
1393         } else {
1394                 unsigned int blocksize = i_blocksize(inode);
1395                 unsigned int offs = newsize & (blocksize - 1);
1396                 if (offs) {
1397                         error = gfs2_block_zero_range(inode, newsize,
1398                                                       blocksize - offs);
1399                         if (error)
1400                                 goto out;
1401                 }
1402                 ip->i_diskflags |= GFS2_DIF_TRUNC_IN_PROG;
1403         }
1404
1405         i_size_write(inode, newsize);
1406         ip->i_inode.i_mtime = ip->i_inode.i_ctime = current_time(&ip->i_inode);
1407         gfs2_dinode_out(ip, dibh->b_data);
1408
1409         if (journaled)
1410                 error = gfs2_journaled_truncate(inode, oldsize, newsize);
1411         else
1412                 truncate_pagecache(inode, newsize);
1413
1414 out:
1415         brelse(dibh);
1416         if (current->journal_info)
1417                 gfs2_trans_end(sdp);
1418         return error;
1419 }
1420
1421 int gfs2_iomap_get_alloc(struct inode *inode, loff_t pos, loff_t length,
1422                          struct iomap *iomap)
1423 {
1424         struct metapath mp = { .mp_aheight = 1, };
1425         int ret;
1426
1427         ret = gfs2_iomap_get(inode, pos, length, IOMAP_WRITE, iomap, &mp);
1428         if (!ret && iomap->type == IOMAP_HOLE)
1429                 ret = gfs2_iomap_alloc(inode, iomap, IOMAP_WRITE, &mp);
1430         release_metapath(&mp);
1431         return ret;
1432 }
1433
1434 /**
1435  * sweep_bh_for_rgrps - find an rgrp in a meta buffer and free blocks therein
1436  * @ip: inode
1437  * @rg_gh: holder of resource group glock
1438  * @bh: buffer head to sweep
1439  * @start: starting point in bh
1440  * @end: end point in bh
1441  * @meta: true if bh points to metadata (rather than data)
1442  * @btotal: place to keep count of total blocks freed
1443  *
1444  * We sweep a metadata buffer (provided by the metapath) for blocks we need to
1445  * free, and free them all. However, we do it one rgrp at a time. If this
1446  * block has references to multiple rgrps, we break it into individual
1447  * transactions. This allows other processes to use the rgrps while we're
1448  * focused on a single one, for better concurrency / performance.
1449  * At every transaction boundary, we rewrite the inode into the journal.
1450  * That way the bitmaps are kept consistent with the inode and we can recover
1451  * if we're interrupted by power-outages.
1452  *
1453  * Returns: 0, or return code if an error occurred.
1454  *          *btotal has the total number of blocks freed
1455  */
1456 static int sweep_bh_for_rgrps(struct gfs2_inode *ip, struct gfs2_holder *rd_gh,
1457                               struct buffer_head *bh, __be64 *start, __be64 *end,
1458                               bool meta, u32 *btotal)
1459 {
1460         struct gfs2_sbd *sdp = GFS2_SB(&ip->i_inode);
1461         struct gfs2_rgrpd *rgd;
1462         struct gfs2_trans *tr;
1463         __be64 *p;
1464         int blks_outside_rgrp;
1465         u64 bn, bstart, isize_blks;
1466         s64 blen; /* needs to be s64 or gfs2_add_inode_blocks breaks */
1467         int ret = 0;
1468         bool buf_in_tr = false; /* buffer was added to transaction */
1469
1470 more_rgrps:
1471         rgd = NULL;
1472         if (gfs2_holder_initialized(rd_gh)) {
1473                 rgd = gfs2_glock2rgrp(rd_gh->gh_gl);
1474                 gfs2_assert_withdraw(sdp,
1475                              gfs2_glock_is_locked_by_me(rd_gh->gh_gl));
1476         }
1477         blks_outside_rgrp = 0;
1478         bstart = 0;
1479         blen = 0;
1480
1481         for (p = start; p < end; p++) {
1482                 if (!*p)
1483                         continue;
1484                 bn = be64_to_cpu(*p);
1485
1486                 if (rgd) {
1487                         if (!rgrp_contains_block(rgd, bn)) {
1488                                 blks_outside_rgrp++;
1489                                 continue;
1490                         }
1491                 } else {
1492                         rgd = gfs2_blk2rgrpd(sdp, bn, true);
1493                         if (unlikely(!rgd)) {
1494                                 ret = -EIO;
1495                                 goto out;
1496                         }
1497                         ret = gfs2_glock_nq_init(rgd->rd_gl, LM_ST_EXCLUSIVE,
1498                                                  0, rd_gh);
1499                         if (ret)
1500                                 goto out;
1501
1502                         /* Must be done with the rgrp glock held: */
1503                         if (gfs2_rs_active(&ip->i_res) &&
1504                             rgd == ip->i_res.rs_rbm.rgd)
1505                                 gfs2_rs_deltree(&ip->i_res);
1506                 }
1507
1508                 /* The size of our transactions will be unknown until we
1509                    actually process all the metadata blocks that relate to
1510                    the rgrp. So we estimate. We know it can't be more than
1511                    the dinode's i_blocks and we don't want to exceed the
1512                    journal flush threshold, sd_log_thresh2. */
1513                 if (current->journal_info == NULL) {
1514                         unsigned int jblocks_rqsted, revokes;
1515
1516                         jblocks_rqsted = rgd->rd_length + RES_DINODE +
1517                                 RES_INDIRECT;
1518                         isize_blks = gfs2_get_inode_blocks(&ip->i_inode);
1519                         if (isize_blks > atomic_read(&sdp->sd_log_thresh2))
1520                                 jblocks_rqsted +=
1521                                         atomic_read(&sdp->sd_log_thresh2);
1522                         else
1523                                 jblocks_rqsted += isize_blks;
1524                         revokes = jblocks_rqsted;
1525                         if (meta)
1526                                 revokes += end - start;
1527                         else if (ip->i_depth)
1528                                 revokes += sdp->sd_inptrs;
1529                         ret = gfs2_trans_begin(sdp, jblocks_rqsted, revokes);
1530                         if (ret)
1531                                 goto out_unlock;
1532                         down_write(&ip->i_rw_mutex);
1533                 }
1534                 /* check if we will exceed the transaction blocks requested */
1535                 tr = current->journal_info;
1536                 if (tr->tr_num_buf_new + RES_STATFS +
1537                     RES_QUOTA >= atomic_read(&sdp->sd_log_thresh2)) {
1538                         /* We set blks_outside_rgrp to ensure the loop will
1539                            be repeated for the same rgrp, but with a new
1540                            transaction. */
1541                         blks_outside_rgrp++;
1542                         /* This next part is tricky. If the buffer was added
1543                            to the transaction, we've already set some block
1544                            pointers to 0, so we better follow through and free
1545                            them, or we will introduce corruption (so break).
1546                            This may be impossible, or at least rare, but I
1547                            decided to cover the case regardless.
1548
1549                            If the buffer was not added to the transaction
1550                            (this call), doing so would exceed our transaction
1551                            size, so we need to end the transaction and start a
1552                            new one (so goto). */
1553
1554                         if (buf_in_tr)
1555                                 break;
1556                         goto out_unlock;
1557                 }
1558
1559                 gfs2_trans_add_meta(ip->i_gl, bh);
1560                 buf_in_tr = true;
1561                 *p = 0;
1562                 if (bstart + blen == bn) {
1563                         blen++;
1564                         continue;
1565                 }
1566                 if (bstart) {
1567                         __gfs2_free_blocks(ip, bstart, (u32)blen, meta);
1568                         (*btotal) += blen;
1569                         gfs2_add_inode_blocks(&ip->i_inode, -blen);
1570                 }
1571                 bstart = bn;
1572                 blen = 1;
1573         }
1574         if (bstart) {
1575                 __gfs2_free_blocks(ip, bstart, (u32)blen, meta);
1576                 (*btotal) += blen;
1577                 gfs2_add_inode_blocks(&ip->i_inode, -blen);
1578         }
1579 out_unlock:
1580         if (!ret && blks_outside_rgrp) { /* If buffer still has non-zero blocks
1581                                             outside the rgrp we just processed,
1582                                             do it all over again. */
1583                 if (current->journal_info) {
1584                         struct buffer_head *dibh;
1585
1586                         ret = gfs2_meta_inode_buffer(ip, &dibh);
1587                         if (ret)
1588                                 goto out;
1589
1590                         /* Every transaction boundary, we rewrite the dinode
1591                            to keep its di_blocks current in case of failure. */
1592                         ip->i_inode.i_mtime = ip->i_inode.i_ctime =
1593                                 current_time(&ip->i_inode);
1594                         gfs2_trans_add_meta(ip->i_gl, dibh);
1595                         gfs2_dinode_out(ip, dibh->b_data);
1596                         brelse(dibh);
1597                         up_write(&ip->i_rw_mutex);
1598                         gfs2_trans_end(sdp);
1599                 }
1600                 gfs2_glock_dq_uninit(rd_gh);
1601                 cond_resched();
1602                 goto more_rgrps;
1603         }
1604 out:
1605         return ret;
1606 }
1607
1608 static bool mp_eq_to_hgt(struct metapath *mp, __u16 *list, unsigned int h)
1609 {
1610         if (memcmp(mp->mp_list, list, h * sizeof(mp->mp_list[0])))
1611                 return false;
1612         return true;
1613 }
1614
1615 /**
1616  * find_nonnull_ptr - find a non-null pointer given a metapath and height
1617  * @mp: starting metapath
1618  * @h: desired height to search
1619  *
1620  * Assumes the metapath is valid (with buffers) out to height h.
1621  * Returns: true if a non-null pointer was found in the metapath buffer
1622  *          false if all remaining pointers are NULL in the buffer
1623  */
1624 static bool find_nonnull_ptr(struct gfs2_sbd *sdp, struct metapath *mp,
1625                              unsigned int h,
1626                              __u16 *end_list, unsigned int end_aligned)
1627 {
1628         struct buffer_head *bh = mp->mp_bh[h];
1629         __be64 *first, *ptr, *end;
1630
1631         first = metaptr1(h, mp);
1632         ptr = first + mp->mp_list[h];
1633         end = (__be64 *)(bh->b_data + bh->b_size);
1634         if (end_list && mp_eq_to_hgt(mp, end_list, h)) {
1635                 bool keep_end = h < end_aligned;
1636                 end = first + end_list[h] + keep_end;
1637         }
1638
1639         while (ptr < end) {
1640                 if (*ptr) { /* if we have a non-null pointer */
1641                         mp->mp_list[h] = ptr - first;
1642                         h++;
1643                         if (h < GFS2_MAX_META_HEIGHT)
1644                                 mp->mp_list[h] = 0;
1645                         return true;
1646                 }
1647                 ptr++;
1648         }
1649         return false;
1650 }
1651
1652 enum dealloc_states {
1653         DEALLOC_MP_FULL = 0,    /* Strip a metapath with all buffers read in */
1654         DEALLOC_MP_LOWER = 1,   /* lower the metapath strip height */
1655         DEALLOC_FILL_MP = 2,  /* Fill in the metapath to the given height. */
1656         DEALLOC_DONE = 3,       /* process complete */
1657 };
1658
1659 static inline void
1660 metapointer_range(struct metapath *mp, int height,
1661                   __u16 *start_list, unsigned int start_aligned,
1662                   __u16 *end_list, unsigned int end_aligned,
1663                   __be64 **start, __be64 **end)
1664 {
1665         struct buffer_head *bh = mp->mp_bh[height];
1666         __be64 *first;
1667
1668         first = metaptr1(height, mp);
1669         *start = first;
1670         if (mp_eq_to_hgt(mp, start_list, height)) {
1671                 bool keep_start = height < start_aligned;
1672                 *start = first + start_list[height] + keep_start;
1673         }
1674         *end = (__be64 *)(bh->b_data + bh->b_size);
1675         if (end_list && mp_eq_to_hgt(mp, end_list, height)) {
1676                 bool keep_end = height < end_aligned;
1677                 *end = first + end_list[height] + keep_end;
1678         }
1679 }
1680
1681 static inline bool walk_done(struct gfs2_sbd *sdp,
1682                              struct metapath *mp, int height,
1683                              __u16 *end_list, unsigned int end_aligned)
1684 {
1685         __u16 end;
1686
1687         if (end_list) {
1688                 bool keep_end = height < end_aligned;
1689                 if (!mp_eq_to_hgt(mp, end_list, height))
1690                         return false;
1691                 end = end_list[height] + keep_end;
1692         } else
1693                 end = (height > 0) ? sdp->sd_inptrs : sdp->sd_diptrs;
1694         return mp->mp_list[height] >= end;
1695 }
1696
1697 /**
1698  * punch_hole - deallocate blocks in a file
1699  * @ip: inode to truncate
1700  * @offset: the start of the hole
1701  * @length: the size of the hole (or 0 for truncate)
1702  *
1703  * Punch a hole into a file or truncate a file at a given position.  This
1704  * function operates in whole blocks (@offset and @length are rounded
1705  * accordingly); partially filled blocks must be cleared otherwise.
1706  *
1707  * This function works from the bottom up, and from the right to the left. In
1708  * other words, it strips off the highest layer (data) before stripping any of
1709  * the metadata. Doing it this way is best in case the operation is interrupted
1710  * by power failure, etc.  The dinode is rewritten in every transaction to
1711  * guarantee integrity.
1712  */
1713 static int punch_hole(struct gfs2_inode *ip, u64 offset, u64 length)
1714 {
1715         struct gfs2_sbd *sdp = GFS2_SB(&ip->i_inode);
1716         u64 maxsize = sdp->sd_heightsize[ip->i_height];
1717         struct metapath mp = {};
1718         struct buffer_head *dibh, *bh;
1719         struct gfs2_holder rd_gh;
1720         unsigned int bsize_shift = sdp->sd_sb.sb_bsize_shift;
1721         u64 lblock = (offset + (1 << bsize_shift) - 1) >> bsize_shift;
1722         __u16 start_list[GFS2_MAX_META_HEIGHT];
1723         __u16 __end_list[GFS2_MAX_META_HEIGHT], *end_list = NULL;
1724         unsigned int start_aligned, uninitialized_var(end_aligned);
1725         unsigned int strip_h = ip->i_height - 1;
1726         u32 btotal = 0;
1727         int ret, state;
1728         int mp_h; /* metapath buffers are read in to this height */
1729         u64 prev_bnr = 0;
1730         __be64 *start, *end;
1731
1732         if (offset >= maxsize) {
1733                 /*
1734                  * The starting point lies beyond the allocated meta-data;
1735                  * there are no blocks do deallocate.
1736                  */
1737                 return 0;
1738         }
1739
1740         /*
1741          * The start position of the hole is defined by lblock, start_list, and
1742          * start_aligned.  The end position of the hole is defined by lend,
1743          * end_list, and end_aligned.
1744          *
1745          * start_aligned and end_aligned define down to which height the start
1746          * and end positions are aligned to the metadata tree (i.e., the
1747          * position is a multiple of the metadata granularity at the height
1748          * above).  This determines at which heights additional meta pointers
1749          * needs to be preserved for the remaining data.
1750          */
1751
1752         if (length) {
1753                 u64 end_offset = offset + length;
1754                 u64 lend;
1755
1756                 /*
1757                  * Clip the end at the maximum file size for the given height:
1758                  * that's how far the metadata goes; files bigger than that
1759                  * will have additional layers of indirection.
1760                  */
1761                 if (end_offset > maxsize)
1762                         end_offset = maxsize;
1763                 lend = end_offset >> bsize_shift;
1764
1765                 if (lblock >= lend)
1766                         return 0;
1767
1768                 find_metapath(sdp, lend, &mp, ip->i_height);
1769                 end_list = __end_list;
1770                 memcpy(end_list, mp.mp_list, sizeof(mp.mp_list));
1771
1772                 for (mp_h = ip->i_height - 1; mp_h > 0; mp_h--) {
1773                         if (end_list[mp_h])
1774                                 break;
1775                 }
1776                 end_aligned = mp_h;
1777         }
1778
1779         find_metapath(sdp, lblock, &mp, ip->i_height);
1780         memcpy(start_list, mp.mp_list, sizeof(start_list));
1781
1782         for (mp_h = ip->i_height - 1; mp_h > 0; mp_h--) {
1783                 if (start_list[mp_h])
1784                         break;
1785         }
1786         start_aligned = mp_h;
1787
1788         ret = gfs2_meta_inode_buffer(ip, &dibh);
1789         if (ret)
1790                 return ret;
1791
1792         mp.mp_bh[0] = dibh;
1793         ret = lookup_metapath(ip, &mp);
1794         if (ret)
1795                 goto out_metapath;
1796
1797         /* issue read-ahead on metadata */
1798         for (mp_h = 0; mp_h < mp.mp_aheight - 1; mp_h++) {
1799                 metapointer_range(&mp, mp_h, start_list, start_aligned,
1800                                   end_list, end_aligned, &start, &end);
1801                 gfs2_metapath_ra(ip->i_gl, start, end);
1802         }
1803
1804         if (mp.mp_aheight == ip->i_height)
1805                 state = DEALLOC_MP_FULL; /* We have a complete metapath */
1806         else
1807                 state = DEALLOC_FILL_MP; /* deal with partial metapath */
1808
1809         ret = gfs2_rindex_update(sdp);
1810         if (ret)
1811                 goto out_metapath;
1812
1813         ret = gfs2_quota_hold(ip, NO_UID_QUOTA_CHANGE, NO_GID_QUOTA_CHANGE);
1814         if (ret)
1815                 goto out_metapath;
1816         gfs2_holder_mark_uninitialized(&rd_gh);
1817
1818         mp_h = strip_h;
1819
1820         while (state != DEALLOC_DONE) {
1821                 switch (state) {
1822                 /* Truncate a full metapath at the given strip height.
1823                  * Note that strip_h == mp_h in order to be in this state. */
1824                 case DEALLOC_MP_FULL:
1825                         bh = mp.mp_bh[mp_h];
1826                         gfs2_assert_withdraw(sdp, bh);
1827                         if (gfs2_assert_withdraw(sdp,
1828                                                  prev_bnr != bh->b_blocknr)) {
1829                                 printk(KERN_EMERG "GFS2: fsid=%s:inode %llu, "
1830                                        "block:%llu, i_h:%u, s_h:%u, mp_h:%u\n",
1831                                        sdp->sd_fsname,
1832                                        (unsigned long long)ip->i_no_addr,
1833                                        prev_bnr, ip->i_height, strip_h, mp_h);
1834                         }
1835                         prev_bnr = bh->b_blocknr;
1836
1837                         if (gfs2_metatype_check(sdp, bh,
1838                                                 (mp_h ? GFS2_METATYPE_IN :
1839                                                         GFS2_METATYPE_DI))) {
1840                                 ret = -EIO;
1841                                 goto out;
1842                         }
1843
1844                         /*
1845                          * Below, passing end_aligned as 0 gives us the
1846                          * metapointer range excluding the end point: the end
1847                          * point is the first metapath we must not deallocate!
1848                          */
1849
1850                         metapointer_range(&mp, mp_h, start_list, start_aligned,
1851                                           end_list, 0 /* end_aligned */,
1852                                           &start, &end);
1853                         ret = sweep_bh_for_rgrps(ip, &rd_gh, mp.mp_bh[mp_h],
1854                                                  start, end,
1855                                                  mp_h != ip->i_height - 1,
1856                                                  &btotal);
1857
1858                         /* If we hit an error or just swept dinode buffer,
1859                            just exit. */
1860                         if (ret || !mp_h) {
1861                                 state = DEALLOC_DONE;
1862                                 break;
1863                         }
1864                         state = DEALLOC_MP_LOWER;
1865                         break;
1866
1867                 /* lower the metapath strip height */
1868                 case DEALLOC_MP_LOWER:
1869                         /* We're done with the current buffer, so release it,
1870                            unless it's the dinode buffer. Then back up to the
1871                            previous pointer. */
1872                         if (mp_h) {
1873                                 brelse(mp.mp_bh[mp_h]);
1874                                 mp.mp_bh[mp_h] = NULL;
1875                         }
1876                         /* If we can't get any lower in height, we've stripped
1877                            off all we can. Next step is to back up and start
1878                            stripping the previous level of metadata. */
1879                         if (mp_h == 0) {
1880                                 strip_h--;
1881                                 memcpy(mp.mp_list, start_list, sizeof(start_list));
1882                                 mp_h = strip_h;
1883                                 state = DEALLOC_FILL_MP;
1884                                 break;
1885                         }
1886                         mp.mp_list[mp_h] = 0;
1887                         mp_h--; /* search one metadata height down */
1888                         mp.mp_list[mp_h]++;
1889                         if (walk_done(sdp, &mp, mp_h, end_list, end_aligned))
1890                                 break;
1891                         /* Here we've found a part of the metapath that is not
1892                          * allocated. We need to search at that height for the
1893                          * next non-null pointer. */
1894                         if (find_nonnull_ptr(sdp, &mp, mp_h, end_list, end_aligned)) {
1895                                 state = DEALLOC_FILL_MP;
1896                                 mp_h++;
1897                         }
1898                         /* No more non-null pointers at this height. Back up
1899                            to the previous height and try again. */
1900                         break; /* loop around in the same state */
1901
1902                 /* Fill the metapath with buffers to the given height. */
1903                 case DEALLOC_FILL_MP:
1904                         /* Fill the buffers out to the current height. */
1905                         ret = fillup_metapath(ip, &mp, mp_h);
1906                         if (ret < 0)
1907                                 goto out;
1908
1909                         /* issue read-ahead on metadata */
1910                         if (mp.mp_aheight > 1) {
1911                                 for (; ret > 1; ret--) {
1912                                         metapointer_range(&mp, mp.mp_aheight - ret,
1913                                                           start_list, start_aligned,
1914                                                           end_list, end_aligned,
1915                                                           &start, &end);
1916                                         gfs2_metapath_ra(ip->i_gl, start, end);
1917                                 }
1918                         }
1919
1920                         /* If buffers found for the entire strip height */
1921                         if (mp.mp_aheight - 1 == strip_h) {
1922                                 state = DEALLOC_MP_FULL;
1923                                 break;
1924                         }
1925                         if (mp.mp_aheight < ip->i_height) /* We have a partial height */
1926                                 mp_h = mp.mp_aheight - 1;
1927
1928                         /* If we find a non-null block pointer, crawl a bit
1929                            higher up in the metapath and try again, otherwise
1930                            we need to look lower for a new starting point. */
1931                         if (find_nonnull_ptr(sdp, &mp, mp_h, end_list, end_aligned))
1932                                 mp_h++;
1933                         else
1934                                 state = DEALLOC_MP_LOWER;
1935                         break;
1936                 }
1937         }
1938
1939         if (btotal) {
1940                 if (current->journal_info == NULL) {
1941                         ret = gfs2_trans_begin(sdp, RES_DINODE + RES_STATFS +
1942                                                RES_QUOTA, 0);
1943                         if (ret)
1944                                 goto out;
1945                         down_write(&ip->i_rw_mutex);
1946                 }
1947                 gfs2_statfs_change(sdp, 0, +btotal, 0);
1948                 gfs2_quota_change(ip, -(s64)btotal, ip->i_inode.i_uid,
1949                                   ip->i_inode.i_gid);
1950                 ip->i_inode.i_mtime = ip->i_inode.i_ctime = current_time(&ip->i_inode);
1951                 gfs2_trans_add_meta(ip->i_gl, dibh);
1952                 gfs2_dinode_out(ip, dibh->b_data);
1953                 up_write(&ip->i_rw_mutex);
1954                 gfs2_trans_end(sdp);
1955         }
1956
1957 out:
1958         if (gfs2_holder_initialized(&rd_gh))
1959                 gfs2_glock_dq_uninit(&rd_gh);
1960         if (current->journal_info) {
1961                 up_write(&ip->i_rw_mutex);
1962                 gfs2_trans_end(sdp);
1963                 cond_resched();
1964         }
1965         gfs2_quota_unhold(ip);
1966 out_metapath:
1967         release_metapath(&mp);
1968         return ret;
1969 }
1970
1971 static int trunc_end(struct gfs2_inode *ip)
1972 {
1973         struct gfs2_sbd *sdp = GFS2_SB(&ip->i_inode);
1974         struct buffer_head *dibh;
1975         int error;
1976
1977         error = gfs2_trans_begin(sdp, RES_DINODE, 0);
1978         if (error)
1979                 return error;
1980
1981         down_write(&ip->i_rw_mutex);
1982
1983         error = gfs2_meta_inode_buffer(ip, &dibh);
1984         if (error)
1985                 goto out;
1986
1987         if (!i_size_read(&ip->i_inode)) {
1988                 ip->i_height = 0;
1989                 ip->i_goal = ip->i_no_addr;
1990                 gfs2_buffer_clear_tail(dibh, sizeof(struct gfs2_dinode));
1991                 gfs2_ordered_del_inode(ip);
1992         }
1993         ip->i_inode.i_mtime = ip->i_inode.i_ctime = current_time(&ip->i_inode);
1994         ip->i_diskflags &= ~GFS2_DIF_TRUNC_IN_PROG;
1995
1996         gfs2_trans_add_meta(ip->i_gl, dibh);
1997         gfs2_dinode_out(ip, dibh->b_data);
1998         brelse(dibh);
1999
2000 out:
2001         up_write(&ip->i_rw_mutex);
2002         gfs2_trans_end(sdp);
2003         return error;
2004 }
2005
2006 /**
2007  * do_shrink - make a file smaller
2008  * @inode: the inode
2009  * @newsize: the size to make the file
2010  *
2011  * Called with an exclusive lock on @inode. The @size must
2012  * be equal to or smaller than the current inode size.
2013  *
2014  * Returns: errno
2015  */
2016
2017 static int do_shrink(struct inode *inode, u64 newsize)
2018 {
2019         struct gfs2_inode *ip = GFS2_I(inode);
2020         int error;
2021
2022         error = trunc_start(inode, newsize);
2023         if (error < 0)
2024                 return error;
2025         if (gfs2_is_stuffed(ip))
2026                 return 0;
2027
2028         error = punch_hole(ip, newsize, 0);
2029         if (error == 0)
2030                 error = trunc_end(ip);
2031
2032         return error;
2033 }
2034
2035 void gfs2_trim_blocks(struct inode *inode)
2036 {
2037         int ret;
2038
2039         ret = do_shrink(inode, inode->i_size);
2040         WARN_ON(ret != 0);
2041 }
2042
2043 /**
2044  * do_grow - Touch and update inode size
2045  * @inode: The inode
2046  * @size: The new size
2047  *
2048  * This function updates the timestamps on the inode and
2049  * may also increase the size of the inode. This function
2050  * must not be called with @size any smaller than the current
2051  * inode size.
2052  *
2053  * Although it is not strictly required to unstuff files here,
2054  * earlier versions of GFS2 have a bug in the stuffed file reading
2055  * code which will result in a buffer overrun if the size is larger
2056  * than the max stuffed file size. In order to prevent this from
2057  * occurring, such files are unstuffed, but in other cases we can
2058  * just update the inode size directly.
2059  *
2060  * Returns: 0 on success, or -ve on error
2061  */
2062
2063 static int do_grow(struct inode *inode, u64 size)
2064 {
2065         struct gfs2_inode *ip = GFS2_I(inode);
2066         struct gfs2_sbd *sdp = GFS2_SB(inode);
2067         struct gfs2_alloc_parms ap = { .target = 1, };
2068         struct buffer_head *dibh;
2069         int error;
2070         int unstuff = 0;
2071
2072         if (gfs2_is_stuffed(ip) && size > gfs2_max_stuffed_size(ip)) {
2073                 error = gfs2_quota_lock_check(ip, &ap);
2074                 if (error)
2075                         return error;
2076
2077                 error = gfs2_inplace_reserve(ip, &ap);
2078                 if (error)
2079                         goto do_grow_qunlock;
2080                 unstuff = 1;
2081         }
2082
2083         error = gfs2_trans_begin(sdp, RES_DINODE + RES_STATFS + RES_RG_BIT +
2084                                  (sdp->sd_args.ar_quota == GFS2_QUOTA_OFF ?
2085                                   0 : RES_QUOTA), 0);
2086         if (error)
2087                 goto do_grow_release;
2088
2089         if (unstuff) {
2090                 error = gfs2_unstuff_dinode(ip, NULL);
2091                 if (error)
2092                         goto do_end_trans;
2093         }
2094
2095         error = gfs2_meta_inode_buffer(ip, &dibh);
2096         if (error)
2097                 goto do_end_trans;
2098
2099         i_size_write(inode, size);
2100         ip->i_inode.i_mtime = ip->i_inode.i_ctime = current_time(&ip->i_inode);
2101         gfs2_trans_add_meta(ip->i_gl, dibh);
2102         gfs2_dinode_out(ip, dibh->b_data);
2103         brelse(dibh);
2104
2105 do_end_trans:
2106         gfs2_trans_end(sdp);
2107 do_grow_release:
2108         if (unstuff) {
2109                 gfs2_inplace_release(ip);
2110 do_grow_qunlock:
2111                 gfs2_quota_unlock(ip);
2112         }
2113         return error;
2114 }
2115
2116 /**
2117  * gfs2_setattr_size - make a file a given size
2118  * @inode: the inode
2119  * @newsize: the size to make the file
2120  *
2121  * The file size can grow, shrink, or stay the same size. This
2122  * is called holding i_rwsem and an exclusive glock on the inode
2123  * in question.
2124  *
2125  * Returns: errno
2126  */
2127
2128 int gfs2_setattr_size(struct inode *inode, u64 newsize)
2129 {
2130         struct gfs2_inode *ip = GFS2_I(inode);
2131         int ret;
2132
2133         BUG_ON(!S_ISREG(inode->i_mode));
2134
2135         ret = inode_newsize_ok(inode, newsize);
2136         if (ret)
2137                 return ret;
2138
2139         inode_dio_wait(inode);
2140
2141         ret = gfs2_rsqa_alloc(ip);
2142         if (ret)
2143                 goto out;
2144
2145         if (newsize >= inode->i_size) {
2146                 ret = do_grow(inode, newsize);
2147                 goto out;
2148         }
2149
2150         ret = do_shrink(inode, newsize);
2151 out:
2152         gfs2_rsqa_delete(ip, NULL);
2153         return ret;
2154 }
2155
2156 int gfs2_truncatei_resume(struct gfs2_inode *ip)
2157 {
2158         int error;
2159         error = punch_hole(ip, i_size_read(&ip->i_inode), 0);
2160         if (!error)
2161                 error = trunc_end(ip);
2162         return error;
2163 }
2164
2165 int gfs2_file_dealloc(struct gfs2_inode *ip)
2166 {
2167         return punch_hole(ip, 0, 0);
2168 }
2169
2170 /**
2171  * gfs2_free_journal_extents - Free cached journal bmap info
2172  * @jd: The journal
2173  *
2174  */
2175
2176 void gfs2_free_journal_extents(struct gfs2_jdesc *jd)
2177 {
2178         struct gfs2_journal_extent *jext;
2179
2180         while(!list_empty(&jd->extent_list)) {
2181                 jext = list_entry(jd->extent_list.next, struct gfs2_journal_extent, list);
2182                 list_del(&jext->list);
2183                 kfree(jext);
2184         }
2185 }
2186
2187 /**
2188  * gfs2_add_jextent - Add or merge a new extent to extent cache
2189  * @jd: The journal descriptor
2190  * @lblock: The logical block at start of new extent
2191  * @dblock: The physical block at start of new extent
2192  * @blocks: Size of extent in fs blocks
2193  *
2194  * Returns: 0 on success or -ENOMEM
2195  */
2196
2197 static int gfs2_add_jextent(struct gfs2_jdesc *jd, u64 lblock, u64 dblock, u64 blocks)
2198 {
2199         struct gfs2_journal_extent *jext;
2200
2201         if (!list_empty(&jd->extent_list)) {
2202                 jext = list_entry(jd->extent_list.prev, struct gfs2_journal_extent, list);
2203                 if ((jext->dblock + jext->blocks) == dblock) {
2204                         jext->blocks += blocks;
2205                         return 0;
2206                 }
2207         }
2208
2209         jext = kzalloc(sizeof(struct gfs2_journal_extent), GFP_NOFS);
2210         if (jext == NULL)
2211                 return -ENOMEM;
2212         jext->dblock = dblock;
2213         jext->lblock = lblock;
2214         jext->blocks = blocks;
2215         list_add_tail(&jext->list, &jd->extent_list);
2216         jd->nr_extents++;
2217         return 0;
2218 }
2219
2220 /**
2221  * gfs2_map_journal_extents - Cache journal bmap info
2222  * @sdp: The super block
2223  * @jd: The journal to map
2224  *
2225  * Create a reusable "extent" mapping from all logical
2226  * blocks to all physical blocks for the given journal.  This will save
2227  * us time when writing journal blocks.  Most journals will have only one
2228  * extent that maps all their logical blocks.  That's because gfs2.mkfs
2229  * arranges the journal blocks sequentially to maximize performance.
2230  * So the extent would map the first block for the entire file length.
2231  * However, gfs2_jadd can happen while file activity is happening, so
2232  * those journals may not be sequential.  Less likely is the case where
2233  * the users created their own journals by mounting the metafs and
2234  * laying it out.  But it's still possible.  These journals might have
2235  * several extents.
2236  *
2237  * Returns: 0 on success, or error on failure
2238  */
2239
2240 int gfs2_map_journal_extents(struct gfs2_sbd *sdp, struct gfs2_jdesc *jd)
2241 {
2242         u64 lblock = 0;
2243         u64 lblock_stop;
2244         struct gfs2_inode *ip = GFS2_I(jd->jd_inode);
2245         struct buffer_head bh;
2246         unsigned int shift = sdp->sd_sb.sb_bsize_shift;
2247         u64 size;
2248         int rc;
2249
2250         lblock_stop = i_size_read(jd->jd_inode) >> shift;
2251         size = (lblock_stop - lblock) << shift;
2252         jd->nr_extents = 0;
2253         WARN_ON(!list_empty(&jd->extent_list));
2254
2255         do {
2256                 bh.b_state = 0;
2257                 bh.b_blocknr = 0;
2258                 bh.b_size = size;
2259                 rc = gfs2_block_map(jd->jd_inode, lblock, &bh, 0);
2260                 if (rc || !buffer_mapped(&bh))
2261                         goto fail;
2262                 rc = gfs2_add_jextent(jd, lblock, bh.b_blocknr, bh.b_size >> shift);
2263                 if (rc)
2264                         goto fail;
2265                 size -= bh.b_size;
2266                 lblock += (bh.b_size >> ip->i_inode.i_blkbits);
2267         } while(size > 0);
2268
2269         fs_info(sdp, "journal %d mapped with %u extents\n", jd->jd_jid,
2270                 jd->nr_extents);
2271         return 0;
2272
2273 fail:
2274         fs_warn(sdp, "error %d mapping journal %u at offset %llu (extent %u)\n",
2275                 rc, jd->jd_jid,
2276                 (unsigned long long)(i_size_read(jd->jd_inode) - size),
2277                 jd->nr_extents);
2278         fs_warn(sdp, "bmap=%d lblock=%llu block=%llu, state=0x%08lx, size=%llu\n",
2279                 rc, (unsigned long long)lblock, (unsigned long long)bh.b_blocknr,
2280                 bh.b_state, (unsigned long long)bh.b_size);
2281         gfs2_free_journal_extents(jd);
2282         return rc;
2283 }
2284
2285 /**
2286  * gfs2_write_alloc_required - figure out if a write will require an allocation
2287  * @ip: the file being written to
2288  * @offset: the offset to write to
2289  * @len: the number of bytes being written
2290  *
2291  * Returns: 1 if an alloc is required, 0 otherwise
2292  */
2293
2294 int gfs2_write_alloc_required(struct gfs2_inode *ip, u64 offset,
2295                               unsigned int len)
2296 {
2297         struct gfs2_sbd *sdp = GFS2_SB(&ip->i_inode);
2298         struct buffer_head bh;
2299         unsigned int shift;
2300         u64 lblock, lblock_stop, size;
2301         u64 end_of_file;
2302
2303         if (!len)
2304                 return 0;
2305
2306         if (gfs2_is_stuffed(ip)) {
2307                 if (offset + len > gfs2_max_stuffed_size(ip))
2308                         return 1;
2309                 return 0;
2310         }
2311
2312         shift = sdp->sd_sb.sb_bsize_shift;
2313         BUG_ON(gfs2_is_dir(ip));
2314         end_of_file = (i_size_read(&ip->i_inode) + sdp->sd_sb.sb_bsize - 1) >> shift;
2315         lblock = offset >> shift;
2316         lblock_stop = (offset + len + sdp->sd_sb.sb_bsize - 1) >> shift;
2317         if (lblock_stop > end_of_file)
2318                 return 1;
2319
2320         size = (lblock_stop - lblock) << shift;
2321         do {
2322                 bh.b_state = 0;
2323                 bh.b_size = size;
2324                 gfs2_block_map(&ip->i_inode, lblock, &bh, 0);
2325                 if (!buffer_mapped(&bh))
2326                         return 1;
2327                 size -= bh.b_size;
2328                 lblock += (bh.b_size >> ip->i_inode.i_blkbits);
2329         } while(size > 0);
2330
2331         return 0;
2332 }
2333
2334 static int stuffed_zero_range(struct inode *inode, loff_t offset, loff_t length)
2335 {
2336         struct gfs2_inode *ip = GFS2_I(inode);
2337         struct buffer_head *dibh;
2338         int error;
2339
2340         if (offset >= inode->i_size)
2341                 return 0;
2342         if (offset + length > inode->i_size)
2343                 length = inode->i_size - offset;
2344
2345         error = gfs2_meta_inode_buffer(ip, &dibh);
2346         if (error)
2347                 return error;
2348         gfs2_trans_add_meta(ip->i_gl, dibh);
2349         memset(dibh->b_data + sizeof(struct gfs2_dinode) + offset, 0,
2350                length);
2351         brelse(dibh);
2352         return 0;
2353 }
2354
2355 static int gfs2_journaled_truncate_range(struct inode *inode, loff_t offset,
2356                                          loff_t length)
2357 {
2358         struct gfs2_sbd *sdp = GFS2_SB(inode);
2359         loff_t max_chunk = GFS2_JTRUNC_REVOKES * sdp->sd_vfs->s_blocksize;
2360         int error;
2361
2362         while (length) {
2363                 struct gfs2_trans *tr;
2364                 loff_t chunk;
2365                 unsigned int offs;
2366
2367                 chunk = length;
2368                 if (chunk > max_chunk)
2369                         chunk = max_chunk;
2370
2371                 offs = offset & ~PAGE_MASK;
2372                 if (offs && chunk > PAGE_SIZE)
2373                         chunk = offs + ((chunk - offs) & PAGE_MASK);
2374
2375                 truncate_pagecache_range(inode, offset, chunk);
2376                 offset += chunk;
2377                 length -= chunk;
2378
2379                 tr = current->journal_info;
2380                 if (!test_bit(TR_TOUCHED, &tr->tr_flags))
2381                         continue;
2382
2383                 gfs2_trans_end(sdp);
2384                 error = gfs2_trans_begin(sdp, RES_DINODE, GFS2_JTRUNC_REVOKES);
2385                 if (error)
2386                         return error;
2387         }
2388         return 0;
2389 }
2390
2391 int __gfs2_punch_hole(struct file *file, loff_t offset, loff_t length)
2392 {
2393         struct inode *inode = file_inode(file);
2394         struct gfs2_inode *ip = GFS2_I(inode);
2395         struct gfs2_sbd *sdp = GFS2_SB(inode);
2396         int error;
2397
2398         if (gfs2_is_jdata(ip))
2399                 error = gfs2_trans_begin(sdp, RES_DINODE + 2 * RES_JDATA,
2400                                          GFS2_JTRUNC_REVOKES);
2401         else
2402                 error = gfs2_trans_begin(sdp, RES_DINODE, 0);
2403         if (error)
2404                 return error;
2405
2406         if (gfs2_is_stuffed(ip)) {
2407                 error = stuffed_zero_range(inode, offset, length);
2408                 if (error)
2409                         goto out;
2410         } else {
2411                 unsigned int start_off, end_len, blocksize;
2412
2413                 blocksize = i_blocksize(inode);
2414                 start_off = offset & (blocksize - 1);
2415                 end_len = (offset + length) & (blocksize - 1);
2416                 if (start_off) {
2417                         unsigned int len = length;
2418                         if (length > blocksize - start_off)
2419                                 len = blocksize - start_off;
2420                         error = gfs2_block_zero_range(inode, offset, len);
2421                         if (error)
2422                                 goto out;
2423                         if (start_off + length < blocksize)
2424                                 end_len = 0;
2425                 }
2426                 if (end_len) {
2427                         error = gfs2_block_zero_range(inode,
2428                                 offset + length - end_len, end_len);
2429                         if (error)
2430                                 goto out;
2431                 }
2432         }
2433
2434         if (gfs2_is_jdata(ip)) {
2435                 BUG_ON(!current->journal_info);
2436                 gfs2_journaled_truncate_range(inode, offset, length);
2437         } else
2438                 truncate_pagecache_range(inode, offset, offset + length - 1);
2439
2440         file_update_time(file);
2441         mark_inode_dirty(inode);
2442
2443         if (current->journal_info)
2444                 gfs2_trans_end(sdp);
2445
2446         if (!gfs2_is_stuffed(ip))
2447                 error = punch_hole(ip, offset, length);
2448
2449 out:
2450         if (current->journal_info)
2451                 gfs2_trans_end(sdp);
2452         return error;
2453 }