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