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