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