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