xref: /openbmc/linux/fs/gfs2/bmap.c (revision 8d191587)
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 "trace_gfs2.h"
32 
33 /* This doesn't need to be that large as max 64 bit pointers in a 4k
34  * block is 512, so __u16 is fine for that. It saves stack space to
35  * keep it small.
36  */
37 struct metapath {
38 	struct buffer_head *mp_bh[GFS2_MAX_META_HEIGHT];
39 	__u16 mp_list[GFS2_MAX_META_HEIGHT];
40 	int mp_fheight; /* find_metapath height */
41 	int mp_aheight; /* actual height (lookup height) */
42 };
43 
44 /**
45  * gfs2_unstuffer_page - unstuff a stuffed inode into a block cached by a page
46  * @ip: the inode
47  * @dibh: the dinode buffer
48  * @block: the block number that was allocated
49  * @page: The (optional) page. This is looked up if @page is NULL
50  *
51  * Returns: errno
52  */
53 
54 static int gfs2_unstuffer_page(struct gfs2_inode *ip, struct buffer_head *dibh,
55 			       u64 block, struct page *page)
56 {
57 	struct inode *inode = &ip->i_inode;
58 	struct buffer_head *bh;
59 	int release = 0;
60 
61 	if (!page || page->index) {
62 		page = find_or_create_page(inode->i_mapping, 0, GFP_NOFS);
63 		if (!page)
64 			return -ENOMEM;
65 		release = 1;
66 	}
67 
68 	if (!PageUptodate(page)) {
69 		void *kaddr = kmap(page);
70 		u64 dsize = i_size_read(inode);
71 
72 		if (dsize > (dibh->b_size - sizeof(struct gfs2_dinode)))
73 			dsize = dibh->b_size - sizeof(struct gfs2_dinode);
74 
75 		memcpy(kaddr, dibh->b_data + sizeof(struct gfs2_dinode), dsize);
76 		memset(kaddr + dsize, 0, PAGE_SIZE - dsize);
77 		kunmap(page);
78 
79 		SetPageUptodate(page);
80 	}
81 
82 	if (!page_has_buffers(page))
83 		create_empty_buffers(page, BIT(inode->i_blkbits),
84 				     BIT(BH_Uptodate));
85 
86 	bh = page_buffers(page);
87 
88 	if (!buffer_mapped(bh))
89 		map_bh(bh, inode->i_sb, block);
90 
91 	set_buffer_uptodate(bh);
92 	if (!gfs2_is_jdata(ip))
93 		mark_buffer_dirty(bh);
94 	if (!gfs2_is_writeback(ip))
95 		gfs2_trans_add_data(ip->i_gl, bh);
96 
97 	if (release) {
98 		unlock_page(page);
99 		put_page(page);
100 	}
101 
102 	return 0;
103 }
104 
105 /**
106  * gfs2_unstuff_dinode - Unstuff a dinode when the data has grown too big
107  * @ip: The GFS2 inode to unstuff
108  * @page: The (optional) page. This is looked up if the @page is NULL
109  *
110  * This routine unstuffs a dinode and returns it to a "normal" state such
111  * that the height can be grown in the traditional way.
112  *
113  * Returns: errno
114  */
115 
116 int gfs2_unstuff_dinode(struct gfs2_inode *ip, struct page *page)
117 {
118 	struct buffer_head *bh, *dibh;
119 	struct gfs2_dinode *di;
120 	u64 block = 0;
121 	int isdir = gfs2_is_dir(ip);
122 	int error;
123 
124 	down_write(&ip->i_rw_mutex);
125 
126 	error = gfs2_meta_inode_buffer(ip, &dibh);
127 	if (error)
128 		goto out;
129 
130 	if (i_size_read(&ip->i_inode)) {
131 		/* Get a free block, fill it with the stuffed data,
132 		   and write it out to disk */
133 
134 		unsigned int n = 1;
135 		error = gfs2_alloc_blocks(ip, &block, &n, 0, NULL);
136 		if (error)
137 			goto out_brelse;
138 		if (isdir) {
139 			gfs2_trans_add_unrevoke(GFS2_SB(&ip->i_inode), block, 1);
140 			error = gfs2_dir_get_new_buffer(ip, block, &bh);
141 			if (error)
142 				goto out_brelse;
143 			gfs2_buffer_copy_tail(bh, sizeof(struct gfs2_meta_header),
144 					      dibh, sizeof(struct gfs2_dinode));
145 			brelse(bh);
146 		} else {
147 			error = gfs2_unstuffer_page(ip, dibh, block, page);
148 			if (error)
149 				goto out_brelse;
150 		}
151 	}
152 
153 	/*  Set up the pointer to the new block  */
154 
155 	gfs2_trans_add_meta(ip->i_gl, dibh);
156 	di = (struct gfs2_dinode *)dibh->b_data;
157 	gfs2_buffer_clear_tail(dibh, sizeof(struct gfs2_dinode));
158 
159 	if (i_size_read(&ip->i_inode)) {
160 		*(__be64 *)(di + 1) = cpu_to_be64(block);
161 		gfs2_add_inode_blocks(&ip->i_inode, 1);
162 		di->di_blocks = cpu_to_be64(gfs2_get_inode_blocks(&ip->i_inode));
163 	}
164 
165 	ip->i_height = 1;
166 	di->di_height = cpu_to_be16(1);
167 
168 out_brelse:
169 	brelse(dibh);
170 out:
171 	up_write(&ip->i_rw_mutex);
172 	return error;
173 }
174 
175 
176 /**
177  * find_metapath - Find path through the metadata tree
178  * @sdp: The superblock
179  * @mp: The metapath to return the result in
180  * @block: The disk block to look up
181  * @height: The pre-calculated height of the metadata tree
182  *
183  *   This routine returns a struct metapath structure that defines a path
184  *   through the metadata of inode "ip" to get to block "block".
185  *
186  *   Example:
187  *   Given:  "ip" is a height 3 file, "offset" is 101342453, and this is a
188  *   filesystem with a blocksize of 4096.
189  *
190  *   find_metapath() would return a struct metapath structure set to:
191  *   mp_offset = 101342453, mp_height = 3, mp_list[0] = 0, mp_list[1] = 48,
192  *   and mp_list[2] = 165.
193  *
194  *   That means that in order to get to the block containing the byte at
195  *   offset 101342453, we would load the indirect block pointed to by pointer
196  *   0 in the dinode.  We would then load the indirect block pointed to by
197  *   pointer 48 in that indirect block.  We would then load the data block
198  *   pointed to by pointer 165 in that indirect block.
199  *
200  *             ----------------------------------------
201  *             | Dinode |                             |
202  *             |        |                            4|
203  *             |        |0 1 2 3 4 5                 9|
204  *             |        |                            6|
205  *             ----------------------------------------
206  *                       |
207  *                       |
208  *                       V
209  *             ----------------------------------------
210  *             | Indirect Block                       |
211  *             |                                     5|
212  *             |            4 4 4 4 4 5 5            1|
213  *             |0           5 6 7 8 9 0 1            2|
214  *             ----------------------------------------
215  *                                |
216  *                                |
217  *                                V
218  *             ----------------------------------------
219  *             | Indirect Block                       |
220  *             |                         1 1 1 1 1   5|
221  *             |                         6 6 6 6 6   1|
222  *             |0                        3 4 5 6 7   2|
223  *             ----------------------------------------
224  *                                           |
225  *                                           |
226  *                                           V
227  *             ----------------------------------------
228  *             | Data block containing offset         |
229  *             |            101342453                 |
230  *             |                                      |
231  *             |                                      |
232  *             ----------------------------------------
233  *
234  */
235 
236 static void find_metapath(const struct gfs2_sbd *sdp, u64 block,
237 			  struct metapath *mp, unsigned int height)
238 {
239 	unsigned int i;
240 
241 	mp->mp_fheight = height;
242 	for (i = height; i--;)
243 		mp->mp_list[i] = do_div(block, sdp->sd_inptrs);
244 }
245 
246 static inline unsigned int metapath_branch_start(const struct metapath *mp)
247 {
248 	if (mp->mp_list[0] == 0)
249 		return 2;
250 	return 1;
251 }
252 
253 /**
254  * metaptr1 - Return the first possible metadata pointer in a metapath buffer
255  * @height: The metadata height (0 = dinode)
256  * @mp: The metapath
257  */
258 static inline __be64 *metaptr1(unsigned int height, const struct metapath *mp)
259 {
260 	struct buffer_head *bh = mp->mp_bh[height];
261 	if (height == 0)
262 		return ((__be64 *)(bh->b_data + sizeof(struct gfs2_dinode)));
263 	return ((__be64 *)(bh->b_data + sizeof(struct gfs2_meta_header)));
264 }
265 
266 /**
267  * metapointer - Return pointer to start of metadata in a buffer
268  * @height: The metadata height (0 = dinode)
269  * @mp: The metapath
270  *
271  * Return a pointer to the block number of the next height of the metadata
272  * tree given a buffer containing the pointer to the current height of the
273  * metadata tree.
274  */
275 
276 static inline __be64 *metapointer(unsigned int height, const struct metapath *mp)
277 {
278 	__be64 *p = metaptr1(height, mp);
279 	return p + mp->mp_list[height];
280 }
281 
282 static void gfs2_metapath_ra(struct gfs2_glock *gl,
283 			     const struct buffer_head *bh, const __be64 *pos)
284 {
285 	struct buffer_head *rabh;
286 	const __be64 *endp = (const __be64 *)(bh->b_data + bh->b_size);
287 	const __be64 *t;
288 
289 	for (t = pos; t < endp; t++) {
290 		if (!*t)
291 			continue;
292 
293 		rabh = gfs2_getbuf(gl, be64_to_cpu(*t), CREATE);
294 		if (trylock_buffer(rabh)) {
295 			if (!buffer_uptodate(rabh)) {
296 				rabh->b_end_io = end_buffer_read_sync;
297 				submit_bh(REQ_OP_READ,
298 					  REQ_RAHEAD | REQ_META | REQ_PRIO,
299 					  rabh);
300 				continue;
301 			}
302 			unlock_buffer(rabh);
303 		}
304 		brelse(rabh);
305 	}
306 }
307 
308 /**
309  * lookup_mp_height - helper function for lookup_metapath
310  * @ip: the inode
311  * @mp: the metapath
312  * @h: the height which needs looking up
313  */
314 static int lookup_mp_height(struct gfs2_inode *ip, struct metapath *mp, int h)
315 {
316 	__be64 *ptr = metapointer(h, mp);
317 	u64 dblock = be64_to_cpu(*ptr);
318 
319 	if (!dblock)
320 		return h + 1;
321 
322 	return gfs2_meta_indirect_buffer(ip, h + 1, dblock, &mp->mp_bh[h + 1]);
323 }
324 
325 /**
326  * lookup_metapath - Walk the metadata tree to a specific point
327  * @ip: The inode
328  * @mp: The metapath
329  *
330  * Assumes that the inode's buffer has already been looked up and
331  * hooked onto mp->mp_bh[0] and that the metapath has been initialised
332  * by find_metapath().
333  *
334  * If this function encounters part of the tree which has not been
335  * allocated, it returns the current height of the tree at the point
336  * at which it found the unallocated block. Blocks which are found are
337  * added to the mp->mp_bh[] list.
338  *
339  * Returns: error or height of metadata tree
340  */
341 
342 static int lookup_metapath(struct gfs2_inode *ip, struct metapath *mp)
343 {
344 	unsigned int end_of_metadata = ip->i_height - 1;
345 	unsigned int x;
346 	int ret;
347 
348 	for (x = 0; x < end_of_metadata; x++) {
349 		ret = lookup_mp_height(ip, mp, x);
350 		if (ret)
351 			goto out;
352 	}
353 
354 	ret = ip->i_height;
355 out:
356 	mp->mp_aheight = ret;
357 	return ret;
358 }
359 
360 /**
361  * fillup_metapath - fill up buffers for the metadata path to a specific height
362  * @ip: The inode
363  * @mp: The metapath
364  * @h: The height to which it should be mapped
365  *
366  * Similar to lookup_metapath, but does lookups for a range of heights
367  *
368  * Returns: error or height of metadata tree
369  */
370 
371 static int fillup_metapath(struct gfs2_inode *ip, struct metapath *mp, int h)
372 {
373 	unsigned int start_h = h - 1;
374 	int ret;
375 
376 	if (h) {
377 		/* find the first buffer we need to look up. */
378 		while (start_h > 0 && mp->mp_bh[start_h] == NULL)
379 			start_h--;
380 		for (; start_h < h; start_h++) {
381 			ret = lookup_mp_height(ip, mp, start_h);
382 			if (ret)
383 				return ret;
384 		}
385 	}
386 	return ip->i_height;
387 }
388 
389 static inline void release_metapath(struct metapath *mp)
390 {
391 	int i;
392 
393 	for (i = 0; i < GFS2_MAX_META_HEIGHT; i++) {
394 		if (mp->mp_bh[i] == NULL)
395 			break;
396 		brelse(mp->mp_bh[i]);
397 	}
398 }
399 
400 /**
401  * gfs2_extent_length - Returns length of an extent of blocks
402  * @start: Start of the buffer
403  * @len: Length of the buffer in bytes
404  * @ptr: Current position in the buffer
405  * @limit: Max extent length to return (0 = unlimited)
406  * @eob: Set to 1 if we hit "end of block"
407  *
408  * If the first block is zero (unallocated) it will return the number of
409  * unallocated blocks in the extent, otherwise it will return the number
410  * of contiguous blocks in the extent.
411  *
412  * Returns: The length of the extent (minimum of one block)
413  */
414 
415 static inline unsigned int gfs2_extent_length(void *start, unsigned int len, __be64 *ptr, size_t limit, int *eob)
416 {
417 	const __be64 *end = (start + len);
418 	const __be64 *first = ptr;
419 	u64 d = be64_to_cpu(*ptr);
420 
421 	*eob = 0;
422 	do {
423 		ptr++;
424 		if (ptr >= end)
425 			break;
426 		if (limit && --limit == 0)
427 			break;
428 		if (d)
429 			d++;
430 	} while(be64_to_cpu(*ptr) == d);
431 	if (ptr >= end)
432 		*eob = 1;
433 	return (ptr - first);
434 }
435 
436 static inline void bmap_lock(struct gfs2_inode *ip, int create)
437 {
438 	if (create)
439 		down_write(&ip->i_rw_mutex);
440 	else
441 		down_read(&ip->i_rw_mutex);
442 }
443 
444 static inline void bmap_unlock(struct gfs2_inode *ip, int create)
445 {
446 	if (create)
447 		up_write(&ip->i_rw_mutex);
448 	else
449 		up_read(&ip->i_rw_mutex);
450 }
451 
452 static inline __be64 *gfs2_indirect_init(struct metapath *mp,
453 					 struct gfs2_glock *gl, unsigned int i,
454 					 unsigned offset, u64 bn)
455 {
456 	__be64 *ptr = (__be64 *)(mp->mp_bh[i - 1]->b_data +
457 		       ((i > 1) ? sizeof(struct gfs2_meta_header) :
458 				 sizeof(struct gfs2_dinode)));
459 	BUG_ON(i < 1);
460 	BUG_ON(mp->mp_bh[i] != NULL);
461 	mp->mp_bh[i] = gfs2_meta_new(gl, bn);
462 	gfs2_trans_add_meta(gl, mp->mp_bh[i]);
463 	gfs2_metatype_set(mp->mp_bh[i], GFS2_METATYPE_IN, GFS2_FORMAT_IN);
464 	gfs2_buffer_clear_tail(mp->mp_bh[i], sizeof(struct gfs2_meta_header));
465 	ptr += offset;
466 	*ptr = cpu_to_be64(bn);
467 	return ptr;
468 }
469 
470 enum alloc_state {
471 	ALLOC_DATA = 0,
472 	ALLOC_GROW_DEPTH = 1,
473 	ALLOC_GROW_HEIGHT = 2,
474 	/* ALLOC_UNSTUFF = 3,   TBD and rather complicated */
475 };
476 
477 static inline unsigned int hptrs(struct gfs2_sbd *sdp, const unsigned int hgt)
478 {
479 	if (hgt)
480 		return sdp->sd_inptrs;
481 	return sdp->sd_diptrs;
482 }
483 
484 /**
485  * gfs2_bmap_alloc - Build a metadata tree of the requested height
486  * @inode: The GFS2 inode
487  * @lblock: The logical starting block of the extent
488  * @bh_map: This is used to return the mapping details
489  * @zero_new: True if newly allocated blocks should be zeroed
490  * @mp: The metapath, with proper height information calculated
491  * @maxlen: The max number of data blocks to alloc
492  * @dblock: Pointer to return the resulting new block
493  * @dblks: Pointer to return the number of blocks allocated
494  *
495  * In this routine we may have to alloc:
496  *   i) Indirect blocks to grow the metadata tree height
497  *  ii) Indirect blocks to fill in lower part of the metadata tree
498  * iii) Data blocks
499  *
500  * The function is in two parts. The first part works out the total
501  * number of blocks which we need. The second part does the actual
502  * allocation asking for an extent at a time (if enough contiguous free
503  * blocks are available, there will only be one request per bmap call)
504  * and uses the state machine to initialise the blocks in order.
505  *
506  * Returns: errno on error
507  */
508 
509 static int gfs2_iomap_alloc(struct inode *inode, struct iomap *iomap,
510 			    unsigned flags, struct metapath *mp)
511 {
512 	struct gfs2_inode *ip = GFS2_I(inode);
513 	struct gfs2_sbd *sdp = GFS2_SB(inode);
514 	struct super_block *sb = sdp->sd_vfs;
515 	struct buffer_head *dibh = mp->mp_bh[0];
516 	u64 bn;
517 	unsigned n, i, blks, alloced = 0, iblks = 0, branch_start = 0;
518 	unsigned dblks = 0;
519 	unsigned ptrs_per_blk;
520 	const unsigned end_of_metadata = mp->mp_fheight - 1;
521 	int ret;
522 	enum alloc_state state;
523 	__be64 *ptr;
524 	__be64 zero_bn = 0;
525 	size_t maxlen = iomap->length >> inode->i_blkbits;
526 
527 	BUG_ON(mp->mp_aheight < 1);
528 	BUG_ON(dibh == NULL);
529 
530 	gfs2_trans_add_meta(ip->i_gl, dibh);
531 
532 	if (mp->mp_fheight == mp->mp_aheight) {
533 		struct buffer_head *bh;
534 		int eob;
535 
536 		/* Bottom indirect block exists, find unalloced extent size */
537 		ptr = metapointer(end_of_metadata, mp);
538 		bh = mp->mp_bh[end_of_metadata];
539 		dblks = gfs2_extent_length(bh->b_data, bh->b_size, ptr,
540 					   maxlen, &eob);
541 		BUG_ON(dblks < 1);
542 		state = ALLOC_DATA;
543 	} else {
544 		/* Need to allocate indirect blocks */
545 		ptrs_per_blk = mp->mp_fheight > 1 ? sdp->sd_inptrs :
546 			sdp->sd_diptrs;
547 		dblks = min(maxlen, (size_t)(ptrs_per_blk -
548 					     mp->mp_list[end_of_metadata]));
549 		if (mp->mp_fheight == ip->i_height) {
550 			/* Writing into existing tree, extend tree down */
551 			iblks = mp->mp_fheight - mp->mp_aheight;
552 			state = ALLOC_GROW_DEPTH;
553 		} else {
554 			/* Building up tree height */
555 			state = ALLOC_GROW_HEIGHT;
556 			iblks = mp->mp_fheight - ip->i_height;
557 			branch_start = metapath_branch_start(mp);
558 			iblks += (mp->mp_fheight - branch_start);
559 		}
560 	}
561 
562 	/* start of the second part of the function (state machine) */
563 
564 	blks = dblks + iblks;
565 	i = mp->mp_aheight;
566 	do {
567 		int error;
568 		n = blks - alloced;
569 		error = gfs2_alloc_blocks(ip, &bn, &n, 0, NULL);
570 		if (error)
571 			return error;
572 		alloced += n;
573 		if (state != ALLOC_DATA || gfs2_is_jdata(ip))
574 			gfs2_trans_add_unrevoke(sdp, bn, n);
575 		switch (state) {
576 		/* Growing height of tree */
577 		case ALLOC_GROW_HEIGHT:
578 			if (i == 1) {
579 				ptr = (__be64 *)(dibh->b_data +
580 						 sizeof(struct gfs2_dinode));
581 				zero_bn = *ptr;
582 			}
583 			for (; i - 1 < mp->mp_fheight - ip->i_height && n > 0;
584 			     i++, n--)
585 				gfs2_indirect_init(mp, ip->i_gl, i, 0, bn++);
586 			if (i - 1 == mp->mp_fheight - ip->i_height) {
587 				i--;
588 				gfs2_buffer_copy_tail(mp->mp_bh[i],
589 						sizeof(struct gfs2_meta_header),
590 						dibh, sizeof(struct gfs2_dinode));
591 				gfs2_buffer_clear_tail(dibh,
592 						sizeof(struct gfs2_dinode) +
593 						sizeof(__be64));
594 				ptr = (__be64 *)(mp->mp_bh[i]->b_data +
595 					sizeof(struct gfs2_meta_header));
596 				*ptr = zero_bn;
597 				state = ALLOC_GROW_DEPTH;
598 				for(i = branch_start; i < mp->mp_fheight; i++) {
599 					if (mp->mp_bh[i] == NULL)
600 						break;
601 					brelse(mp->mp_bh[i]);
602 					mp->mp_bh[i] = NULL;
603 				}
604 				i = branch_start;
605 			}
606 			if (n == 0)
607 				break;
608 		/* Branching from existing tree */
609 		case ALLOC_GROW_DEPTH:
610 			if (i > 1 && i < mp->mp_fheight)
611 				gfs2_trans_add_meta(ip->i_gl, mp->mp_bh[i-1]);
612 			for (; i < mp->mp_fheight && n > 0; i++, n--)
613 				gfs2_indirect_init(mp, ip->i_gl, i,
614 						   mp->mp_list[i-1], bn++);
615 			if (i == mp->mp_fheight)
616 				state = ALLOC_DATA;
617 			if (n == 0)
618 				break;
619 		/* Tree complete, adding data blocks */
620 		case ALLOC_DATA:
621 			BUG_ON(n > dblks);
622 			BUG_ON(mp->mp_bh[end_of_metadata] == NULL);
623 			gfs2_trans_add_meta(ip->i_gl, mp->mp_bh[end_of_metadata]);
624 			dblks = n;
625 			ptr = metapointer(end_of_metadata, mp);
626 			iomap->addr = bn << inode->i_blkbits;
627 			iomap->flags |= IOMAP_F_NEW;
628 			while (n-- > 0)
629 				*ptr++ = cpu_to_be64(bn++);
630 			if (flags & IOMAP_ZERO) {
631 				ret = sb_issue_zeroout(sb, iomap->addr >> inode->i_blkbits,
632 						       dblks, GFP_NOFS);
633 				if (ret) {
634 					fs_err(sdp,
635 					       "Failed to zero data buffers\n");
636 					flags &= ~IOMAP_ZERO;
637 				}
638 			}
639 			break;
640 		}
641 	} while (iomap->addr == IOMAP_NULL_ADDR);
642 
643 	iomap->length = (u64)dblks << inode->i_blkbits;
644 	ip->i_height = mp->mp_fheight;
645 	gfs2_add_inode_blocks(&ip->i_inode, alloced);
646 	gfs2_dinode_out(ip, mp->mp_bh[0]->b_data);
647 	return 0;
648 }
649 
650 /**
651  * hole_size - figure out the size of a hole
652  * @inode: The inode
653  * @lblock: The logical starting block number
654  * @mp: The metapath
655  *
656  * Returns: The hole size in bytes
657  *
658  */
659 static u64 hole_size(struct inode *inode, sector_t lblock, struct metapath *mp)
660 {
661 	struct gfs2_inode *ip = GFS2_I(inode);
662 	struct gfs2_sbd *sdp = GFS2_SB(inode);
663 	struct metapath mp_eof;
664 	u64 factor = 1;
665 	int hgt;
666 	u64 holesz = 0;
667 	const __be64 *first, *end, *ptr;
668 	const struct buffer_head *bh;
669 	u64 lblock_stop = (i_size_read(inode) - 1) >> inode->i_blkbits;
670 	int zeroptrs;
671 	bool done = false;
672 
673 	/* Get another metapath, to the very last byte */
674 	find_metapath(sdp, lblock_stop, &mp_eof, ip->i_height);
675 	for (hgt = ip->i_height - 1; hgt >= 0 && !done; hgt--) {
676 		bh = mp->mp_bh[hgt];
677 		if (bh) {
678 			zeroptrs = 0;
679 			first = metapointer(hgt, mp);
680 			end = (const __be64 *)(bh->b_data + bh->b_size);
681 
682 			for (ptr = first; ptr < end; ptr++) {
683 				if (*ptr) {
684 					done = true;
685 					break;
686 				} else {
687 					zeroptrs++;
688 				}
689 			}
690 		} else {
691 			zeroptrs = sdp->sd_inptrs;
692 		}
693 		if (factor * zeroptrs >= lblock_stop - lblock + 1) {
694 			holesz = lblock_stop - lblock + 1;
695 			break;
696 		}
697 		holesz += factor * zeroptrs;
698 
699 		factor *= sdp->sd_inptrs;
700 		if (hgt && (mp->mp_list[hgt - 1] < mp_eof.mp_list[hgt - 1]))
701 			(mp->mp_list[hgt - 1])++;
702 	}
703 	return holesz << inode->i_blkbits;
704 }
705 
706 static void gfs2_stuffed_iomap(struct inode *inode, struct iomap *iomap)
707 {
708 	struct gfs2_inode *ip = GFS2_I(inode);
709 
710 	iomap->addr = (ip->i_no_addr << inode->i_blkbits) +
711 		      sizeof(struct gfs2_dinode);
712 	iomap->offset = 0;
713 	iomap->length = i_size_read(inode);
714 	iomap->type = IOMAP_MAPPED;
715 	iomap->flags = IOMAP_F_DATA_INLINE;
716 }
717 
718 /**
719  * gfs2_iomap_begin - Map blocks from an inode to disk blocks
720  * @inode: The inode
721  * @pos: Starting position in bytes
722  * @length: Length to map, in bytes
723  * @flags: iomap flags
724  * @iomap: The iomap structure
725  *
726  * Returns: errno
727  */
728 int gfs2_iomap_begin(struct inode *inode, loff_t pos, loff_t length,
729 		     unsigned flags, struct iomap *iomap)
730 {
731 	struct gfs2_inode *ip = GFS2_I(inode);
732 	struct gfs2_sbd *sdp = GFS2_SB(inode);
733 	struct metapath mp = { .mp_aheight = 1, };
734 	unsigned int factor = sdp->sd_sb.sb_bsize;
735 	const u64 *arr = sdp->sd_heightsize;
736 	__be64 *ptr;
737 	sector_t lblock;
738 	sector_t lend;
739 	int ret;
740 	int eob;
741 	unsigned int len;
742 	struct buffer_head *bh;
743 	u8 height;
744 
745 	trace_gfs2_iomap_start(ip, pos, length, flags);
746 	if (!length) {
747 		ret = -EINVAL;
748 		goto out;
749 	}
750 
751 	if ((flags & IOMAP_REPORT) && gfs2_is_stuffed(ip)) {
752 		gfs2_stuffed_iomap(inode, iomap);
753 		if (pos >= iomap->length)
754 			return -ENOENT;
755 		ret = 0;
756 		goto out;
757 	}
758 
759 	lblock = pos >> inode->i_blkbits;
760 	lend = (pos + length + sdp->sd_sb.sb_bsize - 1) >> inode->i_blkbits;
761 
762 	iomap->offset = lblock << inode->i_blkbits;
763 	iomap->addr = IOMAP_NULL_ADDR;
764 	iomap->type = IOMAP_HOLE;
765 	iomap->length = (u64)(lend - lblock) << inode->i_blkbits;
766 	iomap->flags = IOMAP_F_MERGED;
767 	bmap_lock(ip, 0);
768 
769 	/*
770 	 * Directory data blocks have a struct gfs2_meta_header header, so the
771 	 * remaining size is smaller than the filesystem block size.  Logical
772 	 * block numbers for directories are in units of this remaining size!
773 	 */
774 	if (gfs2_is_dir(ip)) {
775 		factor = sdp->sd_jbsize;
776 		arr = sdp->sd_jheightsize;
777 	}
778 
779 	ret = gfs2_meta_inode_buffer(ip, &mp.mp_bh[0]);
780 	if (ret)
781 		goto out_release;
782 
783 	height = ip->i_height;
784 	while ((lblock + 1) * factor > arr[height])
785 		height++;
786 	find_metapath(sdp, lblock, &mp, height);
787 	if (height > ip->i_height || gfs2_is_stuffed(ip))
788 		goto do_alloc;
789 
790 	ret = lookup_metapath(ip, &mp);
791 	if (ret < 0)
792 		goto out_release;
793 
794 	if (mp.mp_aheight != ip->i_height)
795 		goto do_alloc;
796 
797 	ptr = metapointer(ip->i_height - 1, &mp);
798 	if (*ptr == 0)
799 		goto do_alloc;
800 
801 	iomap->type = IOMAP_MAPPED;
802 	iomap->addr = be64_to_cpu(*ptr) << inode->i_blkbits;
803 
804 	bh = mp.mp_bh[ip->i_height - 1];
805 	len = gfs2_extent_length(bh->b_data, bh->b_size, ptr, lend - lblock, &eob);
806 	if (eob)
807 		iomap->flags |= IOMAP_F_BOUNDARY;
808 	iomap->length = (u64)len << inode->i_blkbits;
809 
810 	ret = 0;
811 
812 out_release:
813 	release_metapath(&mp);
814 	bmap_unlock(ip, 0);
815 out:
816 	trace_gfs2_iomap_end(ip, iomap, ret);
817 	return ret;
818 
819 do_alloc:
820 	if (!(flags & IOMAP_WRITE)) {
821 		if (pos >= i_size_read(inode)) {
822 			ret = -ENOENT;
823 			goto out_release;
824 		}
825 		ret = 0;
826 		iomap->length = hole_size(inode, lblock, &mp);
827 		goto out_release;
828 	}
829 
830 	ret = gfs2_iomap_alloc(inode, iomap, flags, &mp);
831 	goto out_release;
832 }
833 
834 /**
835  * gfs2_block_map - Map a block from an inode to a disk block
836  * @inode: The inode
837  * @lblock: The logical block number
838  * @bh_map: The bh to be mapped
839  * @create: True if its ok to alloc blocks to satify the request
840  *
841  * Sets buffer_mapped() if successful, sets buffer_boundary() if a
842  * read of metadata will be required before the next block can be
843  * mapped. Sets buffer_new() if new blocks were allocated.
844  *
845  * Returns: errno
846  */
847 
848 int gfs2_block_map(struct inode *inode, sector_t lblock,
849 		   struct buffer_head *bh_map, int create)
850 {
851 	struct gfs2_inode *ip = GFS2_I(inode);
852 	struct iomap iomap;
853 	int ret, flags = 0;
854 
855 	clear_buffer_mapped(bh_map);
856 	clear_buffer_new(bh_map);
857 	clear_buffer_boundary(bh_map);
858 	trace_gfs2_bmap(ip, bh_map, lblock, create, 1);
859 
860 	if (create)
861 		flags |= IOMAP_WRITE;
862 	if (buffer_zeronew(bh_map))
863 		flags |= IOMAP_ZERO;
864 	ret = gfs2_iomap_begin(inode, (loff_t)lblock << inode->i_blkbits,
865 			       bh_map->b_size, flags, &iomap);
866 	if (ret) {
867 		if (!create && ret == -ENOENT) {
868 			/* Return unmapped buffer beyond the end of file.  */
869 			ret = 0;
870 		}
871 		goto out;
872 	}
873 
874 	if (iomap.length > bh_map->b_size) {
875 		iomap.length = bh_map->b_size;
876 		iomap.flags &= ~IOMAP_F_BOUNDARY;
877 	}
878 	if (iomap.addr != IOMAP_NULL_ADDR)
879 		map_bh(bh_map, inode->i_sb, iomap.addr >> inode->i_blkbits);
880 	bh_map->b_size = iomap.length;
881 	if (iomap.flags & IOMAP_F_BOUNDARY)
882 		set_buffer_boundary(bh_map);
883 	if (iomap.flags & IOMAP_F_NEW)
884 		set_buffer_new(bh_map);
885 
886 out:
887 	trace_gfs2_bmap(ip, bh_map, lblock, create, ret);
888 	return ret;
889 }
890 
891 /*
892  * Deprecated: do not use in new code
893  */
894 int gfs2_extent_map(struct inode *inode, u64 lblock, int *new, u64 *dblock, unsigned *extlen)
895 {
896 	struct buffer_head bh = { .b_state = 0, .b_blocknr = 0 };
897 	int ret;
898 	int create = *new;
899 
900 	BUG_ON(!extlen);
901 	BUG_ON(!dblock);
902 	BUG_ON(!new);
903 
904 	bh.b_size = BIT(inode->i_blkbits + (create ? 0 : 5));
905 	ret = gfs2_block_map(inode, lblock, &bh, create);
906 	*extlen = bh.b_size >> inode->i_blkbits;
907 	*dblock = bh.b_blocknr;
908 	if (buffer_new(&bh))
909 		*new = 1;
910 	else
911 		*new = 0;
912 	return ret;
913 }
914 
915 /**
916  * gfs2_block_truncate_page - Deal with zeroing out data for truncate
917  *
918  * This is partly borrowed from ext3.
919  */
920 static int gfs2_block_truncate_page(struct address_space *mapping, loff_t from)
921 {
922 	struct inode *inode = mapping->host;
923 	struct gfs2_inode *ip = GFS2_I(inode);
924 	unsigned long index = from >> PAGE_SHIFT;
925 	unsigned offset = from & (PAGE_SIZE-1);
926 	unsigned blocksize, iblock, length, pos;
927 	struct buffer_head *bh;
928 	struct page *page;
929 	int err;
930 
931 	page = find_or_create_page(mapping, index, GFP_NOFS);
932 	if (!page)
933 		return 0;
934 
935 	blocksize = inode->i_sb->s_blocksize;
936 	length = blocksize - (offset & (blocksize - 1));
937 	iblock = index << (PAGE_SHIFT - inode->i_sb->s_blocksize_bits);
938 
939 	if (!page_has_buffers(page))
940 		create_empty_buffers(page, blocksize, 0);
941 
942 	/* Find the buffer that contains "offset" */
943 	bh = page_buffers(page);
944 	pos = blocksize;
945 	while (offset >= pos) {
946 		bh = bh->b_this_page;
947 		iblock++;
948 		pos += blocksize;
949 	}
950 
951 	err = 0;
952 
953 	if (!buffer_mapped(bh)) {
954 		gfs2_block_map(inode, iblock, bh, 0);
955 		/* unmapped? It's a hole - nothing to do */
956 		if (!buffer_mapped(bh))
957 			goto unlock;
958 	}
959 
960 	/* Ok, it's mapped. Make sure it's up-to-date */
961 	if (PageUptodate(page))
962 		set_buffer_uptodate(bh);
963 
964 	if (!buffer_uptodate(bh)) {
965 		err = -EIO;
966 		ll_rw_block(REQ_OP_READ, 0, 1, &bh);
967 		wait_on_buffer(bh);
968 		/* Uhhuh. Read error. Complain and punt. */
969 		if (!buffer_uptodate(bh))
970 			goto unlock;
971 		err = 0;
972 	}
973 
974 	if (!gfs2_is_writeback(ip))
975 		gfs2_trans_add_data(ip->i_gl, bh);
976 
977 	zero_user(page, offset, length);
978 	mark_buffer_dirty(bh);
979 unlock:
980 	unlock_page(page);
981 	put_page(page);
982 	return err;
983 }
984 
985 #define GFS2_JTRUNC_REVOKES 8192
986 
987 /**
988  * gfs2_journaled_truncate - Wrapper for truncate_pagecache for jdata files
989  * @inode: The inode being truncated
990  * @oldsize: The original (larger) size
991  * @newsize: The new smaller size
992  *
993  * With jdata files, we have to journal a revoke for each block which is
994  * truncated. As a result, we need to split this into separate transactions
995  * if the number of pages being truncated gets too large.
996  */
997 
998 static int gfs2_journaled_truncate(struct inode *inode, u64 oldsize, u64 newsize)
999 {
1000 	struct gfs2_sbd *sdp = GFS2_SB(inode);
1001 	u64 max_chunk = GFS2_JTRUNC_REVOKES * sdp->sd_vfs->s_blocksize;
1002 	u64 chunk;
1003 	int error;
1004 
1005 	while (oldsize != newsize) {
1006 		chunk = oldsize - newsize;
1007 		if (chunk > max_chunk)
1008 			chunk = max_chunk;
1009 		truncate_pagecache(inode, oldsize - chunk);
1010 		oldsize -= chunk;
1011 		gfs2_trans_end(sdp);
1012 		error = gfs2_trans_begin(sdp, RES_DINODE, GFS2_JTRUNC_REVOKES);
1013 		if (error)
1014 			return error;
1015 	}
1016 
1017 	return 0;
1018 }
1019 
1020 static int trunc_start(struct inode *inode, u64 oldsize, u64 newsize)
1021 {
1022 	struct gfs2_inode *ip = GFS2_I(inode);
1023 	struct gfs2_sbd *sdp = GFS2_SB(inode);
1024 	struct address_space *mapping = inode->i_mapping;
1025 	struct buffer_head *dibh;
1026 	int journaled = gfs2_is_jdata(ip);
1027 	int error;
1028 
1029 	if (journaled)
1030 		error = gfs2_trans_begin(sdp, RES_DINODE + RES_JDATA, GFS2_JTRUNC_REVOKES);
1031 	else
1032 		error = gfs2_trans_begin(sdp, RES_DINODE, 0);
1033 	if (error)
1034 		return error;
1035 
1036 	error = gfs2_meta_inode_buffer(ip, &dibh);
1037 	if (error)
1038 		goto out;
1039 
1040 	gfs2_trans_add_meta(ip->i_gl, dibh);
1041 
1042 	if (gfs2_is_stuffed(ip)) {
1043 		gfs2_buffer_clear_tail(dibh, sizeof(struct gfs2_dinode) + newsize);
1044 	} else {
1045 		if (newsize & (u64)(sdp->sd_sb.sb_bsize - 1)) {
1046 			error = gfs2_block_truncate_page(mapping, newsize);
1047 			if (error)
1048 				goto out_brelse;
1049 		}
1050 		ip->i_diskflags |= GFS2_DIF_TRUNC_IN_PROG;
1051 	}
1052 
1053 	i_size_write(inode, newsize);
1054 	ip->i_inode.i_mtime = ip->i_inode.i_ctime = current_time(&ip->i_inode);
1055 	gfs2_dinode_out(ip, dibh->b_data);
1056 
1057 	if (journaled)
1058 		error = gfs2_journaled_truncate(inode, oldsize, newsize);
1059 	else
1060 		truncate_pagecache(inode, newsize);
1061 
1062 	if (error) {
1063 		brelse(dibh);
1064 		return error;
1065 	}
1066 
1067 out_brelse:
1068 	brelse(dibh);
1069 out:
1070 	gfs2_trans_end(sdp);
1071 	return error;
1072 }
1073 
1074 /**
1075  * sweep_bh_for_rgrps - find an rgrp in a meta buffer and free blocks therein
1076  * @ip: inode
1077  * @rg_gh: holder of resource group glock
1078  * @mp: current metapath fully populated with buffers
1079  * @btotal: place to keep count of total blocks freed
1080  * @hgt: height we're processing
1081  * @first: true if this is the first call to this function for this height
1082  *
1083  * We sweep a metadata buffer (provided by the metapath) for blocks we need to
1084  * free, and free them all. However, we do it one rgrp at a time. If this
1085  * block has references to multiple rgrps, we break it into individual
1086  * transactions. This allows other processes to use the rgrps while we're
1087  * focused on a single one, for better concurrency / performance.
1088  * At every transaction boundary, we rewrite the inode into the journal.
1089  * That way the bitmaps are kept consistent with the inode and we can recover
1090  * if we're interrupted by power-outages.
1091  *
1092  * Returns: 0, or return code if an error occurred.
1093  *          *btotal has the total number of blocks freed
1094  */
1095 static int sweep_bh_for_rgrps(struct gfs2_inode *ip, struct gfs2_holder *rd_gh,
1096 			      const struct metapath *mp, u32 *btotal, int hgt,
1097 			      bool preserve1)
1098 {
1099 	struct gfs2_sbd *sdp = GFS2_SB(&ip->i_inode);
1100 	struct gfs2_rgrpd *rgd;
1101 	struct gfs2_trans *tr;
1102 	struct buffer_head *bh = mp->mp_bh[hgt];
1103 	__be64 *top, *bottom, *p;
1104 	int blks_outside_rgrp;
1105 	u64 bn, bstart, isize_blks;
1106 	s64 blen; /* needs to be s64 or gfs2_add_inode_blocks breaks */
1107 	int meta = ((hgt != ip->i_height - 1) ? 1 : 0);
1108 	int ret = 0;
1109 	bool buf_in_tr = false; /* buffer was added to transaction */
1110 
1111 	if (gfs2_metatype_check(sdp, bh,
1112 				(hgt ? GFS2_METATYPE_IN : GFS2_METATYPE_DI)))
1113 		return -EIO;
1114 
1115 more_rgrps:
1116 	blks_outside_rgrp = 0;
1117 	bstart = 0;
1118 	blen = 0;
1119 	top = metapointer(hgt, mp); /* first ptr from metapath */
1120 	/* If we're keeping some data at the truncation point, we've got to
1121 	   preserve the metadata tree by adding 1 to the starting metapath. */
1122 	if (preserve1)
1123 		top++;
1124 
1125 	bottom = (__be64 *)(bh->b_data + bh->b_size);
1126 
1127 	for (p = top; p < bottom; p++) {
1128 		if (!*p)
1129 			continue;
1130 		bn = be64_to_cpu(*p);
1131 		if (gfs2_holder_initialized(rd_gh)) {
1132 			rgd = gfs2_glock2rgrp(rd_gh->gh_gl);
1133 			gfs2_assert_withdraw(sdp,
1134 				     gfs2_glock_is_locked_by_me(rd_gh->gh_gl));
1135 		} else {
1136 			rgd = gfs2_blk2rgrpd(sdp, bn, false);
1137 			ret = gfs2_glock_nq_init(rgd->rd_gl, LM_ST_EXCLUSIVE,
1138 						 0, rd_gh);
1139 			if (ret)
1140 				goto out;
1141 
1142 			/* Must be done with the rgrp glock held: */
1143 			if (gfs2_rs_active(&ip->i_res) &&
1144 			    rgd == ip->i_res.rs_rbm.rgd)
1145 				gfs2_rs_deltree(&ip->i_res);
1146 		}
1147 
1148 		if (!rgrp_contains_block(rgd, bn)) {
1149 			blks_outside_rgrp++;
1150 			continue;
1151 		}
1152 
1153 		/* The size of our transactions will be unknown until we
1154 		   actually process all the metadata blocks that relate to
1155 		   the rgrp. So we estimate. We know it can't be more than
1156 		   the dinode's i_blocks and we don't want to exceed the
1157 		   journal flush threshold, sd_log_thresh2. */
1158 		if (current->journal_info == NULL) {
1159 			unsigned int jblocks_rqsted, revokes;
1160 
1161 			jblocks_rqsted = rgd->rd_length + RES_DINODE +
1162 				RES_INDIRECT;
1163 			isize_blks = gfs2_get_inode_blocks(&ip->i_inode);
1164 			if (isize_blks > atomic_read(&sdp->sd_log_thresh2))
1165 				jblocks_rqsted +=
1166 					atomic_read(&sdp->sd_log_thresh2);
1167 			else
1168 				jblocks_rqsted += isize_blks;
1169 			revokes = jblocks_rqsted;
1170 			if (meta)
1171 				revokes += hptrs(sdp, hgt);
1172 			else if (ip->i_depth)
1173 				revokes += sdp->sd_inptrs;
1174 			ret = gfs2_trans_begin(sdp, jblocks_rqsted, revokes);
1175 			if (ret)
1176 				goto out_unlock;
1177 			down_write(&ip->i_rw_mutex);
1178 		}
1179 		/* check if we will exceed the transaction blocks requested */
1180 		tr = current->journal_info;
1181 		if (tr->tr_num_buf_new + RES_STATFS +
1182 		    RES_QUOTA >= atomic_read(&sdp->sd_log_thresh2)) {
1183 			/* We set blks_outside_rgrp to ensure the loop will
1184 			   be repeated for the same rgrp, but with a new
1185 			   transaction. */
1186 			blks_outside_rgrp++;
1187 			/* This next part is tricky. If the buffer was added
1188 			   to the transaction, we've already set some block
1189 			   pointers to 0, so we better follow through and free
1190 			   them, or we will introduce corruption (so break).
1191 			   This may be impossible, or at least rare, but I
1192 			   decided to cover the case regardless.
1193 
1194 			   If the buffer was not added to the transaction
1195 			   (this call), doing so would exceed our transaction
1196 			   size, so we need to end the transaction and start a
1197 			   new one (so goto). */
1198 
1199 			if (buf_in_tr)
1200 				break;
1201 			goto out_unlock;
1202 		}
1203 
1204 		gfs2_trans_add_meta(ip->i_gl, bh);
1205 		buf_in_tr = true;
1206 		*p = 0;
1207 		if (bstart + blen == bn) {
1208 			blen++;
1209 			continue;
1210 		}
1211 		if (bstart) {
1212 			__gfs2_free_blocks(ip, bstart, (u32)blen, meta);
1213 			(*btotal) += blen;
1214 			gfs2_add_inode_blocks(&ip->i_inode, -blen);
1215 		}
1216 		bstart = bn;
1217 		blen = 1;
1218 	}
1219 	if (bstart) {
1220 		__gfs2_free_blocks(ip, bstart, (u32)blen, meta);
1221 		(*btotal) += blen;
1222 		gfs2_add_inode_blocks(&ip->i_inode, -blen);
1223 	}
1224 out_unlock:
1225 	if (!ret && blks_outside_rgrp) { /* If buffer still has non-zero blocks
1226 					    outside the rgrp we just processed,
1227 					    do it all over again. */
1228 		if (current->journal_info) {
1229 			struct buffer_head *dibh = mp->mp_bh[0];
1230 
1231 			/* Every transaction boundary, we rewrite the dinode
1232 			   to keep its di_blocks current in case of failure. */
1233 			ip->i_inode.i_mtime = ip->i_inode.i_ctime =
1234 				current_time(&ip->i_inode);
1235 			gfs2_trans_add_meta(ip->i_gl, dibh);
1236 			gfs2_dinode_out(ip, dibh->b_data);
1237 			up_write(&ip->i_rw_mutex);
1238 			gfs2_trans_end(sdp);
1239 		}
1240 		gfs2_glock_dq_uninit(rd_gh);
1241 		cond_resched();
1242 		goto more_rgrps;
1243 	}
1244 out:
1245 	return ret;
1246 }
1247 
1248 /**
1249  * find_nonnull_ptr - find a non-null pointer given a metapath and height
1250  * assumes the metapath is valid (with buffers) out to height h
1251  * @mp: starting metapath
1252  * @h: desired height to search
1253  *
1254  * Returns: true if a non-null pointer was found in the metapath buffer
1255  *          false if all remaining pointers are NULL in the buffer
1256  */
1257 static bool find_nonnull_ptr(struct gfs2_sbd *sdp, struct metapath *mp,
1258 			     unsigned int h)
1259 {
1260 	__be64 *ptr;
1261 	unsigned int ptrs = hptrs(sdp, h) - 1;
1262 
1263 	while (true) {
1264 		ptr = metapointer(h, mp);
1265 		if (*ptr) { /* if we have a non-null pointer */
1266 			/* Now zero the metapath after the current height. */
1267 			h++;
1268 			if (h < GFS2_MAX_META_HEIGHT)
1269 				memset(&mp->mp_list[h], 0,
1270 				       (GFS2_MAX_META_HEIGHT - h) *
1271 				       sizeof(mp->mp_list[0]));
1272 			return true;
1273 		}
1274 
1275 		if (mp->mp_list[h] < ptrs)
1276 			mp->mp_list[h]++;
1277 		else
1278 			return false; /* no more pointers in this buffer */
1279 	}
1280 }
1281 
1282 enum dealloc_states {
1283 	DEALLOC_MP_FULL = 0,    /* Strip a metapath with all buffers read in */
1284 	DEALLOC_MP_LOWER = 1,   /* lower the metapath strip height */
1285 	DEALLOC_FILL_MP = 2,  /* Fill in the metapath to the given height. */
1286 	DEALLOC_DONE = 3,       /* process complete */
1287 };
1288 
1289 static bool mp_eq_to_hgt(struct metapath *mp, __u16 *nbof, unsigned int h)
1290 {
1291 	if (memcmp(mp->mp_list, nbof, h * sizeof(mp->mp_list[0])))
1292 		return false;
1293 	return true;
1294 }
1295 
1296 /**
1297  * trunc_dealloc - truncate a file down to a desired size
1298  * @ip: inode to truncate
1299  * @newsize: The desired size of the file
1300  *
1301  * This function truncates a file to newsize. It works from the
1302  * bottom up, and from the right to the left. In other words, it strips off
1303  * the highest layer (data) before stripping any of the metadata. Doing it
1304  * this way is best in case the operation is interrupted by power failure, etc.
1305  * The dinode is rewritten in every transaction to guarantee integrity.
1306  */
1307 static int trunc_dealloc(struct gfs2_inode *ip, u64 newsize)
1308 {
1309 	struct gfs2_sbd *sdp = GFS2_SB(&ip->i_inode);
1310 	struct metapath mp;
1311 	struct buffer_head *dibh, *bh;
1312 	struct gfs2_holder rd_gh;
1313 	u64 lblock;
1314 	__u16 nbof[GFS2_MAX_META_HEIGHT]; /* new beginning of truncation */
1315 	unsigned int strip_h = ip->i_height - 1;
1316 	u32 btotal = 0;
1317 	int ret, state;
1318 	int mp_h; /* metapath buffers are read in to this height */
1319 	sector_t last_ra = 0;
1320 	u64 prev_bnr = 0;
1321 	bool preserve1; /* need to preserve the first meta pointer? */
1322 
1323 	if (!newsize)
1324 		lblock = 0;
1325 	else
1326 		lblock = (newsize - 1) >> sdp->sd_sb.sb_bsize_shift;
1327 
1328 	memset(&mp, 0, sizeof(mp));
1329 	find_metapath(sdp, lblock, &mp, ip->i_height);
1330 
1331 	memcpy(&nbof, &mp.mp_list, sizeof(nbof));
1332 
1333 	ret = gfs2_meta_inode_buffer(ip, &dibh);
1334 	if (ret)
1335 		return ret;
1336 
1337 	mp.mp_bh[0] = dibh;
1338 	ret = lookup_metapath(ip, &mp);
1339 	if (ret == ip->i_height)
1340 		state = DEALLOC_MP_FULL; /* We have a complete metapath */
1341 	else
1342 		state = DEALLOC_FILL_MP; /* deal with partial metapath */
1343 
1344 	ret = gfs2_rindex_update(sdp);
1345 	if (ret)
1346 		goto out_metapath;
1347 
1348 	ret = gfs2_quota_hold(ip, NO_UID_QUOTA_CHANGE, NO_GID_QUOTA_CHANGE);
1349 	if (ret)
1350 		goto out_metapath;
1351 	gfs2_holder_mark_uninitialized(&rd_gh);
1352 
1353 	mp_h = strip_h;
1354 
1355 	while (state != DEALLOC_DONE) {
1356 		switch (state) {
1357 		/* Truncate a full metapath at the given strip height.
1358 		 * Note that strip_h == mp_h in order to be in this state. */
1359 		case DEALLOC_MP_FULL:
1360 			if (mp_h > 0) { /* issue read-ahead on metadata */
1361 				__be64 *top;
1362 
1363 				bh = mp.mp_bh[mp_h - 1];
1364 				if (bh->b_blocknr != last_ra) {
1365 					last_ra = bh->b_blocknr;
1366 					top = metaptr1(mp_h - 1, &mp);
1367 					gfs2_metapath_ra(ip->i_gl, bh, top);
1368 				}
1369 			}
1370 			/* If we're truncating to a non-zero size and the mp is
1371 			   at the beginning of file for the strip height, we
1372 			   need to preserve the first metadata pointer. */
1373 			preserve1 = (newsize && mp_eq_to_hgt(&mp, nbof, mp_h));
1374 			bh = mp.mp_bh[mp_h];
1375 			gfs2_assert_withdraw(sdp, bh);
1376 			if (gfs2_assert_withdraw(sdp,
1377 						 prev_bnr != bh->b_blocknr)) {
1378 				printk(KERN_EMERG "GFS2: fsid=%s:inode %llu, "
1379 				       "block:%llu, i_h:%u, s_h:%u, mp_h:%u\n",
1380 				       sdp->sd_fsname,
1381 				       (unsigned long long)ip->i_no_addr,
1382 				       prev_bnr, ip->i_height, strip_h, mp_h);
1383 			}
1384 			prev_bnr = bh->b_blocknr;
1385 			ret = sweep_bh_for_rgrps(ip, &rd_gh, &mp, &btotal,
1386 						 mp_h, preserve1);
1387 			/* If we hit an error or just swept dinode buffer,
1388 			   just exit. */
1389 			if (ret || !mp_h) {
1390 				state = DEALLOC_DONE;
1391 				break;
1392 			}
1393 			state = DEALLOC_MP_LOWER;
1394 			break;
1395 
1396 		/* lower the metapath strip height */
1397 		case DEALLOC_MP_LOWER:
1398 			/* We're done with the current buffer, so release it,
1399 			   unless it's the dinode buffer. Then back up to the
1400 			   previous pointer. */
1401 			if (mp_h) {
1402 				brelse(mp.mp_bh[mp_h]);
1403 				mp.mp_bh[mp_h] = NULL;
1404 			}
1405 			/* If we can't get any lower in height, we've stripped
1406 			   off all we can. Next step is to back up and start
1407 			   stripping the previous level of metadata. */
1408 			if (mp_h == 0) {
1409 				strip_h--;
1410 				memcpy(&mp.mp_list, &nbof, sizeof(nbof));
1411 				mp_h = strip_h;
1412 				state = DEALLOC_FILL_MP;
1413 				break;
1414 			}
1415 			mp.mp_list[mp_h] = 0;
1416 			mp_h--; /* search one metadata height down */
1417 			if (mp.mp_list[mp_h] >= hptrs(sdp, mp_h) - 1)
1418 				break; /* loop around in the same state */
1419 			mp.mp_list[mp_h]++;
1420 			/* Here we've found a part of the metapath that is not
1421 			 * allocated. We need to search at that height for the
1422 			 * next non-null pointer. */
1423 			if (find_nonnull_ptr(sdp, &mp, mp_h)) {
1424 				state = DEALLOC_FILL_MP;
1425 				mp_h++;
1426 			}
1427 			/* No more non-null pointers at this height. Back up
1428 			   to the previous height and try again. */
1429 			break; /* loop around in the same state */
1430 
1431 		/* Fill the metapath with buffers to the given height. */
1432 		case DEALLOC_FILL_MP:
1433 			/* Fill the buffers out to the current height. */
1434 			ret = fillup_metapath(ip, &mp, mp_h);
1435 			if (ret < 0)
1436 				goto out;
1437 
1438 			/* If buffers found for the entire strip height */
1439 			if ((ret == ip->i_height) && (mp_h == strip_h)) {
1440 				state = DEALLOC_MP_FULL;
1441 				break;
1442 			}
1443 			if (ret < ip->i_height) /* We have a partial height */
1444 				mp_h = ret - 1;
1445 
1446 			/* If we find a non-null block pointer, crawl a bit
1447 			   higher up in the metapath and try again, otherwise
1448 			   we need to look lower for a new starting point. */
1449 			if (find_nonnull_ptr(sdp, &mp, mp_h))
1450 				mp_h++;
1451 			else
1452 				state = DEALLOC_MP_LOWER;
1453 			break;
1454 		}
1455 	}
1456 
1457 	if (btotal) {
1458 		if (current->journal_info == NULL) {
1459 			ret = gfs2_trans_begin(sdp, RES_DINODE + RES_STATFS +
1460 					       RES_QUOTA, 0);
1461 			if (ret)
1462 				goto out;
1463 			down_write(&ip->i_rw_mutex);
1464 		}
1465 		gfs2_statfs_change(sdp, 0, +btotal, 0);
1466 		gfs2_quota_change(ip, -(s64)btotal, ip->i_inode.i_uid,
1467 				  ip->i_inode.i_gid);
1468 		ip->i_inode.i_mtime = ip->i_inode.i_ctime = current_time(&ip->i_inode);
1469 		gfs2_trans_add_meta(ip->i_gl, dibh);
1470 		gfs2_dinode_out(ip, dibh->b_data);
1471 		up_write(&ip->i_rw_mutex);
1472 		gfs2_trans_end(sdp);
1473 	}
1474 
1475 out:
1476 	if (gfs2_holder_initialized(&rd_gh))
1477 		gfs2_glock_dq_uninit(&rd_gh);
1478 	if (current->journal_info) {
1479 		up_write(&ip->i_rw_mutex);
1480 		gfs2_trans_end(sdp);
1481 		cond_resched();
1482 	}
1483 	gfs2_quota_unhold(ip);
1484 out_metapath:
1485 	release_metapath(&mp);
1486 	return ret;
1487 }
1488 
1489 static int trunc_end(struct gfs2_inode *ip)
1490 {
1491 	struct gfs2_sbd *sdp = GFS2_SB(&ip->i_inode);
1492 	struct buffer_head *dibh;
1493 	int error;
1494 
1495 	error = gfs2_trans_begin(sdp, RES_DINODE, 0);
1496 	if (error)
1497 		return error;
1498 
1499 	down_write(&ip->i_rw_mutex);
1500 
1501 	error = gfs2_meta_inode_buffer(ip, &dibh);
1502 	if (error)
1503 		goto out;
1504 
1505 	if (!i_size_read(&ip->i_inode)) {
1506 		ip->i_height = 0;
1507 		ip->i_goal = ip->i_no_addr;
1508 		gfs2_buffer_clear_tail(dibh, sizeof(struct gfs2_dinode));
1509 		gfs2_ordered_del_inode(ip);
1510 	}
1511 	ip->i_inode.i_mtime = ip->i_inode.i_ctime = current_time(&ip->i_inode);
1512 	ip->i_diskflags &= ~GFS2_DIF_TRUNC_IN_PROG;
1513 
1514 	gfs2_trans_add_meta(ip->i_gl, dibh);
1515 	gfs2_dinode_out(ip, dibh->b_data);
1516 	brelse(dibh);
1517 
1518 out:
1519 	up_write(&ip->i_rw_mutex);
1520 	gfs2_trans_end(sdp);
1521 	return error;
1522 }
1523 
1524 /**
1525  * do_shrink - make a file smaller
1526  * @inode: the inode
1527  * @oldsize: the current inode size
1528  * @newsize: the size to make the file
1529  *
1530  * Called with an exclusive lock on @inode. The @size must
1531  * be equal to or smaller than the current inode size.
1532  *
1533  * Returns: errno
1534  */
1535 
1536 static int do_shrink(struct inode *inode, u64 oldsize, u64 newsize)
1537 {
1538 	struct gfs2_inode *ip = GFS2_I(inode);
1539 	int error;
1540 
1541 	error = trunc_start(inode, oldsize, newsize);
1542 	if (error < 0)
1543 		return error;
1544 	if (gfs2_is_stuffed(ip))
1545 		return 0;
1546 
1547 	error = trunc_dealloc(ip, newsize);
1548 	if (error == 0)
1549 		error = trunc_end(ip);
1550 
1551 	return error;
1552 }
1553 
1554 void gfs2_trim_blocks(struct inode *inode)
1555 {
1556 	u64 size = inode->i_size;
1557 	int ret;
1558 
1559 	ret = do_shrink(inode, size, size);
1560 	WARN_ON(ret != 0);
1561 }
1562 
1563 /**
1564  * do_grow - Touch and update inode size
1565  * @inode: The inode
1566  * @size: The new size
1567  *
1568  * This function updates the timestamps on the inode and
1569  * may also increase the size of the inode. This function
1570  * must not be called with @size any smaller than the current
1571  * inode size.
1572  *
1573  * Although it is not strictly required to unstuff files here,
1574  * earlier versions of GFS2 have a bug in the stuffed file reading
1575  * code which will result in a buffer overrun if the size is larger
1576  * than the max stuffed file size. In order to prevent this from
1577  * occurring, such files are unstuffed, but in other cases we can
1578  * just update the inode size directly.
1579  *
1580  * Returns: 0 on success, or -ve on error
1581  */
1582 
1583 static int do_grow(struct inode *inode, u64 size)
1584 {
1585 	struct gfs2_inode *ip = GFS2_I(inode);
1586 	struct gfs2_sbd *sdp = GFS2_SB(inode);
1587 	struct gfs2_alloc_parms ap = { .target = 1, };
1588 	struct buffer_head *dibh;
1589 	int error;
1590 	int unstuff = 0;
1591 
1592 	if (gfs2_is_stuffed(ip) &&
1593 	    (size > (sdp->sd_sb.sb_bsize - sizeof(struct gfs2_dinode)))) {
1594 		error = gfs2_quota_lock_check(ip, &ap);
1595 		if (error)
1596 			return error;
1597 
1598 		error = gfs2_inplace_reserve(ip, &ap);
1599 		if (error)
1600 			goto do_grow_qunlock;
1601 		unstuff = 1;
1602 	}
1603 
1604 	error = gfs2_trans_begin(sdp, RES_DINODE + RES_STATFS + RES_RG_BIT +
1605 				 (sdp->sd_args.ar_quota == GFS2_QUOTA_OFF ?
1606 				  0 : RES_QUOTA), 0);
1607 	if (error)
1608 		goto do_grow_release;
1609 
1610 	if (unstuff) {
1611 		error = gfs2_unstuff_dinode(ip, NULL);
1612 		if (error)
1613 			goto do_end_trans;
1614 	}
1615 
1616 	error = gfs2_meta_inode_buffer(ip, &dibh);
1617 	if (error)
1618 		goto do_end_trans;
1619 
1620 	i_size_write(inode, size);
1621 	ip->i_inode.i_mtime = ip->i_inode.i_ctime = current_time(&ip->i_inode);
1622 	gfs2_trans_add_meta(ip->i_gl, dibh);
1623 	gfs2_dinode_out(ip, dibh->b_data);
1624 	brelse(dibh);
1625 
1626 do_end_trans:
1627 	gfs2_trans_end(sdp);
1628 do_grow_release:
1629 	if (unstuff) {
1630 		gfs2_inplace_release(ip);
1631 do_grow_qunlock:
1632 		gfs2_quota_unlock(ip);
1633 	}
1634 	return error;
1635 }
1636 
1637 /**
1638  * gfs2_setattr_size - make a file a given size
1639  * @inode: the inode
1640  * @newsize: the size to make the file
1641  *
1642  * The file size can grow, shrink, or stay the same size. This
1643  * is called holding i_mutex and an exclusive glock on the inode
1644  * in question.
1645  *
1646  * Returns: errno
1647  */
1648 
1649 int gfs2_setattr_size(struct inode *inode, u64 newsize)
1650 {
1651 	struct gfs2_inode *ip = GFS2_I(inode);
1652 	int ret;
1653 	u64 oldsize;
1654 
1655 	BUG_ON(!S_ISREG(inode->i_mode));
1656 
1657 	ret = inode_newsize_ok(inode, newsize);
1658 	if (ret)
1659 		return ret;
1660 
1661 	inode_dio_wait(inode);
1662 
1663 	ret = gfs2_rsqa_alloc(ip);
1664 	if (ret)
1665 		goto out;
1666 
1667 	oldsize = inode->i_size;
1668 	if (newsize >= oldsize) {
1669 		ret = do_grow(inode, newsize);
1670 		goto out;
1671 	}
1672 
1673 	ret = do_shrink(inode, oldsize, newsize);
1674 out:
1675 	gfs2_rsqa_delete(ip, NULL);
1676 	return ret;
1677 }
1678 
1679 int gfs2_truncatei_resume(struct gfs2_inode *ip)
1680 {
1681 	int error;
1682 	error = trunc_dealloc(ip, i_size_read(&ip->i_inode));
1683 	if (!error)
1684 		error = trunc_end(ip);
1685 	return error;
1686 }
1687 
1688 int gfs2_file_dealloc(struct gfs2_inode *ip)
1689 {
1690 	return trunc_dealloc(ip, 0);
1691 }
1692 
1693 /**
1694  * gfs2_free_journal_extents - Free cached journal bmap info
1695  * @jd: The journal
1696  *
1697  */
1698 
1699 void gfs2_free_journal_extents(struct gfs2_jdesc *jd)
1700 {
1701 	struct gfs2_journal_extent *jext;
1702 
1703 	while(!list_empty(&jd->extent_list)) {
1704 		jext = list_entry(jd->extent_list.next, struct gfs2_journal_extent, list);
1705 		list_del(&jext->list);
1706 		kfree(jext);
1707 	}
1708 }
1709 
1710 /**
1711  * gfs2_add_jextent - Add or merge a new extent to extent cache
1712  * @jd: The journal descriptor
1713  * @lblock: The logical block at start of new extent
1714  * @dblock: The physical block at start of new extent
1715  * @blocks: Size of extent in fs blocks
1716  *
1717  * Returns: 0 on success or -ENOMEM
1718  */
1719 
1720 static int gfs2_add_jextent(struct gfs2_jdesc *jd, u64 lblock, u64 dblock, u64 blocks)
1721 {
1722 	struct gfs2_journal_extent *jext;
1723 
1724 	if (!list_empty(&jd->extent_list)) {
1725 		jext = list_entry(jd->extent_list.prev, struct gfs2_journal_extent, list);
1726 		if ((jext->dblock + jext->blocks) == dblock) {
1727 			jext->blocks += blocks;
1728 			return 0;
1729 		}
1730 	}
1731 
1732 	jext = kzalloc(sizeof(struct gfs2_journal_extent), GFP_NOFS);
1733 	if (jext == NULL)
1734 		return -ENOMEM;
1735 	jext->dblock = dblock;
1736 	jext->lblock = lblock;
1737 	jext->blocks = blocks;
1738 	list_add_tail(&jext->list, &jd->extent_list);
1739 	jd->nr_extents++;
1740 	return 0;
1741 }
1742 
1743 /**
1744  * gfs2_map_journal_extents - Cache journal bmap info
1745  * @sdp: The super block
1746  * @jd: The journal to map
1747  *
1748  * Create a reusable "extent" mapping from all logical
1749  * blocks to all physical blocks for the given journal.  This will save
1750  * us time when writing journal blocks.  Most journals will have only one
1751  * extent that maps all their logical blocks.  That's because gfs2.mkfs
1752  * arranges the journal blocks sequentially to maximize performance.
1753  * So the extent would map the first block for the entire file length.
1754  * However, gfs2_jadd can happen while file activity is happening, so
1755  * those journals may not be sequential.  Less likely is the case where
1756  * the users created their own journals by mounting the metafs and
1757  * laying it out.  But it's still possible.  These journals might have
1758  * several extents.
1759  *
1760  * Returns: 0 on success, or error on failure
1761  */
1762 
1763 int gfs2_map_journal_extents(struct gfs2_sbd *sdp, struct gfs2_jdesc *jd)
1764 {
1765 	u64 lblock = 0;
1766 	u64 lblock_stop;
1767 	struct gfs2_inode *ip = GFS2_I(jd->jd_inode);
1768 	struct buffer_head bh;
1769 	unsigned int shift = sdp->sd_sb.sb_bsize_shift;
1770 	u64 size;
1771 	int rc;
1772 
1773 	lblock_stop = i_size_read(jd->jd_inode) >> shift;
1774 	size = (lblock_stop - lblock) << shift;
1775 	jd->nr_extents = 0;
1776 	WARN_ON(!list_empty(&jd->extent_list));
1777 
1778 	do {
1779 		bh.b_state = 0;
1780 		bh.b_blocknr = 0;
1781 		bh.b_size = size;
1782 		rc = gfs2_block_map(jd->jd_inode, lblock, &bh, 0);
1783 		if (rc || !buffer_mapped(&bh))
1784 			goto fail;
1785 		rc = gfs2_add_jextent(jd, lblock, bh.b_blocknr, bh.b_size >> shift);
1786 		if (rc)
1787 			goto fail;
1788 		size -= bh.b_size;
1789 		lblock += (bh.b_size >> ip->i_inode.i_blkbits);
1790 	} while(size > 0);
1791 
1792 	fs_info(sdp, "journal %d mapped with %u extents\n", jd->jd_jid,
1793 		jd->nr_extents);
1794 	return 0;
1795 
1796 fail:
1797 	fs_warn(sdp, "error %d mapping journal %u at offset %llu (extent %u)\n",
1798 		rc, jd->jd_jid,
1799 		(unsigned long long)(i_size_read(jd->jd_inode) - size),
1800 		jd->nr_extents);
1801 	fs_warn(sdp, "bmap=%d lblock=%llu block=%llu, state=0x%08lx, size=%llu\n",
1802 		rc, (unsigned long long)lblock, (unsigned long long)bh.b_blocknr,
1803 		bh.b_state, (unsigned long long)bh.b_size);
1804 	gfs2_free_journal_extents(jd);
1805 	return rc;
1806 }
1807 
1808 /**
1809  * gfs2_write_alloc_required - figure out if a write will require an allocation
1810  * @ip: the file being written to
1811  * @offset: the offset to write to
1812  * @len: the number of bytes being written
1813  *
1814  * Returns: 1 if an alloc is required, 0 otherwise
1815  */
1816 
1817 int gfs2_write_alloc_required(struct gfs2_inode *ip, u64 offset,
1818 			      unsigned int len)
1819 {
1820 	struct gfs2_sbd *sdp = GFS2_SB(&ip->i_inode);
1821 	struct buffer_head bh;
1822 	unsigned int shift;
1823 	u64 lblock, lblock_stop, size;
1824 	u64 end_of_file;
1825 
1826 	if (!len)
1827 		return 0;
1828 
1829 	if (gfs2_is_stuffed(ip)) {
1830 		if (offset + len >
1831 		    sdp->sd_sb.sb_bsize - sizeof(struct gfs2_dinode))
1832 			return 1;
1833 		return 0;
1834 	}
1835 
1836 	shift = sdp->sd_sb.sb_bsize_shift;
1837 	BUG_ON(gfs2_is_dir(ip));
1838 	end_of_file = (i_size_read(&ip->i_inode) + sdp->sd_sb.sb_bsize - 1) >> shift;
1839 	lblock = offset >> shift;
1840 	lblock_stop = (offset + len + sdp->sd_sb.sb_bsize - 1) >> shift;
1841 	if (lblock_stop > end_of_file)
1842 		return 1;
1843 
1844 	size = (lblock_stop - lblock) << shift;
1845 	do {
1846 		bh.b_state = 0;
1847 		bh.b_size = size;
1848 		gfs2_block_map(&ip->i_inode, lblock, &bh, 0);
1849 		if (!buffer_mapped(&bh))
1850 			return 1;
1851 		size -= bh.b_size;
1852 		lblock += (bh.b_size >> ip->i_inode.i_blkbits);
1853 	} while(size > 0);
1854 
1855 	return 0;
1856 }
1857 
1858