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