Merge tag 'auxdisplay-for-linus-v5.15-rc1' of git://github.com/ojeda/linux
[linux-2.6-microblaze.git] / fs / gfs2 / rgrp.c
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
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 patter 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  * @wcount: The inode's write count, or NULL
684  *
685  */
686 void gfs2_rs_delete(struct gfs2_inode *ip, atomic_t *wcount)
687 {
688         down_write(&ip->i_rw_mutex);
689         if ((wcount == NULL) || (atomic_read(wcount) <= 1))
690                 gfs2_rs_deltree(&ip->i_res);
691         up_write(&ip->i_rw_mutex);
692 }
693
694 /**
695  * return_all_reservations - return all reserved blocks back to the rgrp.
696  * @rgd: the rgrp that needs its space back
697  *
698  * We previously reserved a bunch of blocks for allocation. Now we need to
699  * give them back. This leave the reservation structures in tact, but removes
700  * all of their corresponding "no-fly zones".
701  */
702 static void return_all_reservations(struct gfs2_rgrpd *rgd)
703 {
704         struct rb_node *n;
705         struct gfs2_blkreserv *rs;
706
707         spin_lock(&rgd->rd_rsspin);
708         while ((n = rb_first(&rgd->rd_rstree))) {
709                 rs = rb_entry(n, struct gfs2_blkreserv, rs_node);
710                 __rs_deltree(rs);
711         }
712         spin_unlock(&rgd->rd_rsspin);
713 }
714
715 void gfs2_clear_rgrpd(struct gfs2_sbd *sdp)
716 {
717         struct rb_node *n;
718         struct gfs2_rgrpd *rgd;
719         struct gfs2_glock *gl;
720
721         while ((n = rb_first(&sdp->sd_rindex_tree))) {
722                 rgd = rb_entry(n, struct gfs2_rgrpd, rd_node);
723                 gl = rgd->rd_gl;
724
725                 rb_erase(n, &sdp->sd_rindex_tree);
726
727                 if (gl) {
728                         if (gl->gl_state != LM_ST_UNLOCKED) {
729                                 gfs2_glock_cb(gl, LM_ST_UNLOCKED);
730                                 flush_delayed_work(&gl->gl_work);
731                         }
732                         gfs2_rgrp_brelse(rgd);
733                         glock_clear_object(gl, rgd);
734                         gfs2_glock_put(gl);
735                 }
736
737                 gfs2_free_clones(rgd);
738                 return_all_reservations(rgd);
739                 kfree(rgd->rd_bits);
740                 rgd->rd_bits = NULL;
741                 kmem_cache_free(gfs2_rgrpd_cachep, rgd);
742         }
743 }
744
745 /**
746  * compute_bitstructs - Compute the bitmap sizes
747  * @rgd: The resource group descriptor
748  *
749  * Calculates bitmap descriptors, one for each block that contains bitmap data
750  *
751  * Returns: errno
752  */
753
754 static int compute_bitstructs(struct gfs2_rgrpd *rgd)
755 {
756         struct gfs2_sbd *sdp = rgd->rd_sbd;
757         struct gfs2_bitmap *bi;
758         u32 length = rgd->rd_length; /* # blocks in hdr & bitmap */
759         u32 bytes_left, bytes;
760         int x;
761
762         if (!length)
763                 return -EINVAL;
764
765         rgd->rd_bits = kcalloc(length, sizeof(struct gfs2_bitmap), GFP_NOFS);
766         if (!rgd->rd_bits)
767                 return -ENOMEM;
768
769         bytes_left = rgd->rd_bitbytes;
770
771         for (x = 0; x < length; x++) {
772                 bi = rgd->rd_bits + x;
773
774                 bi->bi_flags = 0;
775                 /* small rgrp; bitmap stored completely in header block */
776                 if (length == 1) {
777                         bytes = bytes_left;
778                         bi->bi_offset = sizeof(struct gfs2_rgrp);
779                         bi->bi_start = 0;
780                         bi->bi_bytes = bytes;
781                         bi->bi_blocks = bytes * GFS2_NBBY;
782                 /* header block */
783                 } else if (x == 0) {
784                         bytes = sdp->sd_sb.sb_bsize - sizeof(struct gfs2_rgrp);
785                         bi->bi_offset = sizeof(struct gfs2_rgrp);
786                         bi->bi_start = 0;
787                         bi->bi_bytes = bytes;
788                         bi->bi_blocks = bytes * GFS2_NBBY;
789                 /* last block */
790                 } else if (x + 1 == length) {
791                         bytes = bytes_left;
792                         bi->bi_offset = sizeof(struct gfs2_meta_header);
793                         bi->bi_start = rgd->rd_bitbytes - bytes_left;
794                         bi->bi_bytes = bytes;
795                         bi->bi_blocks = bytes * GFS2_NBBY;
796                 /* other blocks */
797                 } else {
798                         bytes = sdp->sd_sb.sb_bsize -
799                                 sizeof(struct gfs2_meta_header);
800                         bi->bi_offset = sizeof(struct gfs2_meta_header);
801                         bi->bi_start = rgd->rd_bitbytes - bytes_left;
802                         bi->bi_bytes = bytes;
803                         bi->bi_blocks = bytes * GFS2_NBBY;
804                 }
805
806                 bytes_left -= bytes;
807         }
808
809         if (bytes_left) {
810                 gfs2_consist_rgrpd(rgd);
811                 return -EIO;
812         }
813         bi = rgd->rd_bits + (length - 1);
814         if ((bi->bi_start + bi->bi_bytes) * GFS2_NBBY != rgd->rd_data) {
815                 gfs2_lm(sdp,
816                         "ri_addr = %llu\n"
817                         "ri_length = %u\n"
818                         "ri_data0 = %llu\n"
819                         "ri_data = %u\n"
820                         "ri_bitbytes = %u\n"
821                         "start=%u len=%u offset=%u\n",
822                         (unsigned long long)rgd->rd_addr,
823                         rgd->rd_length,
824                         (unsigned long long)rgd->rd_data0,
825                         rgd->rd_data,
826                         rgd->rd_bitbytes,
827                         bi->bi_start, bi->bi_bytes, bi->bi_offset);
828                 gfs2_consist_rgrpd(rgd);
829                 return -EIO;
830         }
831
832         return 0;
833 }
834
835 /**
836  * gfs2_ri_total - Total up the file system space, according to the rindex.
837  * @sdp: the filesystem
838  *
839  */
840 u64 gfs2_ri_total(struct gfs2_sbd *sdp)
841 {
842         u64 total_data = 0;     
843         struct inode *inode = sdp->sd_rindex;
844         struct gfs2_inode *ip = GFS2_I(inode);
845         char buf[sizeof(struct gfs2_rindex)];
846         int error, rgrps;
847
848         for (rgrps = 0;; rgrps++) {
849                 loff_t pos = rgrps * sizeof(struct gfs2_rindex);
850
851                 if (pos + sizeof(struct gfs2_rindex) > i_size_read(inode))
852                         break;
853                 error = gfs2_internal_read(ip, buf, &pos,
854                                            sizeof(struct gfs2_rindex));
855                 if (error != sizeof(struct gfs2_rindex))
856                         break;
857                 total_data += be32_to_cpu(((struct gfs2_rindex *)buf)->ri_data);
858         }
859         return total_data;
860 }
861
862 static int rgd_insert(struct gfs2_rgrpd *rgd)
863 {
864         struct gfs2_sbd *sdp = rgd->rd_sbd;
865         struct rb_node **newn = &sdp->sd_rindex_tree.rb_node, *parent = NULL;
866
867         /* Figure out where to put new node */
868         while (*newn) {
869                 struct gfs2_rgrpd *cur = rb_entry(*newn, struct gfs2_rgrpd,
870                                                   rd_node);
871
872                 parent = *newn;
873                 if (rgd->rd_addr < cur->rd_addr)
874                         newn = &((*newn)->rb_left);
875                 else if (rgd->rd_addr > cur->rd_addr)
876                         newn = &((*newn)->rb_right);
877                 else
878                         return -EEXIST;
879         }
880
881         rb_link_node(&rgd->rd_node, parent, newn);
882         rb_insert_color(&rgd->rd_node, &sdp->sd_rindex_tree);
883         sdp->sd_rgrps++;
884         return 0;
885 }
886
887 /**
888  * read_rindex_entry - Pull in a new resource index entry from the disk
889  * @ip: Pointer to the rindex inode
890  *
891  * Returns: 0 on success, > 0 on EOF, error code otherwise
892  */
893
894 static int read_rindex_entry(struct gfs2_inode *ip)
895 {
896         struct gfs2_sbd *sdp = GFS2_SB(&ip->i_inode);
897         loff_t pos = sdp->sd_rgrps * sizeof(struct gfs2_rindex);
898         struct gfs2_rindex buf;
899         int error;
900         struct gfs2_rgrpd *rgd;
901
902         if (pos >= i_size_read(&ip->i_inode))
903                 return 1;
904
905         error = gfs2_internal_read(ip, (char *)&buf, &pos,
906                                    sizeof(struct gfs2_rindex));
907
908         if (error != sizeof(struct gfs2_rindex))
909                 return (error == 0) ? 1 : error;
910
911         rgd = kmem_cache_zalloc(gfs2_rgrpd_cachep, GFP_NOFS);
912         error = -ENOMEM;
913         if (!rgd)
914                 return error;
915
916         rgd->rd_sbd = sdp;
917         rgd->rd_addr = be64_to_cpu(buf.ri_addr);
918         rgd->rd_length = be32_to_cpu(buf.ri_length);
919         rgd->rd_data0 = be64_to_cpu(buf.ri_data0);
920         rgd->rd_data = be32_to_cpu(buf.ri_data);
921         rgd->rd_bitbytes = be32_to_cpu(buf.ri_bitbytes);
922         spin_lock_init(&rgd->rd_rsspin);
923         mutex_init(&rgd->rd_mutex);
924
925         error = compute_bitstructs(rgd);
926         if (error)
927                 goto fail;
928
929         error = gfs2_glock_get(sdp, rgd->rd_addr,
930                                &gfs2_rgrp_glops, CREATE, &rgd->rd_gl);
931         if (error)
932                 goto fail;
933
934         rgd->rd_rgl = (struct gfs2_rgrp_lvb *)rgd->rd_gl->gl_lksb.sb_lvbptr;
935         rgd->rd_flags &= ~(GFS2_RDF_UPTODATE | GFS2_RDF_PREFERRED);
936         if (rgd->rd_data > sdp->sd_max_rg_data)
937                 sdp->sd_max_rg_data = rgd->rd_data;
938         spin_lock(&sdp->sd_rindex_spin);
939         error = rgd_insert(rgd);
940         spin_unlock(&sdp->sd_rindex_spin);
941         if (!error) {
942                 glock_set_object(rgd->rd_gl, rgd);
943                 return 0;
944         }
945
946         error = 0; /* someone else read in the rgrp; free it and ignore it */
947         gfs2_glock_put(rgd->rd_gl);
948
949 fail:
950         kfree(rgd->rd_bits);
951         rgd->rd_bits = NULL;
952         kmem_cache_free(gfs2_rgrpd_cachep, rgd);
953         return error;
954 }
955
956 /**
957  * set_rgrp_preferences - Run all the rgrps, selecting some we prefer to use
958  * @sdp: the GFS2 superblock
959  *
960  * The purpose of this function is to select a subset of the resource groups
961  * and mark them as PREFERRED. We do it in such a way that each node prefers
962  * to use a unique set of rgrps to minimize glock contention.
963  */
964 static void set_rgrp_preferences(struct gfs2_sbd *sdp)
965 {
966         struct gfs2_rgrpd *rgd, *first;
967         int i;
968
969         /* Skip an initial number of rgrps, based on this node's journal ID.
970            That should start each node out on its own set. */
971         rgd = gfs2_rgrpd_get_first(sdp);
972         for (i = 0; i < sdp->sd_lockstruct.ls_jid; i++)
973                 rgd = gfs2_rgrpd_get_next(rgd);
974         first = rgd;
975
976         do {
977                 rgd->rd_flags |= GFS2_RDF_PREFERRED;
978                 for (i = 0; i < sdp->sd_journals; i++) {
979                         rgd = gfs2_rgrpd_get_next(rgd);
980                         if (!rgd || rgd == first)
981                                 break;
982                 }
983         } while (rgd && rgd != first);
984 }
985
986 /**
987  * gfs2_ri_update - Pull in a new resource index from the disk
988  * @ip: pointer to the rindex inode
989  *
990  * Returns: 0 on successful update, error code otherwise
991  */
992
993 static int gfs2_ri_update(struct gfs2_inode *ip)
994 {
995         struct gfs2_sbd *sdp = GFS2_SB(&ip->i_inode);
996         int error;
997
998         do {
999                 error = read_rindex_entry(ip);
1000         } while (error == 0);
1001
1002         if (error < 0)
1003                 return error;
1004
1005         if (RB_EMPTY_ROOT(&sdp->sd_rindex_tree)) {
1006                 fs_err(sdp, "no resource groups found in the file system.\n");
1007                 return -ENOENT;
1008         }
1009         set_rgrp_preferences(sdp);
1010
1011         sdp->sd_rindex_uptodate = 1;
1012         return 0;
1013 }
1014
1015 /**
1016  * gfs2_rindex_update - Update the rindex if required
1017  * @sdp: The GFS2 superblock
1018  *
1019  * We grab a lock on the rindex inode to make sure that it doesn't
1020  * change whilst we are performing an operation. We keep this lock
1021  * for quite long periods of time compared to other locks. This
1022  * doesn't matter, since it is shared and it is very, very rarely
1023  * accessed in the exclusive mode (i.e. only when expanding the filesystem).
1024  *
1025  * This makes sure that we're using the latest copy of the resource index
1026  * special file, which might have been updated if someone expanded the
1027  * filesystem (via gfs2_grow utility), which adds new resource groups.
1028  *
1029  * Returns: 0 on succeess, error code otherwise
1030  */
1031
1032 int gfs2_rindex_update(struct gfs2_sbd *sdp)
1033 {
1034         struct gfs2_inode *ip = GFS2_I(sdp->sd_rindex);
1035         struct gfs2_glock *gl = ip->i_gl;
1036         struct gfs2_holder ri_gh;
1037         int error = 0;
1038         int unlock_required = 0;
1039
1040         /* Read new copy from disk if we don't have the latest */
1041         if (!sdp->sd_rindex_uptodate) {
1042                 if (!gfs2_glock_is_locked_by_me(gl)) {
1043                         error = gfs2_glock_nq_init(gl, LM_ST_SHARED, 0, &ri_gh);
1044                         if (error)
1045                                 return error;
1046                         unlock_required = 1;
1047                 }
1048                 if (!sdp->sd_rindex_uptodate)
1049                         error = gfs2_ri_update(ip);
1050                 if (unlock_required)
1051                         gfs2_glock_dq_uninit(&ri_gh);
1052         }
1053
1054         return error;
1055 }
1056
1057 static void gfs2_rgrp_in(struct gfs2_rgrpd *rgd, const void *buf)
1058 {
1059         const struct gfs2_rgrp *str = buf;
1060         u32 rg_flags;
1061
1062         rg_flags = be32_to_cpu(str->rg_flags);
1063         rg_flags &= ~GFS2_RDF_MASK;
1064         rgd->rd_flags &= GFS2_RDF_MASK;
1065         rgd->rd_flags |= rg_flags;
1066         rgd->rd_free = be32_to_cpu(str->rg_free);
1067         rgd->rd_dinodes = be32_to_cpu(str->rg_dinodes);
1068         rgd->rd_igeneration = be64_to_cpu(str->rg_igeneration);
1069         /* rd_data0, rd_data and rd_bitbytes already set from rindex */
1070 }
1071
1072 static void gfs2_rgrp_ondisk2lvb(struct gfs2_rgrp_lvb *rgl, const void *buf)
1073 {
1074         const struct gfs2_rgrp *str = buf;
1075
1076         rgl->rl_magic = cpu_to_be32(GFS2_MAGIC);
1077         rgl->rl_flags = str->rg_flags;
1078         rgl->rl_free = str->rg_free;
1079         rgl->rl_dinodes = str->rg_dinodes;
1080         rgl->rl_igeneration = str->rg_igeneration;
1081         rgl->__pad = 0UL;
1082 }
1083
1084 static void gfs2_rgrp_out(struct gfs2_rgrpd *rgd, void *buf)
1085 {
1086         struct gfs2_rgrpd *next = gfs2_rgrpd_get_next(rgd);
1087         struct gfs2_rgrp *str = buf;
1088         u32 crc;
1089
1090         str->rg_flags = cpu_to_be32(rgd->rd_flags & ~GFS2_RDF_MASK);
1091         str->rg_free = cpu_to_be32(rgd->rd_free);
1092         str->rg_dinodes = cpu_to_be32(rgd->rd_dinodes);
1093         if (next == NULL)
1094                 str->rg_skip = 0;
1095         else if (next->rd_addr > rgd->rd_addr)
1096                 str->rg_skip = cpu_to_be32(next->rd_addr - rgd->rd_addr);
1097         str->rg_igeneration = cpu_to_be64(rgd->rd_igeneration);
1098         str->rg_data0 = cpu_to_be64(rgd->rd_data0);
1099         str->rg_data = cpu_to_be32(rgd->rd_data);
1100         str->rg_bitbytes = cpu_to_be32(rgd->rd_bitbytes);
1101         str->rg_crc = 0;
1102         crc = gfs2_disk_hash(buf, sizeof(struct gfs2_rgrp));
1103         str->rg_crc = cpu_to_be32(crc);
1104
1105         memset(&str->rg_reserved, 0, sizeof(str->rg_reserved));
1106         gfs2_rgrp_ondisk2lvb(rgd->rd_rgl, buf);
1107 }
1108
1109 static int gfs2_rgrp_lvb_valid(struct gfs2_rgrpd *rgd)
1110 {
1111         struct gfs2_rgrp_lvb *rgl = rgd->rd_rgl;
1112         struct gfs2_rgrp *str = (struct gfs2_rgrp *)rgd->rd_bits[0].bi_bh->b_data;
1113         struct gfs2_sbd *sdp = rgd->rd_sbd;
1114         int valid = 1;
1115
1116         if (rgl->rl_flags != str->rg_flags) {
1117                 fs_warn(sdp, "GFS2: rgd: %llu lvb flag mismatch %u/%u",
1118                         (unsigned long long)rgd->rd_addr,
1119                        be32_to_cpu(rgl->rl_flags), be32_to_cpu(str->rg_flags));
1120                 valid = 0;
1121         }
1122         if (rgl->rl_free != str->rg_free) {
1123                 fs_warn(sdp, "GFS2: rgd: %llu lvb free mismatch %u/%u",
1124                         (unsigned long long)rgd->rd_addr,
1125                         be32_to_cpu(rgl->rl_free), be32_to_cpu(str->rg_free));
1126                 valid = 0;
1127         }
1128         if (rgl->rl_dinodes != str->rg_dinodes) {
1129                 fs_warn(sdp, "GFS2: rgd: %llu lvb dinode mismatch %u/%u",
1130                         (unsigned long long)rgd->rd_addr,
1131                         be32_to_cpu(rgl->rl_dinodes),
1132                         be32_to_cpu(str->rg_dinodes));
1133                 valid = 0;
1134         }
1135         if (rgl->rl_igeneration != str->rg_igeneration) {
1136                 fs_warn(sdp, "GFS2: rgd: %llu lvb igen mismatch %llu/%llu",
1137                         (unsigned long long)rgd->rd_addr,
1138                         (unsigned long long)be64_to_cpu(rgl->rl_igeneration),
1139                         (unsigned long long)be64_to_cpu(str->rg_igeneration));
1140                 valid = 0;
1141         }
1142         return valid;
1143 }
1144
1145 static u32 count_unlinked(struct gfs2_rgrpd *rgd)
1146 {
1147         struct gfs2_bitmap *bi;
1148         const u32 length = rgd->rd_length;
1149         const u8 *buffer = NULL;
1150         u32 i, goal, count = 0;
1151
1152         for (i = 0, bi = rgd->rd_bits; i < length; i++, bi++) {
1153                 goal = 0;
1154                 buffer = bi->bi_bh->b_data + bi->bi_offset;
1155                 WARN_ON(!buffer_uptodate(bi->bi_bh));
1156                 while (goal < bi->bi_blocks) {
1157                         goal = gfs2_bitfit(buffer, bi->bi_bytes, goal,
1158                                            GFS2_BLKST_UNLINKED);
1159                         if (goal == BFITNOENT)
1160                                 break;
1161                         count++;
1162                         goal++;
1163                 }
1164         }
1165
1166         return count;
1167 }
1168
1169 static void rgrp_set_bitmap_flags(struct gfs2_rgrpd *rgd)
1170 {
1171         struct gfs2_bitmap *bi;
1172         int x;
1173
1174         if (rgd->rd_free) {
1175                 for (x = 0; x < rgd->rd_length; x++) {
1176                         bi = rgd->rd_bits + x;
1177                         clear_bit(GBF_FULL, &bi->bi_flags);
1178                 }
1179         } else {
1180                 for (x = 0; x < rgd->rd_length; x++) {
1181                         bi = rgd->rd_bits + x;
1182                         set_bit(GBF_FULL, &bi->bi_flags);
1183                 }
1184         }
1185 }
1186
1187 /**
1188  * gfs2_rgrp_bh_get - Read in a RG's header and bitmaps
1189  * @rgd: the struct gfs2_rgrpd describing the RG to read in
1190  *
1191  * Read in all of a Resource Group's header and bitmap blocks.
1192  * Caller must eventually call gfs2_rgrp_brelse() to free the bitmaps.
1193  *
1194  * Returns: errno
1195  */
1196
1197 static int gfs2_rgrp_bh_get(struct gfs2_rgrpd *rgd)
1198 {
1199         struct gfs2_sbd *sdp = rgd->rd_sbd;
1200         struct gfs2_glock *gl = rgd->rd_gl;
1201         unsigned int length = rgd->rd_length;
1202         struct gfs2_bitmap *bi;
1203         unsigned int x, y;
1204         int error;
1205
1206         if (rgd->rd_bits[0].bi_bh != NULL)
1207                 return 0;
1208
1209         for (x = 0; x < length; x++) {
1210                 bi = rgd->rd_bits + x;
1211                 error = gfs2_meta_read(gl, rgd->rd_addr + x, 0, 0, &bi->bi_bh);
1212                 if (error)
1213                         goto fail;
1214         }
1215
1216         for (y = length; y--;) {
1217                 bi = rgd->rd_bits + y;
1218                 error = gfs2_meta_wait(sdp, bi->bi_bh);
1219                 if (error)
1220                         goto fail;
1221                 if (gfs2_metatype_check(sdp, bi->bi_bh, y ? GFS2_METATYPE_RB :
1222                                               GFS2_METATYPE_RG)) {
1223                         error = -EIO;
1224                         goto fail;
1225                 }
1226         }
1227
1228         if (!(rgd->rd_flags & GFS2_RDF_UPTODATE)) {
1229                 gfs2_rgrp_in(rgd, (rgd->rd_bits[0].bi_bh)->b_data);
1230                 rgrp_set_bitmap_flags(rgd);
1231                 rgd->rd_flags |= (GFS2_RDF_UPTODATE | GFS2_RDF_CHECK);
1232                 rgd->rd_free_clone = rgd->rd_free;
1233                 BUG_ON(rgd->rd_reserved);
1234                 /* max out the rgrp allocation failure point */
1235                 rgd->rd_extfail_pt = rgd->rd_free;
1236         }
1237         if (cpu_to_be32(GFS2_MAGIC) != rgd->rd_rgl->rl_magic) {
1238                 rgd->rd_rgl->rl_unlinked = cpu_to_be32(count_unlinked(rgd));
1239                 gfs2_rgrp_ondisk2lvb(rgd->rd_rgl,
1240                                      rgd->rd_bits[0].bi_bh->b_data);
1241         }
1242         else if (sdp->sd_args.ar_rgrplvb) {
1243                 if (!gfs2_rgrp_lvb_valid(rgd)){
1244                         gfs2_consist_rgrpd(rgd);
1245                         error = -EIO;
1246                         goto fail;
1247                 }
1248                 if (rgd->rd_rgl->rl_unlinked == 0)
1249                         rgd->rd_flags &= ~GFS2_RDF_CHECK;
1250         }
1251         return 0;
1252
1253 fail:
1254         while (x--) {
1255                 bi = rgd->rd_bits + x;
1256                 brelse(bi->bi_bh);
1257                 bi->bi_bh = NULL;
1258                 gfs2_assert_warn(sdp, !bi->bi_clone);
1259         }
1260
1261         return error;
1262 }
1263
1264 static int update_rgrp_lvb(struct gfs2_rgrpd *rgd)
1265 {
1266         u32 rl_flags;
1267
1268         if (rgd->rd_flags & GFS2_RDF_UPTODATE)
1269                 return 0;
1270
1271         if (cpu_to_be32(GFS2_MAGIC) != rgd->rd_rgl->rl_magic)
1272                 return gfs2_rgrp_bh_get(rgd);
1273
1274         rl_flags = be32_to_cpu(rgd->rd_rgl->rl_flags);
1275         rl_flags &= ~GFS2_RDF_MASK;
1276         rgd->rd_flags &= GFS2_RDF_MASK;
1277         rgd->rd_flags |= (rl_flags | GFS2_RDF_CHECK);
1278         if (rgd->rd_rgl->rl_unlinked == 0)
1279                 rgd->rd_flags &= ~GFS2_RDF_CHECK;
1280         rgd->rd_free = be32_to_cpu(rgd->rd_rgl->rl_free);
1281         rgrp_set_bitmap_flags(rgd);
1282         rgd->rd_free_clone = rgd->rd_free;
1283         BUG_ON(rgd->rd_reserved);
1284         /* max out the rgrp allocation failure point */
1285         rgd->rd_extfail_pt = rgd->rd_free;
1286         rgd->rd_dinodes = be32_to_cpu(rgd->rd_rgl->rl_dinodes);
1287         rgd->rd_igeneration = be64_to_cpu(rgd->rd_rgl->rl_igeneration);
1288         return 0;
1289 }
1290
1291 int gfs2_rgrp_go_lock(struct gfs2_holder *gh)
1292 {
1293         struct gfs2_rgrpd *rgd = gh->gh_gl->gl_object;
1294         struct gfs2_sbd *sdp = rgd->rd_sbd;
1295
1296         if (gh->gh_flags & GL_SKIP && sdp->sd_args.ar_rgrplvb)
1297                 return 0;
1298         return gfs2_rgrp_bh_get(rgd);
1299 }
1300
1301 /**
1302  * gfs2_rgrp_brelse - Release RG bitmaps read in with gfs2_rgrp_bh_get()
1303  * @rgd: The resource group
1304  *
1305  */
1306
1307 void gfs2_rgrp_brelse(struct gfs2_rgrpd *rgd)
1308 {
1309         int x, length = rgd->rd_length;
1310
1311         for (x = 0; x < length; x++) {
1312                 struct gfs2_bitmap *bi = rgd->rd_bits + x;
1313                 if (bi->bi_bh) {
1314                         brelse(bi->bi_bh);
1315                         bi->bi_bh = NULL;
1316                 }
1317         }
1318 }
1319
1320 int gfs2_rgrp_send_discards(struct gfs2_sbd *sdp, u64 offset,
1321                              struct buffer_head *bh,
1322                              const struct gfs2_bitmap *bi, unsigned minlen, u64 *ptrimmed)
1323 {
1324         struct super_block *sb = sdp->sd_vfs;
1325         u64 blk;
1326         sector_t start = 0;
1327         sector_t nr_blks = 0;
1328         int rv;
1329         unsigned int x;
1330         u32 trimmed = 0;
1331         u8 diff;
1332
1333         for (x = 0; x < bi->bi_bytes; x++) {
1334                 const u8 *clone = bi->bi_clone ? bi->bi_clone : bi->bi_bh->b_data;
1335                 clone += bi->bi_offset;
1336                 clone += x;
1337                 if (bh) {
1338                         const u8 *orig = bh->b_data + bi->bi_offset + x;
1339                         diff = ~(*orig | (*orig >> 1)) & (*clone | (*clone >> 1));
1340                 } else {
1341                         diff = ~(*clone | (*clone >> 1));
1342                 }
1343                 diff &= 0x55;
1344                 if (diff == 0)
1345                         continue;
1346                 blk = offset + ((bi->bi_start + x) * GFS2_NBBY);
1347                 while(diff) {
1348                         if (diff & 1) {
1349                                 if (nr_blks == 0)
1350                                         goto start_new_extent;
1351                                 if ((start + nr_blks) != blk) {
1352                                         if (nr_blks >= minlen) {
1353                                                 rv = sb_issue_discard(sb,
1354                                                         start, nr_blks,
1355                                                         GFP_NOFS, 0);
1356                                                 if (rv)
1357                                                         goto fail;
1358                                                 trimmed += nr_blks;
1359                                         }
1360                                         nr_blks = 0;
1361 start_new_extent:
1362                                         start = blk;
1363                                 }
1364                                 nr_blks++;
1365                         }
1366                         diff >>= 2;
1367                         blk++;
1368                 }
1369         }
1370         if (nr_blks >= minlen) {
1371                 rv = sb_issue_discard(sb, start, nr_blks, GFP_NOFS, 0);
1372                 if (rv)
1373                         goto fail;
1374                 trimmed += nr_blks;
1375         }
1376         if (ptrimmed)
1377                 *ptrimmed = trimmed;
1378         return 0;
1379
1380 fail:
1381         if (sdp->sd_args.ar_discard)
1382                 fs_warn(sdp, "error %d on discard request, turning discards off for this filesystem\n", rv);
1383         sdp->sd_args.ar_discard = 0;
1384         return -EIO;
1385 }
1386
1387 /**
1388  * gfs2_fitrim - Generate discard requests for unused bits of the filesystem
1389  * @filp: Any file on the filesystem
1390  * @argp: Pointer to the arguments (also used to pass result)
1391  *
1392  * Returns: 0 on success, otherwise error code
1393  */
1394
1395 int gfs2_fitrim(struct file *filp, void __user *argp)
1396 {
1397         struct inode *inode = file_inode(filp);
1398         struct gfs2_sbd *sdp = GFS2_SB(inode);
1399         struct request_queue *q = bdev_get_queue(sdp->sd_vfs->s_bdev);
1400         struct buffer_head *bh;
1401         struct gfs2_rgrpd *rgd;
1402         struct gfs2_rgrpd *rgd_end;
1403         struct gfs2_holder gh;
1404         struct fstrim_range r;
1405         int ret = 0;
1406         u64 amt;
1407         u64 trimmed = 0;
1408         u64 start, end, minlen;
1409         unsigned int x;
1410         unsigned bs_shift = sdp->sd_sb.sb_bsize_shift;
1411
1412         if (!capable(CAP_SYS_ADMIN))
1413                 return -EPERM;
1414
1415         if (!test_bit(SDF_JOURNAL_LIVE, &sdp->sd_flags))
1416                 return -EROFS;
1417
1418         if (!blk_queue_discard(q))
1419                 return -EOPNOTSUPP;
1420
1421         if (copy_from_user(&r, argp, sizeof(r)))
1422                 return -EFAULT;
1423
1424         ret = gfs2_rindex_update(sdp);
1425         if (ret)
1426                 return ret;
1427
1428         start = r.start >> bs_shift;
1429         end = start + (r.len >> bs_shift);
1430         minlen = max_t(u64, r.minlen,
1431                        q->limits.discard_granularity) >> bs_shift;
1432
1433         if (end <= start || minlen > sdp->sd_max_rg_data)
1434                 return -EINVAL;
1435
1436         rgd = gfs2_blk2rgrpd(sdp, start, 0);
1437         rgd_end = gfs2_blk2rgrpd(sdp, end, 0);
1438
1439         if ((gfs2_rgrpd_get_first(sdp) == gfs2_rgrpd_get_next(rgd_end))
1440             && (start > rgd_end->rd_data0 + rgd_end->rd_data))
1441                 return -EINVAL; /* start is beyond the end of the fs */
1442
1443         while (1) {
1444
1445                 ret = gfs2_glock_nq_init(rgd->rd_gl, LM_ST_EXCLUSIVE,
1446                                          LM_FLAG_NODE_SCOPE, &gh);
1447                 if (ret)
1448                         goto out;
1449
1450                 if (!(rgd->rd_flags & GFS2_RGF_TRIMMED)) {
1451                         /* Trim each bitmap in the rgrp */
1452                         for (x = 0; x < rgd->rd_length; x++) {
1453                                 struct gfs2_bitmap *bi = rgd->rd_bits + x;
1454                                 rgrp_lock_local(rgd);
1455                                 ret = gfs2_rgrp_send_discards(sdp,
1456                                                 rgd->rd_data0, NULL, bi, minlen,
1457                                                 &amt);
1458                                 rgrp_unlock_local(rgd);
1459                                 if (ret) {
1460                                         gfs2_glock_dq_uninit(&gh);
1461                                         goto out;
1462                                 }
1463                                 trimmed += amt;
1464                         }
1465
1466                         /* Mark rgrp as having been trimmed */
1467                         ret = gfs2_trans_begin(sdp, RES_RG_HDR, 0);
1468                         if (ret == 0) {
1469                                 bh = rgd->rd_bits[0].bi_bh;
1470                                 rgrp_lock_local(rgd);
1471                                 rgd->rd_flags |= GFS2_RGF_TRIMMED;
1472                                 gfs2_trans_add_meta(rgd->rd_gl, bh);
1473                                 gfs2_rgrp_out(rgd, bh->b_data);
1474                                 rgrp_unlock_local(rgd);
1475                                 gfs2_trans_end(sdp);
1476                         }
1477                 }
1478                 gfs2_glock_dq_uninit(&gh);
1479
1480                 if (rgd == rgd_end)
1481                         break;
1482
1483                 rgd = gfs2_rgrpd_get_next(rgd);
1484         }
1485
1486 out:
1487         r.len = trimmed << bs_shift;
1488         if (copy_to_user(argp, &r, sizeof(r)))
1489                 return -EFAULT;
1490
1491         return ret;
1492 }
1493
1494 /**
1495  * rs_insert - insert a new multi-block reservation into the rgrp's rb_tree
1496  * @ip: the inode structure
1497  *
1498  */
1499 static void rs_insert(struct gfs2_inode *ip)
1500 {
1501         struct rb_node **newn, *parent = NULL;
1502         int rc;
1503         struct gfs2_blkreserv *rs = &ip->i_res;
1504         struct gfs2_rgrpd *rgd = rs->rs_rgd;
1505
1506         BUG_ON(gfs2_rs_active(rs));
1507
1508         spin_lock(&rgd->rd_rsspin);
1509         newn = &rgd->rd_rstree.rb_node;
1510         while (*newn) {
1511                 struct gfs2_blkreserv *cur =
1512                         rb_entry(*newn, struct gfs2_blkreserv, rs_node);
1513
1514                 parent = *newn;
1515                 rc = rs_cmp(rs->rs_start, rs->rs_requested, cur);
1516                 if (rc > 0)
1517                         newn = &((*newn)->rb_right);
1518                 else if (rc < 0)
1519                         newn = &((*newn)->rb_left);
1520                 else {
1521                         spin_unlock(&rgd->rd_rsspin);
1522                         WARN_ON(1);
1523                         return;
1524                 }
1525         }
1526
1527         rb_link_node(&rs->rs_node, parent, newn);
1528         rb_insert_color(&rs->rs_node, &rgd->rd_rstree);
1529
1530         /* Do our rgrp accounting for the reservation */
1531         rgd->rd_requested += rs->rs_requested; /* blocks requested */
1532         spin_unlock(&rgd->rd_rsspin);
1533         trace_gfs2_rs(rs, TRACE_RS_INSERT);
1534 }
1535
1536 /**
1537  * rgd_free - return the number of free blocks we can allocate
1538  * @rgd: the resource group
1539  * @rs: The reservation to free
1540  *
1541  * This function returns the number of free blocks for an rgrp.
1542  * That's the clone-free blocks (blocks that are free, not including those
1543  * still being used for unlinked files that haven't been deleted.)
1544  *
1545  * It also subtracts any blocks reserved by someone else, but does not
1546  * include free blocks that are still part of our current reservation,
1547  * because obviously we can (and will) allocate them.
1548  */
1549 static inline u32 rgd_free(struct gfs2_rgrpd *rgd, struct gfs2_blkreserv *rs)
1550 {
1551         u32 tot_reserved, tot_free;
1552
1553         if (WARN_ON_ONCE(rgd->rd_requested < rs->rs_requested))
1554                 return 0;
1555         tot_reserved = rgd->rd_requested - rs->rs_requested;
1556
1557         if (rgd->rd_free_clone < tot_reserved)
1558                 tot_reserved = 0;
1559
1560         tot_free = rgd->rd_free_clone - tot_reserved;
1561
1562         return tot_free;
1563 }
1564
1565 /**
1566  * rg_mblk_search - find a group of multiple free blocks to form a reservation
1567  * @rgd: the resource group descriptor
1568  * @ip: pointer to the inode for which we're reserving blocks
1569  * @ap: the allocation parameters
1570  *
1571  */
1572
1573 static void rg_mblk_search(struct gfs2_rgrpd *rgd, struct gfs2_inode *ip,
1574                            const struct gfs2_alloc_parms *ap)
1575 {
1576         struct gfs2_rbm rbm = { .rgd = rgd, };
1577         u64 goal;
1578         struct gfs2_blkreserv *rs = &ip->i_res;
1579         u32 extlen;
1580         u32 free_blocks, blocks_available;
1581         int ret;
1582         struct inode *inode = &ip->i_inode;
1583
1584         spin_lock(&rgd->rd_rsspin);
1585         free_blocks = rgd_free(rgd, rs);
1586         if (rgd->rd_free_clone < rgd->rd_requested)
1587                 free_blocks = 0;
1588         blocks_available = rgd->rd_free_clone - rgd->rd_reserved;
1589         if (rgd == rs->rs_rgd)
1590                 blocks_available += rs->rs_reserved;
1591         spin_unlock(&rgd->rd_rsspin);
1592
1593         if (S_ISDIR(inode->i_mode))
1594                 extlen = 1;
1595         else {
1596                 extlen = max_t(u32, atomic_read(&ip->i_sizehint), ap->target);
1597                 extlen = clamp(extlen, (u32)RGRP_RSRV_MINBLKS, free_blocks);
1598         }
1599         if (free_blocks < extlen || blocks_available < extlen)
1600                 return;
1601
1602         /* Find bitmap block that contains bits for goal block */
1603         if (rgrp_contains_block(rgd, ip->i_goal))
1604                 goal = ip->i_goal;
1605         else
1606                 goal = rgd->rd_last_alloc + rgd->rd_data0;
1607
1608         if (WARN_ON(gfs2_rbm_from_block(&rbm, goal)))
1609                 return;
1610
1611         ret = gfs2_rbm_find(&rbm, GFS2_BLKST_FREE, &extlen, &ip->i_res, true);
1612         if (ret == 0) {
1613                 rs->rs_start = gfs2_rbm_to_block(&rbm);
1614                 rs->rs_requested = extlen;
1615                 rs_insert(ip);
1616         } else {
1617                 if (goal == rgd->rd_last_alloc + rgd->rd_data0)
1618                         rgd->rd_last_alloc = 0;
1619         }
1620 }
1621
1622 /**
1623  * gfs2_next_unreserved_block - Return next block that is not reserved
1624  * @rgd: The resource group
1625  * @block: The starting block
1626  * @length: The required length
1627  * @ignore_rs: Reservation to ignore
1628  *
1629  * If the block does not appear in any reservation, then return the
1630  * block number unchanged. If it does appear in the reservation, then
1631  * keep looking through the tree of reservations in order to find the
1632  * first block number which is not reserved.
1633  */
1634
1635 static u64 gfs2_next_unreserved_block(struct gfs2_rgrpd *rgd, u64 block,
1636                                       u32 length,
1637                                       struct gfs2_blkreserv *ignore_rs)
1638 {
1639         struct gfs2_blkreserv *rs;
1640         struct rb_node *n;
1641         int rc;
1642
1643         spin_lock(&rgd->rd_rsspin);
1644         n = rgd->rd_rstree.rb_node;
1645         while (n) {
1646                 rs = rb_entry(n, struct gfs2_blkreserv, rs_node);
1647                 rc = rs_cmp(block, length, rs);
1648                 if (rc < 0)
1649                         n = n->rb_left;
1650                 else if (rc > 0)
1651                         n = n->rb_right;
1652                 else
1653                         break;
1654         }
1655
1656         if (n) {
1657                 while (rs_cmp(block, length, rs) == 0 && rs != ignore_rs) {
1658                         block = rs->rs_start + rs->rs_requested;
1659                         n = n->rb_right;
1660                         if (n == NULL)
1661                                 break;
1662                         rs = rb_entry(n, struct gfs2_blkreserv, rs_node);
1663                 }
1664         }
1665
1666         spin_unlock(&rgd->rd_rsspin);
1667         return block;
1668 }
1669
1670 /**
1671  * gfs2_reservation_check_and_update - Check for reservations during block alloc
1672  * @rbm: The current position in the resource group
1673  * @rs: Our own reservation
1674  * @minext: The minimum extent length
1675  * @maxext: A pointer to the maximum extent structure
1676  *
1677  * This checks the current position in the rgrp to see whether there is
1678  * a reservation covering this block. If not then this function is a
1679  * no-op. If there is, then the position is moved to the end of the
1680  * contiguous reservation(s) so that we are pointing at the first
1681  * non-reserved block.
1682  *
1683  * Returns: 0 if no reservation, 1 if @rbm has changed, otherwise an error
1684  */
1685
1686 static int gfs2_reservation_check_and_update(struct gfs2_rbm *rbm,
1687                                              struct gfs2_blkreserv *rs,
1688                                              u32 minext,
1689                                              struct gfs2_extent *maxext)
1690 {
1691         u64 block = gfs2_rbm_to_block(rbm);
1692         u32 extlen = 1;
1693         u64 nblock;
1694
1695         /*
1696          * If we have a minimum extent length, then skip over any extent
1697          * which is less than the min extent length in size.
1698          */
1699         if (minext > 1) {
1700                 extlen = gfs2_free_extlen(rbm, minext);
1701                 if (extlen <= maxext->len)
1702                         goto fail;
1703         }
1704
1705         /*
1706          * Check the extent which has been found against the reservations
1707          * and skip if parts of it are already reserved
1708          */
1709         nblock = gfs2_next_unreserved_block(rbm->rgd, block, extlen, rs);
1710         if (nblock == block) {
1711                 if (!minext || extlen >= minext)
1712                         return 0;
1713
1714                 if (extlen > maxext->len) {
1715                         maxext->len = extlen;
1716                         maxext->rbm = *rbm;
1717                 }
1718         } else {
1719                 u64 len = nblock - block;
1720                 if (len >= (u64)1 << 32)
1721                         return -E2BIG;
1722                 extlen = len;
1723         }
1724 fail:
1725         if (gfs2_rbm_add(rbm, extlen))
1726                 return -E2BIG;
1727         return 1;
1728 }
1729
1730 /**
1731  * gfs2_rbm_find - Look for blocks of a particular state
1732  * @rbm: Value/result starting position and final position
1733  * @state: The state which we want to find
1734  * @minext: Pointer to the requested extent length
1735  *          This is updated to be the actual reservation size.
1736  * @rs: Our own reservation (NULL to skip checking for reservations)
1737  * @nowrap: Stop looking at the end of the rgrp, rather than wrapping
1738  *          around until we've reached the starting point.
1739  *
1740  * Side effects:
1741  * - If looking for free blocks, we set GBF_FULL on each bitmap which
1742  *   has no free blocks in it.
1743  * - If looking for free blocks, we set rd_extfail_pt on each rgrp which
1744  *   has come up short on a free block search.
1745  *
1746  * Returns: 0 on success, -ENOSPC if there is no block of the requested state
1747  */
1748
1749 static int gfs2_rbm_find(struct gfs2_rbm *rbm, u8 state, u32 *minext,
1750                          struct gfs2_blkreserv *rs, bool nowrap)
1751 {
1752         bool scan_from_start = rbm->bii == 0 && rbm->offset == 0;
1753         struct buffer_head *bh;
1754         int last_bii;
1755         u32 offset;
1756         u8 *buffer;
1757         bool wrapped = false;
1758         int ret;
1759         struct gfs2_bitmap *bi;
1760         struct gfs2_extent maxext = { .rbm.rgd = rbm->rgd, };
1761
1762         /*
1763          * Determine the last bitmap to search.  If we're not starting at the
1764          * beginning of a bitmap, we need to search that bitmap twice to scan
1765          * the entire resource group.
1766          */
1767         last_bii = rbm->bii - (rbm->offset == 0);
1768
1769         while(1) {
1770                 bi = rbm_bi(rbm);
1771                 if (test_bit(GBF_FULL, &bi->bi_flags) &&
1772                     (state == GFS2_BLKST_FREE))
1773                         goto next_bitmap;
1774
1775                 bh = bi->bi_bh;
1776                 buffer = bh->b_data + bi->bi_offset;
1777                 WARN_ON(!buffer_uptodate(bh));
1778                 if (state != GFS2_BLKST_UNLINKED && bi->bi_clone)
1779                         buffer = bi->bi_clone + bi->bi_offset;
1780                 offset = gfs2_bitfit(buffer, bi->bi_bytes, rbm->offset, state);
1781                 if (offset == BFITNOENT) {
1782                         if (state == GFS2_BLKST_FREE && rbm->offset == 0)
1783                                 set_bit(GBF_FULL, &bi->bi_flags);
1784                         goto next_bitmap;
1785                 }
1786                 rbm->offset = offset;
1787                 if (!rs || !minext)
1788                         return 0;
1789
1790                 ret = gfs2_reservation_check_and_update(rbm, rs, *minext,
1791                                                         &maxext);
1792                 if (ret == 0)
1793                         return 0;
1794                 if (ret > 0)
1795                         goto next_iter;
1796                 if (ret == -E2BIG) {
1797                         rbm->bii = 0;
1798                         rbm->offset = 0;
1799                         goto res_covered_end_of_rgrp;
1800                 }
1801                 return ret;
1802
1803 next_bitmap:    /* Find next bitmap in the rgrp */
1804                 rbm->offset = 0;
1805                 rbm->bii++;
1806                 if (rbm->bii == rbm->rgd->rd_length)
1807                         rbm->bii = 0;
1808 res_covered_end_of_rgrp:
1809                 if (rbm->bii == 0) {
1810                         if (wrapped)
1811                                 break;
1812                         wrapped = true;
1813                         if (nowrap)
1814                                 break;
1815                 }
1816 next_iter:
1817                 /* Have we scanned the entire resource group? */
1818                 if (wrapped && rbm->bii > last_bii)
1819                         break;
1820         }
1821
1822         if (state != GFS2_BLKST_FREE)
1823                 return -ENOSPC;
1824
1825         /* If the extent was too small, and it's smaller than the smallest
1826            to have failed before, remember for future reference that it's
1827            useless to search this rgrp again for this amount or more. */
1828         if (wrapped && (scan_from_start || rbm->bii > last_bii) &&
1829             *minext < rbm->rgd->rd_extfail_pt)
1830                 rbm->rgd->rd_extfail_pt = *minext - 1;
1831
1832         /* If the maximum extent we found is big enough to fulfill the
1833            minimum requirements, use it anyway. */
1834         if (maxext.len) {
1835                 *rbm = maxext.rbm;
1836                 *minext = maxext.len;
1837                 return 0;
1838         }
1839
1840         return -ENOSPC;
1841 }
1842
1843 /**
1844  * try_rgrp_unlink - Look for any unlinked, allocated, but unused inodes
1845  * @rgd: The rgrp
1846  * @last_unlinked: block address of the last dinode we unlinked
1847  * @skip: block address we should explicitly not unlink
1848  *
1849  * Returns: 0 if no error
1850  *          The inode, if one has been found, in inode.
1851  */
1852
1853 static void try_rgrp_unlink(struct gfs2_rgrpd *rgd, u64 *last_unlinked, u64 skip)
1854 {
1855         u64 block;
1856         struct gfs2_sbd *sdp = rgd->rd_sbd;
1857         struct gfs2_glock *gl;
1858         struct gfs2_inode *ip;
1859         int error;
1860         int found = 0;
1861         struct gfs2_rbm rbm = { .rgd = rgd, .bii = 0, .offset = 0 };
1862
1863         while (1) {
1864                 error = gfs2_rbm_find(&rbm, GFS2_BLKST_UNLINKED, NULL, NULL,
1865                                       true);
1866                 if (error == -ENOSPC)
1867                         break;
1868                 if (WARN_ON_ONCE(error))
1869                         break;
1870
1871                 block = gfs2_rbm_to_block(&rbm);
1872                 if (gfs2_rbm_from_block(&rbm, block + 1))
1873                         break;
1874                 if (*last_unlinked != NO_BLOCK && block <= *last_unlinked)
1875                         continue;
1876                 if (block == skip)
1877                         continue;
1878                 *last_unlinked = block;
1879
1880                 error = gfs2_glock_get(sdp, block, &gfs2_iopen_glops, CREATE, &gl);
1881                 if (error)
1882                         continue;
1883
1884                 /* If the inode is already in cache, we can ignore it here
1885                  * because the existing inode disposal code will deal with
1886                  * it when all refs have gone away. Accessing gl_object like
1887                  * this is not safe in general. Here it is ok because we do
1888                  * not dereference the pointer, and we only need an approx
1889                  * answer to whether it is NULL or not.
1890                  */
1891                 ip = gl->gl_object;
1892
1893                 if (ip || !gfs2_queue_delete_work(gl, 0))
1894                         gfs2_glock_put(gl);
1895                 else
1896                         found++;
1897
1898                 /* Limit reclaim to sensible number of tasks */
1899                 if (found > NR_CPUS)
1900                         return;
1901         }
1902
1903         rgd->rd_flags &= ~GFS2_RDF_CHECK;
1904         return;
1905 }
1906
1907 /**
1908  * gfs2_rgrp_congested - Use stats to figure out whether an rgrp is congested
1909  * @rgd: The rgrp in question
1910  * @loops: An indication of how picky we can be (0=very, 1=less so)
1911  *
1912  * This function uses the recently added glock statistics in order to
1913  * figure out whether a parciular resource group is suffering from
1914  * contention from multiple nodes. This is done purely on the basis
1915  * of timings, since this is the only data we have to work with and
1916  * our aim here is to reject a resource group which is highly contended
1917  * but (very important) not to do this too often in order to ensure that
1918  * we do not land up introducing fragmentation by changing resource
1919  * groups when not actually required.
1920  *
1921  * The calculation is fairly simple, we want to know whether the SRTTB
1922  * (i.e. smoothed round trip time for blocking operations) to acquire
1923  * the lock for this rgrp's glock is significantly greater than the
1924  * time taken for resource groups on average. We introduce a margin in
1925  * the form of the variable @var which is computed as the sum of the two
1926  * respective variences, and multiplied by a factor depending on @loops
1927  * and whether we have a lot of data to base the decision on. This is
1928  * then tested against the square difference of the means in order to
1929  * decide whether the result is statistically significant or not.
1930  *
1931  * Returns: A boolean verdict on the congestion status
1932  */
1933
1934 static bool gfs2_rgrp_congested(const struct gfs2_rgrpd *rgd, int loops)
1935 {
1936         const struct gfs2_glock *gl = rgd->rd_gl;
1937         const struct gfs2_sbd *sdp = gl->gl_name.ln_sbd;
1938         struct gfs2_lkstats *st;
1939         u64 r_dcount, l_dcount;
1940         u64 l_srttb, a_srttb = 0;
1941         s64 srttb_diff;
1942         u64 sqr_diff;
1943         u64 var;
1944         int cpu, nonzero = 0;
1945
1946         preempt_disable();
1947         for_each_present_cpu(cpu) {
1948                 st = &per_cpu_ptr(sdp->sd_lkstats, cpu)->lkstats[LM_TYPE_RGRP];
1949                 if (st->stats[GFS2_LKS_SRTTB]) {
1950                         a_srttb += st->stats[GFS2_LKS_SRTTB];
1951                         nonzero++;
1952                 }
1953         }
1954         st = &this_cpu_ptr(sdp->sd_lkstats)->lkstats[LM_TYPE_RGRP];
1955         if (nonzero)
1956                 do_div(a_srttb, nonzero);
1957         r_dcount = st->stats[GFS2_LKS_DCOUNT];
1958         var = st->stats[GFS2_LKS_SRTTVARB] +
1959               gl->gl_stats.stats[GFS2_LKS_SRTTVARB];
1960         preempt_enable();
1961
1962         l_srttb = gl->gl_stats.stats[GFS2_LKS_SRTTB];
1963         l_dcount = gl->gl_stats.stats[GFS2_LKS_DCOUNT];
1964
1965         if ((l_dcount < 1) || (r_dcount < 1) || (a_srttb == 0))
1966                 return false;
1967
1968         srttb_diff = a_srttb - l_srttb;
1969         sqr_diff = srttb_diff * srttb_diff;
1970
1971         var *= 2;
1972         if (l_dcount < 8 || r_dcount < 8)
1973                 var *= 2;
1974         if (loops == 1)
1975                 var *= 2;
1976
1977         return ((srttb_diff < 0) && (sqr_diff > var));
1978 }
1979
1980 /**
1981  * gfs2_rgrp_used_recently
1982  * @rs: The block reservation with the rgrp to test
1983  * @msecs: The time limit in milliseconds
1984  *
1985  * Returns: True if the rgrp glock has been used within the time limit
1986  */
1987 static bool gfs2_rgrp_used_recently(const struct gfs2_blkreserv *rs,
1988                                     u64 msecs)
1989 {
1990         u64 tdiff;
1991
1992         tdiff = ktime_to_ns(ktime_sub(ktime_get_real(),
1993                             rs->rs_rgd->rd_gl->gl_dstamp));
1994
1995         return tdiff > (msecs * 1000 * 1000);
1996 }
1997
1998 static u32 gfs2_orlov_skip(const struct gfs2_inode *ip)
1999 {
2000         const struct gfs2_sbd *sdp = GFS2_SB(&ip->i_inode);
2001         u32 skip;
2002
2003         get_random_bytes(&skip, sizeof(skip));
2004         return skip % sdp->sd_rgrps;
2005 }
2006
2007 static bool gfs2_select_rgrp(struct gfs2_rgrpd **pos, const struct gfs2_rgrpd *begin)
2008 {
2009         struct gfs2_rgrpd *rgd = *pos;
2010         struct gfs2_sbd *sdp = rgd->rd_sbd;
2011
2012         rgd = gfs2_rgrpd_get_next(rgd);
2013         if (rgd == NULL)
2014                 rgd = gfs2_rgrpd_get_first(sdp);
2015         *pos = rgd;
2016         if (rgd != begin) /* If we didn't wrap */
2017                 return true;
2018         return false;
2019 }
2020
2021 /**
2022  * fast_to_acquire - determine if a resource group will be fast to acquire
2023  * @rgd: The rgrp
2024  *
2025  * If this is one of our preferred rgrps, it should be quicker to acquire,
2026  * because we tried to set ourselves up as dlm lock master.
2027  */
2028 static inline int fast_to_acquire(struct gfs2_rgrpd *rgd)
2029 {
2030         struct gfs2_glock *gl = rgd->rd_gl;
2031
2032         if (gl->gl_state != LM_ST_UNLOCKED && list_empty(&gl->gl_holders) &&
2033             !test_bit(GLF_DEMOTE_IN_PROGRESS, &gl->gl_flags) &&
2034             !test_bit(GLF_DEMOTE, &gl->gl_flags))
2035                 return 1;
2036         if (rgd->rd_flags & GFS2_RDF_PREFERRED)
2037                 return 1;
2038         return 0;
2039 }
2040
2041 /**
2042  * gfs2_inplace_reserve - Reserve space in the filesystem
2043  * @ip: the inode to reserve space for
2044  * @ap: the allocation parameters
2045  *
2046  * We try our best to find an rgrp that has at least ap->target blocks
2047  * available. After a couple of passes (loops == 2), the prospects of finding
2048  * such an rgrp diminish. At this stage, we return the first rgrp that has
2049  * at least ap->min_target blocks available.
2050  *
2051  * Returns: 0 on success,
2052  *          -ENOMEM if a suitable rgrp can't be found
2053  *          errno otherwise
2054  */
2055
2056 int gfs2_inplace_reserve(struct gfs2_inode *ip, struct gfs2_alloc_parms *ap)
2057 {
2058         struct gfs2_sbd *sdp = GFS2_SB(&ip->i_inode);
2059         struct gfs2_rgrpd *begin = NULL;
2060         struct gfs2_blkreserv *rs = &ip->i_res;
2061         int error = 0, flags = LM_FLAG_NODE_SCOPE;
2062         bool rg_locked;
2063         u64 last_unlinked = NO_BLOCK;
2064         u32 target = ap->target;
2065         int loops = 0;
2066         u32 free_blocks, blocks_available, skip = 0;
2067
2068         BUG_ON(rs->rs_reserved);
2069
2070         if (sdp->sd_args.ar_rgrplvb)
2071                 flags |= GL_SKIP;
2072         if (gfs2_assert_warn(sdp, target))
2073                 return -EINVAL;
2074         if (gfs2_rs_active(rs)) {
2075                 begin = rs->rs_rgd;
2076         } else if (rs->rs_rgd &&
2077                    rgrp_contains_block(rs->rs_rgd, ip->i_goal)) {
2078                 begin = rs->rs_rgd;
2079         } else {
2080                 check_and_update_goal(ip);
2081                 rs->rs_rgd = begin = gfs2_blk2rgrpd(sdp, ip->i_goal, 1);
2082         }
2083         if (S_ISDIR(ip->i_inode.i_mode) && (ap->aflags & GFS2_AF_ORLOV))
2084                 skip = gfs2_orlov_skip(ip);
2085         if (rs->rs_rgd == NULL)
2086                 return -EBADSLT;
2087
2088         while (loops < 3) {
2089                 struct gfs2_rgrpd *rgd;
2090
2091                 rg_locked = gfs2_glock_is_locked_by_me(rs->rs_rgd->rd_gl);
2092                 if (rg_locked) {
2093                         rgrp_lock_local(rs->rs_rgd);
2094                 } else {
2095                         if (skip && skip--)
2096                                 goto next_rgrp;
2097                         if (!gfs2_rs_active(rs)) {
2098                                 if (loops == 0 &&
2099                                     !fast_to_acquire(rs->rs_rgd))
2100                                         goto next_rgrp;
2101                                 if ((loops < 2) &&
2102                                     gfs2_rgrp_used_recently(rs, 1000) &&
2103                                     gfs2_rgrp_congested(rs->rs_rgd, loops))
2104                                         goto next_rgrp;
2105                         }
2106                         error = gfs2_glock_nq_init(rs->rs_rgd->rd_gl,
2107                                                    LM_ST_EXCLUSIVE, flags,
2108                                                    &ip->i_rgd_gh);
2109                         if (unlikely(error))
2110                                 return error;
2111                         rgrp_lock_local(rs->rs_rgd);
2112                         if (!gfs2_rs_active(rs) && (loops < 2) &&
2113                             gfs2_rgrp_congested(rs->rs_rgd, loops))
2114                                 goto skip_rgrp;
2115                         if (sdp->sd_args.ar_rgrplvb) {
2116                                 error = update_rgrp_lvb(rs->rs_rgd);
2117                                 if (unlikely(error)) {
2118                                         rgrp_unlock_local(rs->rs_rgd);
2119                                         gfs2_glock_dq_uninit(&ip->i_rgd_gh);
2120                                         return error;
2121                                 }
2122                         }
2123                 }
2124
2125                 /* Skip unusable resource groups */
2126                 if ((rs->rs_rgd->rd_flags & (GFS2_RGF_NOALLOC |
2127                                                  GFS2_RDF_ERROR)) ||
2128                     (loops == 0 && target > rs->rs_rgd->rd_extfail_pt))
2129                         goto skip_rgrp;
2130
2131                 if (sdp->sd_args.ar_rgrplvb)
2132                         gfs2_rgrp_bh_get(rs->rs_rgd);
2133
2134                 /* Get a reservation if we don't already have one */
2135                 if (!gfs2_rs_active(rs))
2136                         rg_mblk_search(rs->rs_rgd, ip, ap);
2137
2138                 /* Skip rgrps when we can't get a reservation on first pass */
2139                 if (!gfs2_rs_active(rs) && (loops < 1))
2140                         goto check_rgrp;
2141
2142                 /* If rgrp has enough free space, use it */
2143                 rgd = rs->rs_rgd;
2144                 spin_lock(&rgd->rd_rsspin);
2145                 free_blocks = rgd_free(rgd, rs);
2146                 blocks_available = rgd->rd_free_clone - rgd->rd_reserved;
2147                 if (free_blocks < target || blocks_available < target) {
2148                         spin_unlock(&rgd->rd_rsspin);
2149                         goto check_rgrp;
2150                 }
2151                 rs->rs_reserved = ap->target;
2152                 if (rs->rs_reserved > blocks_available)
2153                         rs->rs_reserved = blocks_available;
2154                 rgd->rd_reserved += rs->rs_reserved;
2155                 spin_unlock(&rgd->rd_rsspin);
2156                 rgrp_unlock_local(rs->rs_rgd);
2157                 return 0;
2158 check_rgrp:
2159                 /* Check for unlinked inodes which can be reclaimed */
2160                 if (rs->rs_rgd->rd_flags & GFS2_RDF_CHECK)
2161                         try_rgrp_unlink(rs->rs_rgd, &last_unlinked,
2162                                         ip->i_no_addr);
2163 skip_rgrp:
2164                 rgrp_unlock_local(rs->rs_rgd);
2165
2166                 /* Drop reservation, if we couldn't use reserved rgrp */
2167                 if (gfs2_rs_active(rs))
2168                         gfs2_rs_deltree(rs);
2169
2170                 /* Unlock rgrp if required */
2171                 if (!rg_locked)
2172                         gfs2_glock_dq_uninit(&ip->i_rgd_gh);
2173 next_rgrp:
2174                 /* Find the next rgrp, and continue looking */
2175                 if (gfs2_select_rgrp(&rs->rs_rgd, begin))
2176                         continue;
2177                 if (skip)
2178                         continue;
2179
2180                 /* If we've scanned all the rgrps, but found no free blocks
2181                  * then this checks for some less likely conditions before
2182                  * trying again.
2183                  */
2184                 loops++;
2185                 /* Check that fs hasn't grown if writing to rindex */
2186                 if (ip == GFS2_I(sdp->sd_rindex) && !sdp->sd_rindex_uptodate) {
2187                         error = gfs2_ri_update(ip);
2188                         if (error)
2189                                 return error;
2190                 }
2191                 /* Flushing the log may release space */
2192                 if (loops == 2) {
2193                         if (ap->min_target)
2194                                 target = ap->min_target;
2195                         gfs2_log_flush(sdp, NULL, GFS2_LOG_HEAD_FLUSH_NORMAL |
2196                                        GFS2_LFC_INPLACE_RESERVE);
2197                 }
2198         }
2199
2200         return -ENOSPC;
2201 }
2202
2203 /**
2204  * gfs2_inplace_release - release an inplace reservation
2205  * @ip: the inode the reservation was taken out on
2206  *
2207  * Release a reservation made by gfs2_inplace_reserve().
2208  */
2209
2210 void gfs2_inplace_release(struct gfs2_inode *ip)
2211 {
2212         struct gfs2_blkreserv *rs = &ip->i_res;
2213
2214         if (rs->rs_reserved) {
2215                 struct gfs2_rgrpd *rgd = rs->rs_rgd;
2216
2217                 spin_lock(&rgd->rd_rsspin);
2218                 BUG_ON(rgd->rd_reserved < rs->rs_reserved);
2219                 rgd->rd_reserved -= rs->rs_reserved;
2220                 spin_unlock(&rgd->rd_rsspin);
2221                 rs->rs_reserved = 0;
2222         }
2223         if (gfs2_holder_initialized(&ip->i_rgd_gh))
2224                 gfs2_glock_dq_uninit(&ip->i_rgd_gh);
2225 }
2226
2227 /**
2228  * gfs2_alloc_extent - allocate an extent from a given bitmap
2229  * @rbm: the resource group information
2230  * @dinode: TRUE if the first block we allocate is for a dinode
2231  * @n: The extent length (value/result)
2232  *
2233  * Add the bitmap buffer to the transaction.
2234  * Set the found bits to @new_state to change block's allocation state.
2235  */
2236 static void gfs2_alloc_extent(const struct gfs2_rbm *rbm, bool dinode,
2237                              unsigned int *n)
2238 {
2239         struct gfs2_rbm pos = { .rgd = rbm->rgd, };
2240         const unsigned int elen = *n;
2241         u64 block;
2242         int ret;
2243
2244         *n = 1;
2245         block = gfs2_rbm_to_block(rbm);
2246         gfs2_trans_add_meta(rbm->rgd->rd_gl, rbm_bi(rbm)->bi_bh);
2247         gfs2_setbit(rbm, true, dinode ? GFS2_BLKST_DINODE : GFS2_BLKST_USED);
2248         block++;
2249         while (*n < elen) {
2250                 ret = gfs2_rbm_from_block(&pos, block);
2251                 if (ret || gfs2_testbit(&pos, true) != GFS2_BLKST_FREE)
2252                         break;
2253                 gfs2_trans_add_meta(pos.rgd->rd_gl, rbm_bi(&pos)->bi_bh);
2254                 gfs2_setbit(&pos, true, GFS2_BLKST_USED);
2255                 (*n)++;
2256                 block++;
2257         }
2258 }
2259
2260 /**
2261  * rgblk_free - Change alloc state of given block(s)
2262  * @sdp: the filesystem
2263  * @rgd: the resource group the blocks are in
2264  * @bstart: the start of a run of blocks to free
2265  * @blen: the length of the block run (all must lie within ONE RG!)
2266  * @new_state: GFS2_BLKST_XXX the after-allocation block state
2267  */
2268
2269 static void rgblk_free(struct gfs2_sbd *sdp, struct gfs2_rgrpd *rgd,
2270                        u64 bstart, u32 blen, unsigned char new_state)
2271 {
2272         struct gfs2_rbm rbm;
2273         struct gfs2_bitmap *bi, *bi_prev = NULL;
2274
2275         rbm.rgd = rgd;
2276         if (WARN_ON_ONCE(gfs2_rbm_from_block(&rbm, bstart)))
2277                 return;
2278         while (blen--) {
2279                 bi = rbm_bi(&rbm);
2280                 if (bi != bi_prev) {
2281                         if (!bi->bi_clone) {
2282                                 bi->bi_clone = kmalloc(bi->bi_bh->b_size,
2283                                                       GFP_NOFS | __GFP_NOFAIL);
2284                                 memcpy(bi->bi_clone + bi->bi_offset,
2285                                        bi->bi_bh->b_data + bi->bi_offset,
2286                                        bi->bi_bytes);
2287                         }
2288                         gfs2_trans_add_meta(rbm.rgd->rd_gl, bi->bi_bh);
2289                         bi_prev = bi;
2290                 }
2291                 gfs2_setbit(&rbm, false, new_state);
2292                 gfs2_rbm_add(&rbm, 1);
2293         }
2294 }
2295
2296 /**
2297  * gfs2_rgrp_dump - print out an rgrp
2298  * @seq: The iterator
2299  * @rgd: The rgrp in question
2300  * @fs_id_buf: pointer to file system id (if requested)
2301  *
2302  */
2303
2304 void gfs2_rgrp_dump(struct seq_file *seq, struct gfs2_rgrpd *rgd,
2305                     const char *fs_id_buf)
2306 {
2307         struct gfs2_blkreserv *trs;
2308         const struct rb_node *n;
2309
2310         spin_lock(&rgd->rd_rsspin);
2311         gfs2_print_dbg(seq, "%s R: n:%llu f:%02x b:%u/%u i:%u q:%u r:%u e:%u\n",
2312                        fs_id_buf,
2313                        (unsigned long long)rgd->rd_addr, rgd->rd_flags,
2314                        rgd->rd_free, rgd->rd_free_clone, rgd->rd_dinodes,
2315                        rgd->rd_requested, rgd->rd_reserved, rgd->rd_extfail_pt);
2316         if (rgd->rd_sbd->sd_args.ar_rgrplvb) {
2317                 struct gfs2_rgrp_lvb *rgl = rgd->rd_rgl;
2318
2319                 gfs2_print_dbg(seq, "%s  L: f:%02x b:%u i:%u\n", fs_id_buf,
2320                                be32_to_cpu(rgl->rl_flags),
2321                                be32_to_cpu(rgl->rl_free),
2322                                be32_to_cpu(rgl->rl_dinodes));
2323         }
2324         for (n = rb_first(&rgd->rd_rstree); n; n = rb_next(&trs->rs_node)) {
2325                 trs = rb_entry(n, struct gfs2_blkreserv, rs_node);
2326                 dump_rs(seq, trs, fs_id_buf);
2327         }
2328         spin_unlock(&rgd->rd_rsspin);
2329 }
2330
2331 static void gfs2_rgrp_error(struct gfs2_rgrpd *rgd)
2332 {
2333         struct gfs2_sbd *sdp = rgd->rd_sbd;
2334         char fs_id_buf[sizeof(sdp->sd_fsname) + 7];
2335
2336         fs_warn(sdp, "rgrp %llu has an error, marking it readonly until umount\n",
2337                 (unsigned long long)rgd->rd_addr);
2338         fs_warn(sdp, "umount on all nodes and run fsck.gfs2 to fix the error\n");
2339         sprintf(fs_id_buf, "fsid=%s: ", sdp->sd_fsname);
2340         gfs2_rgrp_dump(NULL, rgd, fs_id_buf);
2341         rgd->rd_flags |= GFS2_RDF_ERROR;
2342 }
2343
2344 /**
2345  * gfs2_adjust_reservation - Adjust (or remove) a reservation after allocation
2346  * @ip: The inode we have just allocated blocks for
2347  * @rbm: The start of the allocated blocks
2348  * @len: The extent length
2349  *
2350  * Adjusts a reservation after an allocation has taken place. If the
2351  * reservation does not match the allocation, or if it is now empty
2352  * then it is removed.
2353  */
2354
2355 static void gfs2_adjust_reservation(struct gfs2_inode *ip,
2356                                     const struct gfs2_rbm *rbm, unsigned len)
2357 {
2358         struct gfs2_blkreserv *rs = &ip->i_res;
2359         struct gfs2_rgrpd *rgd = rbm->rgd;
2360
2361         BUG_ON(rs->rs_reserved < len);
2362         rs->rs_reserved -= len;
2363         if (gfs2_rs_active(rs)) {
2364                 u64 start = gfs2_rbm_to_block(rbm);
2365
2366                 if (rs->rs_start == start) {
2367                         unsigned int rlen;
2368
2369                         rs->rs_start += len;
2370                         rlen = min(rs->rs_requested, len);
2371                         rs->rs_requested -= rlen;
2372                         rgd->rd_requested -= rlen;
2373                         trace_gfs2_rs(rs, TRACE_RS_CLAIM);
2374                         if (rs->rs_start < rgd->rd_data0 + rgd->rd_data &&
2375                             rs->rs_requested)
2376                                 return;
2377                         /* We used up our block reservation, so we should
2378                            reserve more blocks next time. */
2379                         atomic_add(RGRP_RSRV_ADDBLKS, &ip->i_sizehint);
2380                 }
2381                 __rs_deltree(rs);
2382         }
2383 }
2384
2385 /**
2386  * gfs2_set_alloc_start - Set starting point for block allocation
2387  * @rbm: The rbm which will be set to the required location
2388  * @ip: The gfs2 inode
2389  * @dinode: Flag to say if allocation includes a new inode
2390  *
2391  * This sets the starting point from the reservation if one is active
2392  * otherwise it falls back to guessing a start point based on the
2393  * inode's goal block or the last allocation point in the rgrp.
2394  */
2395
2396 static void gfs2_set_alloc_start(struct gfs2_rbm *rbm,
2397                                  const struct gfs2_inode *ip, bool dinode)
2398 {
2399         u64 goal;
2400
2401         if (gfs2_rs_active(&ip->i_res)) {
2402                 goal = ip->i_res.rs_start;
2403         } else {
2404                 if (!dinode && rgrp_contains_block(rbm->rgd, ip->i_goal))
2405                         goal = ip->i_goal;
2406                 else
2407                         goal = rbm->rgd->rd_last_alloc + rbm->rgd->rd_data0;
2408         }
2409         if (WARN_ON_ONCE(gfs2_rbm_from_block(rbm, goal))) {
2410                 rbm->bii = 0;
2411                 rbm->offset = 0;
2412         }
2413 }
2414
2415 /**
2416  * gfs2_alloc_blocks - Allocate one or more blocks of data and/or a dinode
2417  * @ip: the inode to allocate the block for
2418  * @bn: Used to return the starting block number
2419  * @nblocks: requested number of blocks/extent length (value/result)
2420  * @dinode: 1 if we're allocating a dinode block, else 0
2421  * @generation: the generation number of the inode
2422  *
2423  * Returns: 0 or error
2424  */
2425
2426 int gfs2_alloc_blocks(struct gfs2_inode *ip, u64 *bn, unsigned int *nblocks,
2427                       bool dinode, u64 *generation)
2428 {
2429         struct gfs2_sbd *sdp = GFS2_SB(&ip->i_inode);
2430         struct buffer_head *dibh;
2431         struct gfs2_rbm rbm = { .rgd = ip->i_res.rs_rgd, };
2432         u64 block; /* block, within the file system scope */
2433         u32 minext = 1;
2434         int error = -ENOSPC;
2435
2436         BUG_ON(ip->i_res.rs_reserved < *nblocks);
2437
2438         rgrp_lock_local(rbm.rgd);
2439         if (gfs2_rs_active(&ip->i_res)) {
2440                 gfs2_set_alloc_start(&rbm, ip, dinode);
2441                 error = gfs2_rbm_find(&rbm, GFS2_BLKST_FREE, &minext, &ip->i_res, false);
2442         }
2443         if (error == -ENOSPC) {
2444                 gfs2_set_alloc_start(&rbm, ip, dinode);
2445                 error = gfs2_rbm_find(&rbm, GFS2_BLKST_FREE, &minext, NULL, false);
2446         }
2447
2448         /* Since all blocks are reserved in advance, this shouldn't happen */
2449         if (error) {
2450                 fs_warn(sdp, "inum=%llu error=%d, nblocks=%u, full=%d fail_pt=%d\n",
2451                         (unsigned long long)ip->i_no_addr, error, *nblocks,
2452                         test_bit(GBF_FULL, &rbm.rgd->rd_bits->bi_flags),
2453                         rbm.rgd->rd_extfail_pt);
2454                 goto rgrp_error;
2455         }
2456
2457         gfs2_alloc_extent(&rbm, dinode, nblocks);
2458         block = gfs2_rbm_to_block(&rbm);
2459         rbm.rgd->rd_last_alloc = block - rbm.rgd->rd_data0;
2460         if (!dinode) {
2461                 ip->i_goal = block + *nblocks - 1;
2462                 error = gfs2_meta_inode_buffer(ip, &dibh);
2463                 if (error == 0) {
2464                         struct gfs2_dinode *di =
2465                                 (struct gfs2_dinode *)dibh->b_data;
2466                         gfs2_trans_add_meta(ip->i_gl, dibh);
2467                         di->di_goal_meta = di->di_goal_data =
2468                                 cpu_to_be64(ip->i_goal);
2469                         brelse(dibh);
2470                 }
2471         }
2472         spin_lock(&rbm.rgd->rd_rsspin);
2473         gfs2_adjust_reservation(ip, &rbm, *nblocks);
2474         if (rbm.rgd->rd_free < *nblocks || rbm.rgd->rd_reserved < *nblocks) {
2475                 fs_warn(sdp, "nblocks=%u\n", *nblocks);
2476                 spin_unlock(&rbm.rgd->rd_rsspin);
2477                 goto rgrp_error;
2478         }
2479         BUG_ON(rbm.rgd->rd_reserved < *nblocks);
2480         BUG_ON(rbm.rgd->rd_free_clone < *nblocks);
2481         BUG_ON(rbm.rgd->rd_free < *nblocks);
2482         rbm.rgd->rd_reserved -= *nblocks;
2483         rbm.rgd->rd_free_clone -= *nblocks;
2484         rbm.rgd->rd_free -= *nblocks;
2485         spin_unlock(&rbm.rgd->rd_rsspin);
2486         if (dinode) {
2487                 rbm.rgd->rd_dinodes++;
2488                 *generation = rbm.rgd->rd_igeneration++;
2489                 if (*generation == 0)
2490                         *generation = rbm.rgd->rd_igeneration++;
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_depth || 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         rgrp_unlock_local(rgd);
2595         be32_add_cpu(&rgd->rd_rgl->rl_unlinked, -1);
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 = kcalloc(new_space, sizeof(struct gfs2_rgrpd *),
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  *
2730  * FIXME: Don't use NOFAIL
2731  *
2732  */
2733
2734 void gfs2_rlist_alloc(struct gfs2_rgrp_list *rlist)
2735 {
2736         unsigned int x;
2737
2738         rlist->rl_ghs = kmalloc_array(rlist->rl_rgrps,
2739                                       sizeof(struct gfs2_holder),
2740                                       GFP_NOFS | __GFP_NOFAIL);
2741         for (x = 0; x < rlist->rl_rgrps; x++)
2742                 gfs2_holder_init(rlist->rl_rgd[x]->rd_gl, LM_ST_EXCLUSIVE,
2743                                  LM_FLAG_NODE_SCOPE, &rlist->rl_ghs[x]);
2744 }
2745
2746 /**
2747  * gfs2_rlist_free - free a resource group list
2748  * @rlist: the list of resource groups
2749  *
2750  */
2751
2752 void gfs2_rlist_free(struct gfs2_rgrp_list *rlist)
2753 {
2754         unsigned int x;
2755
2756         kfree(rlist->rl_rgd);
2757
2758         if (rlist->rl_ghs) {
2759                 for (x = 0; x < rlist->rl_rgrps; x++)
2760                         gfs2_holder_uninit(&rlist->rl_ghs[x]);
2761                 kfree(rlist->rl_ghs);
2762                 rlist->rl_ghs = NULL;
2763         }
2764 }
2765
2766 void rgrp_lock_local(struct gfs2_rgrpd *rgd)
2767 {
2768         BUG_ON(!gfs2_glock_is_held_excl(rgd->rd_gl) &&
2769                !test_bit(SDF_NORECOVERY, &rgd->rd_sbd->sd_flags));
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 }