• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (C) Sistina Software, Inc.  1997-2003 All rights reserved.
3  * Copyright (C) 2004-2008 Red Hat, Inc.  All rights reserved.
4  *
5  * This copyrighted material is made available to anyone wishing to use,
6  * modify, copy, or redistribute it subject to the terms and conditions
7  * of the GNU General Public License version 2.
8  */
9 
10 #include <linux/slab.h>
11 #include <linux/spinlock.h>
12 #include <linux/completion.h>
13 #include <linux/buffer_head.h>
14 #include <linux/fs.h>
15 #include <linux/gfs2_ondisk.h>
16 #include <linux/lm_interface.h>
17 #include <linux/prefetch.h>
18 
19 #include "gfs2.h"
20 #include "incore.h"
21 #include "glock.h"
22 #include "glops.h"
23 #include "lops.h"
24 #include "meta_io.h"
25 #include "quota.h"
26 #include "rgrp.h"
27 #include "super.h"
28 #include "trans.h"
29 #include "util.h"
30 #include "log.h"
31 #include "inode.h"
32 #include "ops_address.h"
33 
34 #define BFITNOENT ((u32)~0)
35 #define NO_BLOCK ((u64)~0)
36 
37 #if BITS_PER_LONG == 32
38 #define LBITMASK   (0x55555555UL)
39 #define LBITSKIP55 (0x55555555UL)
40 #define LBITSKIP00 (0x00000000UL)
41 #else
42 #define LBITMASK   (0x5555555555555555UL)
43 #define LBITSKIP55 (0x5555555555555555UL)
44 #define LBITSKIP00 (0x0000000000000000UL)
45 #endif
46 
47 /*
48  * These routines are used by the resource group routines (rgrp.c)
49  * to keep track of block allocation.  Each block is represented by two
50  * bits.  So, each byte represents GFS2_NBBY (i.e. 4) blocks.
51  *
52  * 0 = Free
53  * 1 = Used (not metadata)
54  * 2 = Unlinked (still in use) inode
55  * 3 = Used (metadata)
56  */
57 
58 static const char valid_change[16] = {
59 	        /* current */
60 	/* n */ 0, 1, 1, 1,
61 	/* e */ 1, 0, 0, 0,
62 	/* w */ 0, 0, 0, 1,
63 	        1, 0, 0, 0
64 };
65 
66 static u32 rgblk_search(struct gfs2_rgrpd *rgd, u32 goal,
67                         unsigned char old_state, unsigned char new_state,
68 			unsigned int *n);
69 
70 /**
71  * gfs2_setbit - Set a bit in the bitmaps
72  * @buffer: the buffer that holds the bitmaps
73  * @buflen: the length (in bytes) of the buffer
74  * @block: the block to set
75  * @new_state: the new state of the block
76  *
77  */
78 
gfs2_setbit(struct gfs2_rgrpd * rgd,unsigned char * buf1,unsigned char * buf2,unsigned int offset,unsigned int buflen,u32 block,unsigned char new_state)79 static inline void gfs2_setbit(struct gfs2_rgrpd *rgd, unsigned char *buf1,
80 			       unsigned char *buf2, unsigned int offset,
81 			       unsigned int buflen, u32 block,
82 			       unsigned char new_state)
83 {
84 	unsigned char *byte1, *byte2, *end, cur_state;
85 	const unsigned int bit = (block % GFS2_NBBY) * GFS2_BIT_SIZE;
86 
87 	byte1 = buf1 + offset + (block / GFS2_NBBY);
88 	end = buf1 + offset + buflen;
89 
90 	BUG_ON(byte1 >= end);
91 
92 	cur_state = (*byte1 >> bit) & GFS2_BIT_MASK;
93 
94 	if (unlikely(!valid_change[new_state * 4 + cur_state])) {
95 		gfs2_consist_rgrpd(rgd);
96 		return;
97 	}
98 	*byte1 ^= (cur_state ^ new_state) << bit;
99 
100 	if (buf2) {
101 		byte2 = buf2 + offset + (block / GFS2_NBBY);
102 		cur_state = (*byte2 >> bit) & GFS2_BIT_MASK;
103 		*byte2 ^= (cur_state ^ new_state) << bit;
104 	}
105 }
106 
107 /**
108  * gfs2_testbit - test a bit in the bitmaps
109  * @buffer: the buffer that holds the bitmaps
110  * @buflen: the length (in bytes) of the buffer
111  * @block: the block to read
112  *
113  */
114 
gfs2_testbit(struct gfs2_rgrpd * rgd,const unsigned char * buffer,unsigned int buflen,u32 block)115 static inline unsigned char gfs2_testbit(struct gfs2_rgrpd *rgd,
116 					 const unsigned char *buffer,
117 					 unsigned int buflen, u32 block)
118 {
119 	const unsigned char *byte, *end;
120 	unsigned char cur_state;
121 	unsigned int bit;
122 
123 	byte = buffer + (block / GFS2_NBBY);
124 	bit = (block % GFS2_NBBY) * GFS2_BIT_SIZE;
125 	end = buffer + buflen;
126 
127 	gfs2_assert(rgd->rd_sbd, byte < end);
128 
129 	cur_state = (*byte >> bit) & GFS2_BIT_MASK;
130 
131 	return cur_state;
132 }
133 
134 /**
135  * gfs2_bitfit - Search an rgrp's bitmap buffer to find a bit-pair representing
136  *       a block in a given allocation state.
137  * @buffer: the buffer that holds the bitmaps
138  * @buflen: the length (in bytes) of the buffer
139  * @goal: start search at this block's bit-pair (within @buffer)
140  * @old_state: GFS2_BLKST_XXX the state of the block we're looking for.
141  *
142  * Scope of @goal and returned block number is only within this bitmap buffer,
143  * not entire rgrp or filesystem.  @buffer will be offset from the actual
144  * beginning of a bitmap block buffer, skipping any header structures.
145  *
146  * Return: the block number (bitmap buffer scope) that was found
147  */
148 
gfs2_bitfit(const u8 * buffer,unsigned int buflen,u32 goal,u8 old_state)149 static u32 gfs2_bitfit(const u8 *buffer, unsigned int buflen, u32 goal,
150 		       u8 old_state)
151 {
152 	const u8 *byte, *start, *end;
153 	int bit, startbit;
154 	u32 g1, g2, misaligned;
155 	unsigned long *plong;
156 	unsigned long lskipval;
157 
158 	lskipval = (old_state & GFS2_BLKST_USED) ? LBITSKIP00 : LBITSKIP55;
159 	g1 = (goal / GFS2_NBBY);
160 	start = buffer + g1;
161 	byte = start;
162         end = buffer + buflen;
163 	g2 = ALIGN(g1, sizeof(unsigned long));
164 	plong = (unsigned long *)(buffer + g2);
165 	startbit = bit = (goal % GFS2_NBBY) * GFS2_BIT_SIZE;
166 	misaligned = g2 - g1;
167 	if (!misaligned)
168 		goto ulong_aligned;
169 /* parse the bitmap a byte at a time */
170 misaligned:
171 	while (byte < end) {
172 		if (((*byte >> bit) & GFS2_BIT_MASK) == old_state) {
173 			return goal +
174 				(((byte - start) * GFS2_NBBY) +
175 				 ((bit - startbit) >> 1));
176 		}
177 		bit += GFS2_BIT_SIZE;
178 		if (bit >= GFS2_NBBY * GFS2_BIT_SIZE) {
179 			bit = 0;
180 			byte++;
181 			misaligned--;
182 			if (!misaligned) {
183 				plong = (unsigned long *)byte;
184 				goto ulong_aligned;
185 			}
186 		}
187 	}
188 	return BFITNOENT;
189 
190 /* parse the bitmap a unsigned long at a time */
191 ulong_aligned:
192 	/* Stop at "end - 1" or else prefetch can go past the end and segfault.
193 	   We could "if" it but we'd lose some of the performance gained.
194 	   This way will only slow down searching the very last 4/8 bytes
195 	   depending on architecture.  I've experimented with several ways
196 	   of writing this section such as using an else before the goto
197 	   but this one seems to be the fastest. */
198 	while ((unsigned char *)plong < end - sizeof(unsigned long)) {
199 		prefetch(plong + 1);
200 		if (((*plong) & LBITMASK) != lskipval)
201 			break;
202 		plong++;
203 	}
204 	if ((unsigned char *)plong < end) {
205 		byte = (const u8 *)plong;
206 		misaligned += sizeof(unsigned long) - 1;
207 		goto misaligned;
208 	}
209 	return BFITNOENT;
210 }
211 
212 /**
213  * gfs2_bitcount - count the number of bits in a certain state
214  * @buffer: the buffer that holds the bitmaps
215  * @buflen: the length (in bytes) of the buffer
216  * @state: the state of the block we're looking for
217  *
218  * Returns: The number of bits
219  */
220 
gfs2_bitcount(struct gfs2_rgrpd * rgd,const u8 * buffer,unsigned int buflen,u8 state)221 static u32 gfs2_bitcount(struct gfs2_rgrpd *rgd, const u8 *buffer,
222 			 unsigned int buflen, u8 state)
223 {
224 	const u8 *byte = buffer;
225 	const u8 *end = buffer + buflen;
226 	const u8 state1 = state << 2;
227 	const u8 state2 = state << 4;
228 	const u8 state3 = state << 6;
229 	u32 count = 0;
230 
231 	for (; byte < end; byte++) {
232 		if (((*byte) & 0x03) == state)
233 			count++;
234 		if (((*byte) & 0x0C) == state1)
235 			count++;
236 		if (((*byte) & 0x30) == state2)
237 			count++;
238 		if (((*byte) & 0xC0) == state3)
239 			count++;
240 	}
241 
242 	return count;
243 }
244 
245 /**
246  * gfs2_rgrp_verify - Verify that a resource group is consistent
247  * @sdp: the filesystem
248  * @rgd: the rgrp
249  *
250  */
251 
gfs2_rgrp_verify(struct gfs2_rgrpd * rgd)252 void gfs2_rgrp_verify(struct gfs2_rgrpd *rgd)
253 {
254 	struct gfs2_sbd *sdp = rgd->rd_sbd;
255 	struct gfs2_bitmap *bi = NULL;
256 	u32 length = rgd->rd_length;
257 	u32 count[4], tmp;
258 	int buf, x;
259 
260 	memset(count, 0, 4 * sizeof(u32));
261 
262 	/* Count # blocks in each of 4 possible allocation states */
263 	for (buf = 0; buf < length; buf++) {
264 		bi = rgd->rd_bits + buf;
265 		for (x = 0; x < 4; x++)
266 			count[x] += gfs2_bitcount(rgd,
267 						  bi->bi_bh->b_data +
268 						  bi->bi_offset,
269 						  bi->bi_len, x);
270 	}
271 
272 	if (count[0] != rgd->rd_free) {
273 		if (gfs2_consist_rgrpd(rgd))
274 			fs_err(sdp, "free data mismatch:  %u != %u\n",
275 			       count[0], rgd->rd_free);
276 		return;
277 	}
278 
279 	tmp = rgd->rd_data - rgd->rd_free - rgd->rd_dinodes;
280 	if (count[1] + count[2] != tmp) {
281 		if (gfs2_consist_rgrpd(rgd))
282 			fs_err(sdp, "used data mismatch:  %u != %u\n",
283 			       count[1], tmp);
284 		return;
285 	}
286 
287 	if (count[3] != rgd->rd_dinodes) {
288 		if (gfs2_consist_rgrpd(rgd))
289 			fs_err(sdp, "used metadata mismatch:  %u != %u\n",
290 			       count[3], rgd->rd_dinodes);
291 		return;
292 	}
293 
294 	if (count[2] > count[3]) {
295 		if (gfs2_consist_rgrpd(rgd))
296 			fs_err(sdp, "unlinked inodes > inodes:  %u\n",
297 			       count[2]);
298 		return;
299 	}
300 
301 }
302 
rgrp_contains_block(struct gfs2_rgrpd * rgd,u64 block)303 static inline int rgrp_contains_block(struct gfs2_rgrpd *rgd, u64 block)
304 {
305 	u64 first = rgd->rd_data0;
306 	u64 last = first + rgd->rd_data;
307 	return first <= block && block < last;
308 }
309 
310 /**
311  * gfs2_blk2rgrpd - Find resource group for a given data/meta block number
312  * @sdp: The GFS2 superblock
313  * @n: The data block number
314  *
315  * Returns: The resource group, or NULL if not found
316  */
317 
gfs2_blk2rgrpd(struct gfs2_sbd * sdp,u64 blk)318 struct gfs2_rgrpd *gfs2_blk2rgrpd(struct gfs2_sbd *sdp, u64 blk)
319 {
320 	struct gfs2_rgrpd *rgd;
321 
322 	spin_lock(&sdp->sd_rindex_spin);
323 
324 	list_for_each_entry(rgd, &sdp->sd_rindex_mru_list, rd_list_mru) {
325 		if (rgrp_contains_block(rgd, blk)) {
326 			list_move(&rgd->rd_list_mru, &sdp->sd_rindex_mru_list);
327 			spin_unlock(&sdp->sd_rindex_spin);
328 			return rgd;
329 		}
330 	}
331 
332 	spin_unlock(&sdp->sd_rindex_spin);
333 
334 	return NULL;
335 }
336 
337 /**
338  * gfs2_rgrpd_get_first - get the first Resource Group in the filesystem
339  * @sdp: The GFS2 superblock
340  *
341  * Returns: The first rgrp in the filesystem
342  */
343 
gfs2_rgrpd_get_first(struct gfs2_sbd * sdp)344 struct gfs2_rgrpd *gfs2_rgrpd_get_first(struct gfs2_sbd *sdp)
345 {
346 	gfs2_assert(sdp, !list_empty(&sdp->sd_rindex_list));
347 	return list_entry(sdp->sd_rindex_list.next, struct gfs2_rgrpd, rd_list);
348 }
349 
350 /**
351  * gfs2_rgrpd_get_next - get the next RG
352  * @rgd: A RG
353  *
354  * Returns: The next rgrp
355  */
356 
gfs2_rgrpd_get_next(struct gfs2_rgrpd * rgd)357 struct gfs2_rgrpd *gfs2_rgrpd_get_next(struct gfs2_rgrpd *rgd)
358 {
359 	if (rgd->rd_list.next == &rgd->rd_sbd->sd_rindex_list)
360 		return NULL;
361 	return list_entry(rgd->rd_list.next, struct gfs2_rgrpd, rd_list);
362 }
363 
clear_rgrpdi(struct gfs2_sbd * sdp)364 static void clear_rgrpdi(struct gfs2_sbd *sdp)
365 {
366 	struct list_head *head;
367 	struct gfs2_rgrpd *rgd;
368 	struct gfs2_glock *gl;
369 
370 	spin_lock(&sdp->sd_rindex_spin);
371 	sdp->sd_rindex_forward = NULL;
372 	spin_unlock(&sdp->sd_rindex_spin);
373 
374 	head = &sdp->sd_rindex_list;
375 	while (!list_empty(head)) {
376 		rgd = list_entry(head->next, struct gfs2_rgrpd, rd_list);
377 		gl = rgd->rd_gl;
378 
379 		list_del(&rgd->rd_list);
380 		list_del(&rgd->rd_list_mru);
381 
382 		if (gl) {
383 			gl->gl_object = NULL;
384 			gfs2_glock_put(gl);
385 		}
386 
387 		kfree(rgd->rd_bits);
388 		kmem_cache_free(gfs2_rgrpd_cachep, rgd);
389 	}
390 }
391 
gfs2_clear_rgrpd(struct gfs2_sbd * sdp)392 void gfs2_clear_rgrpd(struct gfs2_sbd *sdp)
393 {
394 	mutex_lock(&sdp->sd_rindex_mutex);
395 	clear_rgrpdi(sdp);
396 	mutex_unlock(&sdp->sd_rindex_mutex);
397 }
398 
gfs2_rindex_print(const struct gfs2_rgrpd * rgd)399 static void gfs2_rindex_print(const struct gfs2_rgrpd *rgd)
400 {
401 	printk(KERN_INFO "  ri_addr = %llu\n", (unsigned long long)rgd->rd_addr);
402 	printk(KERN_INFO "  ri_length = %u\n", rgd->rd_length);
403 	printk(KERN_INFO "  ri_data0 = %llu\n", (unsigned long long)rgd->rd_data0);
404 	printk(KERN_INFO "  ri_data = %u\n", rgd->rd_data);
405 	printk(KERN_INFO "  ri_bitbytes = %u\n", rgd->rd_bitbytes);
406 }
407 
408 /**
409  * gfs2_compute_bitstructs - Compute the bitmap sizes
410  * @rgd: The resource group descriptor
411  *
412  * Calculates bitmap descriptors, one for each block that contains bitmap data
413  *
414  * Returns: errno
415  */
416 
compute_bitstructs(struct gfs2_rgrpd * rgd)417 static int compute_bitstructs(struct gfs2_rgrpd *rgd)
418 {
419 	struct gfs2_sbd *sdp = rgd->rd_sbd;
420 	struct gfs2_bitmap *bi;
421 	u32 length = rgd->rd_length; /* # blocks in hdr & bitmap */
422 	u32 bytes_left, bytes;
423 	int x;
424 
425 	if (!length)
426 		return -EINVAL;
427 
428 	rgd->rd_bits = kcalloc(length, sizeof(struct gfs2_bitmap), GFP_NOFS);
429 	if (!rgd->rd_bits)
430 		return -ENOMEM;
431 
432 	bytes_left = rgd->rd_bitbytes;
433 
434 	for (x = 0; x < length; x++) {
435 		bi = rgd->rd_bits + x;
436 
437 		/* small rgrp; bitmap stored completely in header block */
438 		if (length == 1) {
439 			bytes = bytes_left;
440 			bi->bi_offset = sizeof(struct gfs2_rgrp);
441 			bi->bi_start = 0;
442 			bi->bi_len = bytes;
443 		/* header block */
444 		} else if (x == 0) {
445 			bytes = sdp->sd_sb.sb_bsize - sizeof(struct gfs2_rgrp);
446 			bi->bi_offset = sizeof(struct gfs2_rgrp);
447 			bi->bi_start = 0;
448 			bi->bi_len = bytes;
449 		/* last block */
450 		} else if (x + 1 == length) {
451 			bytes = bytes_left;
452 			bi->bi_offset = sizeof(struct gfs2_meta_header);
453 			bi->bi_start = rgd->rd_bitbytes - bytes_left;
454 			bi->bi_len = bytes;
455 		/* other blocks */
456 		} else {
457 			bytes = sdp->sd_sb.sb_bsize -
458 				sizeof(struct gfs2_meta_header);
459 			bi->bi_offset = sizeof(struct gfs2_meta_header);
460 			bi->bi_start = rgd->rd_bitbytes - bytes_left;
461 			bi->bi_len = bytes;
462 		}
463 
464 		bytes_left -= bytes;
465 	}
466 
467 	if (bytes_left) {
468 		gfs2_consist_rgrpd(rgd);
469 		return -EIO;
470 	}
471 	bi = rgd->rd_bits + (length - 1);
472 	if ((bi->bi_start + bi->bi_len) * GFS2_NBBY != rgd->rd_data) {
473 		if (gfs2_consist_rgrpd(rgd)) {
474 			gfs2_rindex_print(rgd);
475 			fs_err(sdp, "start=%u len=%u offset=%u\n",
476 			       bi->bi_start, bi->bi_len, bi->bi_offset);
477 		}
478 		return -EIO;
479 	}
480 
481 	return 0;
482 }
483 
484 /**
485  * gfs2_ri_total - Total up the file system space, according to the rindex.
486  *
487  */
gfs2_ri_total(struct gfs2_sbd * sdp)488 u64 gfs2_ri_total(struct gfs2_sbd *sdp)
489 {
490 	u64 total_data = 0;
491 	struct inode *inode = sdp->sd_rindex;
492 	struct gfs2_inode *ip = GFS2_I(inode);
493 	char buf[sizeof(struct gfs2_rindex)];
494 	struct file_ra_state ra_state;
495 	int error, rgrps;
496 
497 	mutex_lock(&sdp->sd_rindex_mutex);
498 	file_ra_state_init(&ra_state, inode->i_mapping);
499 	for (rgrps = 0;; rgrps++) {
500 		loff_t pos = rgrps * sizeof(struct gfs2_rindex);
501 
502 		if (pos + sizeof(struct gfs2_rindex) >= ip->i_disksize)
503 			break;
504 		error = gfs2_internal_read(ip, &ra_state, buf, &pos,
505 					   sizeof(struct gfs2_rindex));
506 		if (error != sizeof(struct gfs2_rindex))
507 			break;
508 		total_data += be32_to_cpu(((struct gfs2_rindex *)buf)->ri_data);
509 	}
510 	mutex_unlock(&sdp->sd_rindex_mutex);
511 	return total_data;
512 }
513 
gfs2_rindex_in(struct gfs2_rgrpd * rgd,const void * buf)514 static void gfs2_rindex_in(struct gfs2_rgrpd *rgd, const void *buf)
515 {
516 	const struct gfs2_rindex *str = buf;
517 
518 	rgd->rd_addr = be64_to_cpu(str->ri_addr);
519 	rgd->rd_length = be32_to_cpu(str->ri_length);
520 	rgd->rd_data0 = be64_to_cpu(str->ri_data0);
521 	rgd->rd_data = be32_to_cpu(str->ri_data);
522 	rgd->rd_bitbytes = be32_to_cpu(str->ri_bitbytes);
523 }
524 
525 /**
526  * read_rindex_entry - Pull in a new resource index entry from the disk
527  * @gl: The glock covering the rindex inode
528  *
529  * Returns: 0 on success, error code otherwise
530  */
531 
read_rindex_entry(struct gfs2_inode * ip,struct file_ra_state * ra_state)532 static int read_rindex_entry(struct gfs2_inode *ip,
533 			     struct file_ra_state *ra_state)
534 {
535 	struct gfs2_sbd *sdp = GFS2_SB(&ip->i_inode);
536 	loff_t pos = sdp->sd_rgrps * sizeof(struct gfs2_rindex);
537 	char buf[sizeof(struct gfs2_rindex)];
538 	int error;
539 	struct gfs2_rgrpd *rgd;
540 
541 	error = gfs2_internal_read(ip, ra_state, buf, &pos,
542 				   sizeof(struct gfs2_rindex));
543 	if (!error)
544 		return 0;
545 	if (error != sizeof(struct gfs2_rindex)) {
546 		if (error > 0)
547 			error = -EIO;
548 		return error;
549 	}
550 
551 	rgd = kmem_cache_zalloc(gfs2_rgrpd_cachep, GFP_NOFS);
552 	error = -ENOMEM;
553 	if (!rgd)
554 		return error;
555 
556 	mutex_init(&rgd->rd_mutex);
557 	lops_init_le(&rgd->rd_le, &gfs2_rg_lops);
558 	rgd->rd_sbd = sdp;
559 
560 	list_add_tail(&rgd->rd_list, &sdp->sd_rindex_list);
561 	list_add_tail(&rgd->rd_list_mru, &sdp->sd_rindex_mru_list);
562 
563 	gfs2_rindex_in(rgd, buf);
564 	error = compute_bitstructs(rgd);
565 	if (error)
566 		return error;
567 
568 	error = gfs2_glock_get(sdp, rgd->rd_addr,
569 			       &gfs2_rgrp_glops, CREATE, &rgd->rd_gl);
570 	if (error)
571 		return error;
572 
573 	rgd->rd_gl->gl_object = rgd;
574 	rgd->rd_flags &= ~GFS2_RDF_UPTODATE;
575 	rgd->rd_flags |= GFS2_RDF_CHECK;
576 	return error;
577 }
578 
579 /**
580  * gfs2_ri_update - Pull in a new resource index from the disk
581  * @ip: pointer to the rindex inode
582  *
583  * Returns: 0 on successful update, error code otherwise
584  */
585 
gfs2_ri_update(struct gfs2_inode * ip)586 static int gfs2_ri_update(struct gfs2_inode *ip)
587 {
588 	struct gfs2_sbd *sdp = GFS2_SB(&ip->i_inode);
589 	struct inode *inode = &ip->i_inode;
590 	struct file_ra_state ra_state;
591 	u64 rgrp_count = ip->i_disksize;
592 	int error;
593 
594 	if (do_div(rgrp_count, sizeof(struct gfs2_rindex))) {
595 		gfs2_consist_inode(ip);
596 		return -EIO;
597 	}
598 
599 	clear_rgrpdi(sdp);
600 
601 	file_ra_state_init(&ra_state, inode->i_mapping);
602 	for (sdp->sd_rgrps = 0; sdp->sd_rgrps < rgrp_count; sdp->sd_rgrps++) {
603 		error = read_rindex_entry(ip, &ra_state);
604 		if (error) {
605 			clear_rgrpdi(sdp);
606 			return error;
607 		}
608 	}
609 
610 	sdp->sd_rindex_uptodate = 1;
611 	return 0;
612 }
613 
614 /**
615  * gfs2_ri_update_special - Pull in a new resource index from the disk
616  *
617  * This is a special version that's safe to call from gfs2_inplace_reserve_i.
618  * In this case we know that we don't have any resource groups in memory yet.
619  *
620  * @ip: pointer to the rindex inode
621  *
622  * Returns: 0 on successful update, error code otherwise
623  */
gfs2_ri_update_special(struct gfs2_inode * ip)624 static int gfs2_ri_update_special(struct gfs2_inode *ip)
625 {
626 	struct gfs2_sbd *sdp = GFS2_SB(&ip->i_inode);
627 	struct inode *inode = &ip->i_inode;
628 	struct file_ra_state ra_state;
629 	int error;
630 
631 	file_ra_state_init(&ra_state, inode->i_mapping);
632 	for (sdp->sd_rgrps = 0;; sdp->sd_rgrps++) {
633 		/* Ignore partials */
634 		if ((sdp->sd_rgrps + 1) * sizeof(struct gfs2_rindex) >
635 		    ip->i_disksize)
636 			break;
637 		error = read_rindex_entry(ip, &ra_state);
638 		if (error) {
639 			clear_rgrpdi(sdp);
640 			return error;
641 		}
642 	}
643 
644 	sdp->sd_rindex_uptodate = 1;
645 	return 0;
646 }
647 
648 /**
649  * gfs2_rindex_hold - Grab a lock on the rindex
650  * @sdp: The GFS2 superblock
651  * @ri_gh: the glock holder
652  *
653  * We grab a lock on the rindex inode to make sure that it doesn't
654  * change whilst we are performing an operation. We keep this lock
655  * for quite long periods of time compared to other locks. This
656  * doesn't matter, since it is shared and it is very, very rarely
657  * accessed in the exclusive mode (i.e. only when expanding the filesystem).
658  *
659  * This makes sure that we're using the latest copy of the resource index
660  * special file, which might have been updated if someone expanded the
661  * filesystem (via gfs2_grow utility), which adds new resource groups.
662  *
663  * Returns: 0 on success, error code otherwise
664  */
665 
gfs2_rindex_hold(struct gfs2_sbd * sdp,struct gfs2_holder * ri_gh)666 int gfs2_rindex_hold(struct gfs2_sbd *sdp, struct gfs2_holder *ri_gh)
667 {
668 	struct gfs2_inode *ip = GFS2_I(sdp->sd_rindex);
669 	struct gfs2_glock *gl = ip->i_gl;
670 	int error;
671 
672 	error = gfs2_glock_nq_init(gl, LM_ST_SHARED, 0, ri_gh);
673 	if (error)
674 		return error;
675 
676 	/* Read new copy from disk if we don't have the latest */
677 	if (!sdp->sd_rindex_uptodate) {
678 		mutex_lock(&sdp->sd_rindex_mutex);
679 		if (!sdp->sd_rindex_uptodate) {
680 			error = gfs2_ri_update(ip);
681 			if (error)
682 				gfs2_glock_dq_uninit(ri_gh);
683 		}
684 		mutex_unlock(&sdp->sd_rindex_mutex);
685 	}
686 
687 	return error;
688 }
689 
gfs2_rgrp_in(struct gfs2_rgrpd * rgd,const void * buf)690 static void gfs2_rgrp_in(struct gfs2_rgrpd *rgd, const void *buf)
691 {
692 	const struct gfs2_rgrp *str = buf;
693 	u32 rg_flags;
694 
695 	rg_flags = be32_to_cpu(str->rg_flags);
696 	if (rg_flags & GFS2_RGF_NOALLOC)
697 		rgd->rd_flags |= GFS2_RDF_NOALLOC;
698 	else
699 		rgd->rd_flags &= ~GFS2_RDF_NOALLOC;
700 	rgd->rd_free = be32_to_cpu(str->rg_free);
701 	rgd->rd_dinodes = be32_to_cpu(str->rg_dinodes);
702 	rgd->rd_igeneration = be64_to_cpu(str->rg_igeneration);
703 }
704 
gfs2_rgrp_out(struct gfs2_rgrpd * rgd,void * buf)705 static void gfs2_rgrp_out(struct gfs2_rgrpd *rgd, void *buf)
706 {
707 	struct gfs2_rgrp *str = buf;
708 	u32 rg_flags = 0;
709 
710 	if (rgd->rd_flags & GFS2_RDF_NOALLOC)
711 		rg_flags |= GFS2_RGF_NOALLOC;
712 	str->rg_flags = cpu_to_be32(rg_flags);
713 	str->rg_free = cpu_to_be32(rgd->rd_free);
714 	str->rg_dinodes = cpu_to_be32(rgd->rd_dinodes);
715 	str->__pad = cpu_to_be32(0);
716 	str->rg_igeneration = cpu_to_be64(rgd->rd_igeneration);
717 	memset(&str->rg_reserved, 0, sizeof(str->rg_reserved));
718 }
719 
720 /**
721  * gfs2_rgrp_bh_get - Read in a RG's header and bitmaps
722  * @rgd: the struct gfs2_rgrpd describing the RG to read in
723  *
724  * Read in all of a Resource Group's header and bitmap blocks.
725  * Caller must eventually call gfs2_rgrp_relse() to free the bitmaps.
726  *
727  * Returns: errno
728  */
729 
gfs2_rgrp_bh_get(struct gfs2_rgrpd * rgd)730 int gfs2_rgrp_bh_get(struct gfs2_rgrpd *rgd)
731 {
732 	struct gfs2_sbd *sdp = rgd->rd_sbd;
733 	struct gfs2_glock *gl = rgd->rd_gl;
734 	unsigned int length = rgd->rd_length;
735 	struct gfs2_bitmap *bi;
736 	unsigned int x, y;
737 	int error;
738 
739 	mutex_lock(&rgd->rd_mutex);
740 
741 	spin_lock(&sdp->sd_rindex_spin);
742 	if (rgd->rd_bh_count) {
743 		rgd->rd_bh_count++;
744 		spin_unlock(&sdp->sd_rindex_spin);
745 		mutex_unlock(&rgd->rd_mutex);
746 		return 0;
747 	}
748 	spin_unlock(&sdp->sd_rindex_spin);
749 
750 	for (x = 0; x < length; x++) {
751 		bi = rgd->rd_bits + x;
752 		error = gfs2_meta_read(gl, rgd->rd_addr + x, 0, &bi->bi_bh);
753 		if (error)
754 			goto fail;
755 	}
756 
757 	for (y = length; y--;) {
758 		bi = rgd->rd_bits + y;
759 		error = gfs2_meta_wait(sdp, bi->bi_bh);
760 		if (error)
761 			goto fail;
762 		if (gfs2_metatype_check(sdp, bi->bi_bh, y ? GFS2_METATYPE_RB :
763 					      GFS2_METATYPE_RG)) {
764 			error = -EIO;
765 			goto fail;
766 		}
767 	}
768 
769 	if (!(rgd->rd_flags & GFS2_RDF_UPTODATE)) {
770 		gfs2_rgrp_in(rgd, (rgd->rd_bits[0].bi_bh)->b_data);
771 		rgd->rd_flags |= GFS2_RDF_UPTODATE;
772 	}
773 
774 	spin_lock(&sdp->sd_rindex_spin);
775 	rgd->rd_free_clone = rgd->rd_free;
776 	rgd->rd_bh_count++;
777 	spin_unlock(&sdp->sd_rindex_spin);
778 
779 	mutex_unlock(&rgd->rd_mutex);
780 
781 	return 0;
782 
783 fail:
784 	while (x--) {
785 		bi = rgd->rd_bits + x;
786 		brelse(bi->bi_bh);
787 		bi->bi_bh = NULL;
788 		gfs2_assert_warn(sdp, !bi->bi_clone);
789 	}
790 	mutex_unlock(&rgd->rd_mutex);
791 
792 	return error;
793 }
794 
gfs2_rgrp_bh_hold(struct gfs2_rgrpd * rgd)795 void gfs2_rgrp_bh_hold(struct gfs2_rgrpd *rgd)
796 {
797 	struct gfs2_sbd *sdp = rgd->rd_sbd;
798 
799 	spin_lock(&sdp->sd_rindex_spin);
800 	gfs2_assert_warn(rgd->rd_sbd, rgd->rd_bh_count);
801 	rgd->rd_bh_count++;
802 	spin_unlock(&sdp->sd_rindex_spin);
803 }
804 
805 /**
806  * gfs2_rgrp_bh_put - Release RG bitmaps read in with gfs2_rgrp_bh_get()
807  * @rgd: the struct gfs2_rgrpd describing the RG to read in
808  *
809  */
810 
gfs2_rgrp_bh_put(struct gfs2_rgrpd * rgd)811 void gfs2_rgrp_bh_put(struct gfs2_rgrpd *rgd)
812 {
813 	struct gfs2_sbd *sdp = rgd->rd_sbd;
814 	int x, length = rgd->rd_length;
815 
816 	spin_lock(&sdp->sd_rindex_spin);
817 	gfs2_assert_warn(rgd->rd_sbd, rgd->rd_bh_count);
818 	if (--rgd->rd_bh_count) {
819 		spin_unlock(&sdp->sd_rindex_spin);
820 		return;
821 	}
822 
823 	for (x = 0; x < length; x++) {
824 		struct gfs2_bitmap *bi = rgd->rd_bits + x;
825 		kfree(bi->bi_clone);
826 		bi->bi_clone = NULL;
827 		brelse(bi->bi_bh);
828 		bi->bi_bh = NULL;
829 	}
830 
831 	spin_unlock(&sdp->sd_rindex_spin);
832 }
833 
gfs2_rgrp_repolish_clones(struct gfs2_rgrpd * rgd)834 void gfs2_rgrp_repolish_clones(struct gfs2_rgrpd *rgd)
835 {
836 	struct gfs2_sbd *sdp = rgd->rd_sbd;
837 	unsigned int length = rgd->rd_length;
838 	unsigned int x;
839 
840 	for (x = 0; x < length; x++) {
841 		struct gfs2_bitmap *bi = rgd->rd_bits + x;
842 		if (!bi->bi_clone)
843 			continue;
844 		memcpy(bi->bi_clone + bi->bi_offset,
845 		       bi->bi_bh->b_data + bi->bi_offset, bi->bi_len);
846 	}
847 
848 	spin_lock(&sdp->sd_rindex_spin);
849 	rgd->rd_free_clone = rgd->rd_free;
850 	spin_unlock(&sdp->sd_rindex_spin);
851 }
852 
853 /**
854  * gfs2_alloc_get - get the struct gfs2_alloc structure for an inode
855  * @ip: the incore GFS2 inode structure
856  *
857  * Returns: the struct gfs2_alloc
858  */
859 
gfs2_alloc_get(struct gfs2_inode * ip)860 struct gfs2_alloc *gfs2_alloc_get(struct gfs2_inode *ip)
861 {
862 	BUG_ON(ip->i_alloc != NULL);
863 	ip->i_alloc = kzalloc(sizeof(struct gfs2_alloc), GFP_KERNEL);
864 	return ip->i_alloc;
865 }
866 
867 /**
868  * try_rgrp_fit - See if a given reservation will fit in a given RG
869  * @rgd: the RG data
870  * @al: the struct gfs2_alloc structure describing the reservation
871  *
872  * If there's room for the requested blocks to be allocated from the RG:
873  *   Sets the $al_rgd field in @al.
874  *
875  * Returns: 1 on success (it fits), 0 on failure (it doesn't fit)
876  */
877 
try_rgrp_fit(struct gfs2_rgrpd * rgd,struct gfs2_alloc * al)878 static int try_rgrp_fit(struct gfs2_rgrpd *rgd, struct gfs2_alloc *al)
879 {
880 	struct gfs2_sbd *sdp = rgd->rd_sbd;
881 	int ret = 0;
882 
883 	if (rgd->rd_flags & GFS2_RDF_NOALLOC)
884 		return 0;
885 
886 	spin_lock(&sdp->sd_rindex_spin);
887 	if (rgd->rd_free_clone >= al->al_requested) {
888 		al->al_rgd = rgd;
889 		ret = 1;
890 	}
891 	spin_unlock(&sdp->sd_rindex_spin);
892 
893 	return ret;
894 }
895 
896 /**
897  * try_rgrp_unlink - Look for any unlinked, allocated, but unused inodes
898  * @rgd: The rgrp
899  *
900  * Returns: The inode, if one has been found
901  */
902 
try_rgrp_unlink(struct gfs2_rgrpd * rgd,u64 * last_unlinked)903 static struct inode *try_rgrp_unlink(struct gfs2_rgrpd *rgd, u64 *last_unlinked)
904 {
905 	struct inode *inode;
906 	u32 goal = 0, block;
907 	u64 no_addr;
908 	struct gfs2_sbd *sdp = rgd->rd_sbd;
909 	unsigned int n;
910 
911 	for(;;) {
912 		if (goal >= rgd->rd_data)
913 			break;
914 		down_write(&sdp->sd_log_flush_lock);
915 		n = 1;
916 		block = rgblk_search(rgd, goal, GFS2_BLKST_UNLINKED,
917 				     GFS2_BLKST_UNLINKED, &n);
918 		up_write(&sdp->sd_log_flush_lock);
919 		if (block == BFITNOENT)
920 			break;
921 		/* rgblk_search can return a block < goal, so we need to
922 		   keep it marching forward. */
923 		no_addr = block + rgd->rd_data0;
924 		goal++;
925 		if (*last_unlinked != NO_BLOCK && no_addr <= *last_unlinked)
926 			continue;
927 		*last_unlinked = no_addr;
928 		inode = gfs2_inode_lookup(rgd->rd_sbd->sd_vfs, DT_UNKNOWN,
929 					  no_addr, -1, 1);
930 		if (!IS_ERR(inode))
931 			return inode;
932 	}
933 
934 	rgd->rd_flags &= ~GFS2_RDF_CHECK;
935 	return NULL;
936 }
937 
938 /**
939  * recent_rgrp_next - get next RG from "recent" list
940  * @cur_rgd: current rgrp
941  *
942  * Returns: The next rgrp in the recent list
943  */
944 
recent_rgrp_next(struct gfs2_rgrpd * cur_rgd)945 static struct gfs2_rgrpd *recent_rgrp_next(struct gfs2_rgrpd *cur_rgd)
946 {
947 	struct gfs2_sbd *sdp = cur_rgd->rd_sbd;
948 	struct list_head *head;
949 	struct gfs2_rgrpd *rgd;
950 
951 	spin_lock(&sdp->sd_rindex_spin);
952 	head = &sdp->sd_rindex_mru_list;
953 	if (unlikely(cur_rgd->rd_list_mru.next == head)) {
954 		spin_unlock(&sdp->sd_rindex_spin);
955 		return NULL;
956 	}
957 	rgd = list_entry(cur_rgd->rd_list_mru.next, struct gfs2_rgrpd, rd_list_mru);
958 	spin_unlock(&sdp->sd_rindex_spin);
959 	return rgd;
960 }
961 
962 /**
963  * forward_rgrp_get - get an rgrp to try next from full list
964  * @sdp: The GFS2 superblock
965  *
966  * Returns: The rgrp to try next
967  */
968 
forward_rgrp_get(struct gfs2_sbd * sdp)969 static struct gfs2_rgrpd *forward_rgrp_get(struct gfs2_sbd *sdp)
970 {
971 	struct gfs2_rgrpd *rgd;
972 	unsigned int journals = gfs2_jindex_size(sdp);
973 	unsigned int rg = 0, x;
974 
975 	spin_lock(&sdp->sd_rindex_spin);
976 
977 	rgd = sdp->sd_rindex_forward;
978 	if (!rgd) {
979 		if (sdp->sd_rgrps >= journals)
980 			rg = sdp->sd_rgrps * sdp->sd_jdesc->jd_jid / journals;
981 
982 		for (x = 0, rgd = gfs2_rgrpd_get_first(sdp); x < rg;
983 		     x++, rgd = gfs2_rgrpd_get_next(rgd))
984 			/* Do Nothing */;
985 
986 		sdp->sd_rindex_forward = rgd;
987 	}
988 
989 	spin_unlock(&sdp->sd_rindex_spin);
990 
991 	return rgd;
992 }
993 
994 /**
995  * forward_rgrp_set - set the forward rgrp pointer
996  * @sdp: the filesystem
997  * @rgd: The new forward rgrp
998  *
999  */
1000 
forward_rgrp_set(struct gfs2_sbd * sdp,struct gfs2_rgrpd * rgd)1001 static void forward_rgrp_set(struct gfs2_sbd *sdp, struct gfs2_rgrpd *rgd)
1002 {
1003 	spin_lock(&sdp->sd_rindex_spin);
1004 	sdp->sd_rindex_forward = rgd;
1005 	spin_unlock(&sdp->sd_rindex_spin);
1006 }
1007 
1008 /**
1009  * get_local_rgrp - Choose and lock a rgrp for allocation
1010  * @ip: the inode to reserve space for
1011  * @rgp: the chosen and locked rgrp
1012  *
1013  * Try to acquire rgrp in way which avoids contending with others.
1014  *
1015  * Returns: errno
1016  */
1017 
get_local_rgrp(struct gfs2_inode * ip,u64 * last_unlinked)1018 static struct inode *get_local_rgrp(struct gfs2_inode *ip, u64 *last_unlinked)
1019 {
1020 	struct inode *inode = NULL;
1021 	struct gfs2_sbd *sdp = GFS2_SB(&ip->i_inode);
1022 	struct gfs2_rgrpd *rgd, *begin = NULL;
1023 	struct gfs2_alloc *al = ip->i_alloc;
1024 	int flags = LM_FLAG_TRY;
1025 	int skipped = 0;
1026 	int loops = 0;
1027 	int error, rg_locked;
1028 
1029 	rgd = gfs2_blk2rgrpd(sdp, ip->i_goal);
1030 
1031 	while (rgd) {
1032 		rg_locked = 0;
1033 
1034 		if (gfs2_glock_is_locked_by_me(rgd->rd_gl)) {
1035 			rg_locked = 1;
1036 			error = 0;
1037 		} else {
1038 			error = gfs2_glock_nq_init(rgd->rd_gl, LM_ST_EXCLUSIVE,
1039 						   LM_FLAG_TRY, &al->al_rgd_gh);
1040 		}
1041 		switch (error) {
1042 		case 0:
1043 			if (try_rgrp_fit(rgd, al))
1044 				goto out;
1045 			if (rgd->rd_flags & GFS2_RDF_CHECK)
1046 				inode = try_rgrp_unlink(rgd, last_unlinked);
1047 			if (!rg_locked)
1048 				gfs2_glock_dq_uninit(&al->al_rgd_gh);
1049 			if (inode)
1050 				return inode;
1051 			/* fall through */
1052 		case GLR_TRYFAILED:
1053 			rgd = recent_rgrp_next(rgd);
1054 			break;
1055 
1056 		default:
1057 			return ERR_PTR(error);
1058 		}
1059 	}
1060 
1061 	/* Go through full list of rgrps */
1062 
1063 	begin = rgd = forward_rgrp_get(sdp);
1064 
1065 	for (;;) {
1066 		rg_locked = 0;
1067 
1068 		if (gfs2_glock_is_locked_by_me(rgd->rd_gl)) {
1069 			rg_locked = 1;
1070 			error = 0;
1071 		} else {
1072 			error = gfs2_glock_nq_init(rgd->rd_gl, LM_ST_EXCLUSIVE, flags,
1073 						   &al->al_rgd_gh);
1074 		}
1075 		switch (error) {
1076 		case 0:
1077 			if (try_rgrp_fit(rgd, al))
1078 				goto out;
1079 			if (rgd->rd_flags & GFS2_RDF_CHECK)
1080 				inode = try_rgrp_unlink(rgd, last_unlinked);
1081 			if (!rg_locked)
1082 				gfs2_glock_dq_uninit(&al->al_rgd_gh);
1083 			if (inode)
1084 				return inode;
1085 			break;
1086 
1087 		case GLR_TRYFAILED:
1088 			skipped++;
1089 			break;
1090 
1091 		default:
1092 			return ERR_PTR(error);
1093 		}
1094 
1095 		rgd = gfs2_rgrpd_get_next(rgd);
1096 		if (!rgd)
1097 			rgd = gfs2_rgrpd_get_first(sdp);
1098 
1099 		if (rgd == begin) {
1100 			if (++loops >= 3)
1101 				return ERR_PTR(-ENOSPC);
1102 			if (!skipped)
1103 				loops++;
1104 			flags = 0;
1105 			if (loops == 2)
1106 				gfs2_log_flush(sdp, NULL);
1107 		}
1108 	}
1109 
1110 out:
1111 	if (begin) {
1112 		spin_lock(&sdp->sd_rindex_spin);
1113 		list_move(&rgd->rd_list_mru, &sdp->sd_rindex_mru_list);
1114 		spin_unlock(&sdp->sd_rindex_spin);
1115 		rgd = gfs2_rgrpd_get_next(rgd);
1116 		if (!rgd)
1117 			rgd = gfs2_rgrpd_get_first(sdp);
1118 		forward_rgrp_set(sdp, rgd);
1119 	}
1120 
1121 	return NULL;
1122 }
1123 
1124 /**
1125  * gfs2_inplace_reserve_i - Reserve space in the filesystem
1126  * @ip: the inode to reserve space for
1127  *
1128  * Returns: errno
1129  */
1130 
gfs2_inplace_reserve_i(struct gfs2_inode * ip,char * file,unsigned int line)1131 int gfs2_inplace_reserve_i(struct gfs2_inode *ip, char *file, unsigned int line)
1132 {
1133 	struct gfs2_sbd *sdp = GFS2_SB(&ip->i_inode);
1134 	struct gfs2_alloc *al = ip->i_alloc;
1135 	struct inode *inode;
1136 	int error = 0;
1137 	u64 last_unlinked = NO_BLOCK;
1138 
1139 	if (gfs2_assert_warn(sdp, al->al_requested))
1140 		return -EINVAL;
1141 
1142 try_again:
1143 	/* We need to hold the rindex unless the inode we're using is
1144 	   the rindex itself, in which case it's already held. */
1145 	if (ip != GFS2_I(sdp->sd_rindex))
1146 		error = gfs2_rindex_hold(sdp, &al->al_ri_gh);
1147 	else if (!sdp->sd_rgrps) /* We may not have the rindex read in, so: */
1148 		error = gfs2_ri_update_special(ip);
1149 
1150 	if (error)
1151 		return error;
1152 
1153 	inode = get_local_rgrp(ip, &last_unlinked);
1154 	if (inode) {
1155 		if (ip != GFS2_I(sdp->sd_rindex))
1156 			gfs2_glock_dq_uninit(&al->al_ri_gh);
1157 		if (IS_ERR(inode))
1158 			return PTR_ERR(inode);
1159 		iput(inode);
1160 		gfs2_log_flush(sdp, NULL);
1161 		goto try_again;
1162 	}
1163 
1164 	al->al_file = file;
1165 	al->al_line = line;
1166 
1167 	return 0;
1168 }
1169 
1170 /**
1171  * gfs2_inplace_release - release an inplace reservation
1172  * @ip: the inode the reservation was taken out on
1173  *
1174  * Release a reservation made by gfs2_inplace_reserve().
1175  */
1176 
gfs2_inplace_release(struct gfs2_inode * ip)1177 void gfs2_inplace_release(struct gfs2_inode *ip)
1178 {
1179 	struct gfs2_sbd *sdp = GFS2_SB(&ip->i_inode);
1180 	struct gfs2_alloc *al = ip->i_alloc;
1181 
1182 	if (gfs2_assert_warn(sdp, al->al_alloced <= al->al_requested) == -1)
1183 		fs_warn(sdp, "al_alloced = %u, al_requested = %u "
1184 			     "al_file = %s, al_line = %u\n",
1185 		             al->al_alloced, al->al_requested, al->al_file,
1186 			     al->al_line);
1187 
1188 	al->al_rgd = NULL;
1189 	if (al->al_rgd_gh.gh_gl)
1190 		gfs2_glock_dq_uninit(&al->al_rgd_gh);
1191 	if (ip != GFS2_I(sdp->sd_rindex))
1192 		gfs2_glock_dq_uninit(&al->al_ri_gh);
1193 }
1194 
1195 /**
1196  * gfs2_get_block_type - Check a block in a RG is of given type
1197  * @rgd: the resource group holding the block
1198  * @block: the block number
1199  *
1200  * Returns: The block type (GFS2_BLKST_*)
1201  */
1202 
gfs2_get_block_type(struct gfs2_rgrpd * rgd,u64 block)1203 unsigned char gfs2_get_block_type(struct gfs2_rgrpd *rgd, u64 block)
1204 {
1205 	struct gfs2_bitmap *bi = NULL;
1206 	u32 length, rgrp_block, buf_block;
1207 	unsigned int buf;
1208 	unsigned char type;
1209 
1210 	length = rgd->rd_length;
1211 	rgrp_block = block - rgd->rd_data0;
1212 
1213 	for (buf = 0; buf < length; buf++) {
1214 		bi = rgd->rd_bits + buf;
1215 		if (rgrp_block < (bi->bi_start + bi->bi_len) * GFS2_NBBY)
1216 			break;
1217 	}
1218 
1219 	gfs2_assert(rgd->rd_sbd, buf < length);
1220 	buf_block = rgrp_block - bi->bi_start * GFS2_NBBY;
1221 
1222 	type = gfs2_testbit(rgd, bi->bi_bh->b_data + bi->bi_offset,
1223 			   bi->bi_len, buf_block);
1224 
1225 	return type;
1226 }
1227 
1228 /**
1229  * rgblk_search - find a block in @old_state, change allocation
1230  *           state to @new_state
1231  * @rgd: the resource group descriptor
1232  * @goal: the goal block within the RG (start here to search for avail block)
1233  * @old_state: GFS2_BLKST_XXX the before-allocation state to find
1234  * @new_state: GFS2_BLKST_XXX the after-allocation block state
1235  * @n: The extent length
1236  *
1237  * Walk rgrp's bitmap to find bits that represent a block in @old_state.
1238  * Add the found bitmap buffer to the transaction.
1239  * Set the found bits to @new_state to change block's allocation state.
1240  *
1241  * This function never fails, because we wouldn't call it unless we
1242  * know (from reservation results, etc.) that a block is available.
1243  *
1244  * Scope of @goal and returned block is just within rgrp, not the whole
1245  * filesystem.
1246  *
1247  * Returns:  the block number allocated
1248  */
1249 
rgblk_search(struct gfs2_rgrpd * rgd,u32 goal,unsigned char old_state,unsigned char new_state,unsigned int * n)1250 static u32 rgblk_search(struct gfs2_rgrpd *rgd, u32 goal,
1251 			unsigned char old_state, unsigned char new_state,
1252 			unsigned int *n)
1253 {
1254 	struct gfs2_bitmap *bi = NULL;
1255 	const u32 length = rgd->rd_length;
1256 	u32 blk = 0;
1257 	unsigned int buf, x;
1258 	const unsigned int elen = *n;
1259 	const u8 *buffer;
1260 
1261 	*n = 0;
1262 	/* Find bitmap block that contains bits for goal block */
1263 	for (buf = 0; buf < length; buf++) {
1264 		bi = rgd->rd_bits + buf;
1265 		if (goal < (bi->bi_start + bi->bi_len) * GFS2_NBBY)
1266 			break;
1267 	}
1268 
1269 	gfs2_assert(rgd->rd_sbd, buf < length);
1270 
1271 	/* Convert scope of "goal" from rgrp-wide to within found bit block */
1272 	goal -= bi->bi_start * GFS2_NBBY;
1273 
1274 	/* Search (up to entire) bitmap in this rgrp for allocatable block.
1275 	   "x <= length", instead of "x < length", because we typically start
1276 	   the search in the middle of a bit block, but if we can't find an
1277 	   allocatable block anywhere else, we want to be able wrap around and
1278 	   search in the first part of our first-searched bit block.  */
1279 	for (x = 0; x <= length; x++) {
1280 		/* The GFS2_BLKST_UNLINKED state doesn't apply to the clone
1281 		   bitmaps, so we must search the originals for that. */
1282 		buffer = bi->bi_bh->b_data + bi->bi_offset;
1283 		if (old_state != GFS2_BLKST_UNLINKED && bi->bi_clone)
1284 			buffer = bi->bi_clone + bi->bi_offset;
1285 
1286 		blk = gfs2_bitfit(buffer, bi->bi_len, goal, old_state);
1287 		if (blk != BFITNOENT)
1288 			break;
1289 
1290 		/* Try next bitmap block (wrap back to rgrp header if at end) */
1291 		buf = (buf + 1) % length;
1292 		bi = rgd->rd_bits + buf;
1293 		goal = 0;
1294 	}
1295 
1296 	if (blk != BFITNOENT && old_state != new_state) {
1297 		*n = 1;
1298 		gfs2_trans_add_bh(rgd->rd_gl, bi->bi_bh, 1);
1299 		gfs2_setbit(rgd, bi->bi_bh->b_data, bi->bi_clone, bi->bi_offset,
1300 			    bi->bi_len, blk, new_state);
1301 		goal = blk;
1302 		while (*n < elen) {
1303 			goal++;
1304 			if (goal >= (bi->bi_len * GFS2_NBBY))
1305 				break;
1306 			if (gfs2_testbit(rgd, buffer, bi->bi_len, goal) !=
1307 			    GFS2_BLKST_FREE)
1308 				break;
1309 			gfs2_setbit(rgd, bi->bi_bh->b_data, bi->bi_clone,
1310 				    bi->bi_offset, bi->bi_len, goal,
1311 				    new_state);
1312 			(*n)++;
1313 		}
1314 	}
1315 
1316 	return (blk == BFITNOENT) ? blk : (bi->bi_start * GFS2_NBBY) + blk;
1317 }
1318 
1319 /**
1320  * rgblk_free - Change alloc state of given block(s)
1321  * @sdp: the filesystem
1322  * @bstart: the start of a run of blocks to free
1323  * @blen: the length of the block run (all must lie within ONE RG!)
1324  * @new_state: GFS2_BLKST_XXX the after-allocation block state
1325  *
1326  * Returns:  Resource group containing the block(s)
1327  */
1328 
rgblk_free(struct gfs2_sbd * sdp,u64 bstart,u32 blen,unsigned char new_state)1329 static struct gfs2_rgrpd *rgblk_free(struct gfs2_sbd *sdp, u64 bstart,
1330 				     u32 blen, unsigned char new_state)
1331 {
1332 	struct gfs2_rgrpd *rgd;
1333 	struct gfs2_bitmap *bi = NULL;
1334 	u32 length, rgrp_blk, buf_blk;
1335 	unsigned int buf;
1336 
1337 	rgd = gfs2_blk2rgrpd(sdp, bstart);
1338 	if (!rgd) {
1339 		if (gfs2_consist(sdp))
1340 			fs_err(sdp, "block = %llu\n", (unsigned long long)bstart);
1341 		return NULL;
1342 	}
1343 
1344 	length = rgd->rd_length;
1345 
1346 	rgrp_blk = bstart - rgd->rd_data0;
1347 
1348 	while (blen--) {
1349 		for (buf = 0; buf < length; buf++) {
1350 			bi = rgd->rd_bits + buf;
1351 			if (rgrp_blk < (bi->bi_start + bi->bi_len) * GFS2_NBBY)
1352 				break;
1353 		}
1354 
1355 		gfs2_assert(rgd->rd_sbd, buf < length);
1356 
1357 		buf_blk = rgrp_blk - bi->bi_start * GFS2_NBBY;
1358 		rgrp_blk++;
1359 
1360 		if (!bi->bi_clone) {
1361 			bi->bi_clone = kmalloc(bi->bi_bh->b_size,
1362 					       GFP_NOFS | __GFP_NOFAIL);
1363 			memcpy(bi->bi_clone + bi->bi_offset,
1364 			       bi->bi_bh->b_data + bi->bi_offset,
1365 			       bi->bi_len);
1366 		}
1367 		gfs2_trans_add_bh(rgd->rd_gl, bi->bi_bh, 1);
1368 		gfs2_setbit(rgd, bi->bi_bh->b_data, NULL, bi->bi_offset,
1369 			    bi->bi_len, buf_blk, new_state);
1370 	}
1371 
1372 	return rgd;
1373 }
1374 
1375 /**
1376  * gfs2_alloc_block - Allocate a block
1377  * @ip: the inode to allocate the block for
1378  *
1379  * Returns: the allocated block
1380  */
1381 
gfs2_alloc_block(struct gfs2_inode * ip,unsigned int * n)1382 u64 gfs2_alloc_block(struct gfs2_inode *ip, unsigned int *n)
1383 {
1384 	struct gfs2_sbd *sdp = GFS2_SB(&ip->i_inode);
1385 	struct gfs2_alloc *al = ip->i_alloc;
1386 	struct gfs2_rgrpd *rgd = al->al_rgd;
1387 	u32 goal, blk;
1388 	u64 block;
1389 
1390 	if (rgrp_contains_block(rgd, ip->i_goal))
1391 		goal = ip->i_goal - rgd->rd_data0;
1392 	else
1393 		goal = rgd->rd_last_alloc;
1394 
1395 	blk = rgblk_search(rgd, goal, GFS2_BLKST_FREE, GFS2_BLKST_USED, n);
1396 	BUG_ON(blk == BFITNOENT);
1397 
1398 	rgd->rd_last_alloc = blk;
1399 	block = rgd->rd_data0 + blk;
1400 	ip->i_goal = block;
1401 
1402 	gfs2_assert_withdraw(sdp, rgd->rd_free >= *n);
1403 	rgd->rd_free -= *n;
1404 
1405 	gfs2_trans_add_bh(rgd->rd_gl, rgd->rd_bits[0].bi_bh, 1);
1406 	gfs2_rgrp_out(rgd, rgd->rd_bits[0].bi_bh->b_data);
1407 
1408 	al->al_alloced += *n;
1409 
1410 	gfs2_statfs_change(sdp, 0, -(s64)*n, 0);
1411 	gfs2_quota_change(ip, *n, ip->i_inode.i_uid, ip->i_inode.i_gid);
1412 
1413 	spin_lock(&sdp->sd_rindex_spin);
1414 	rgd->rd_free_clone -= *n;
1415 	spin_unlock(&sdp->sd_rindex_spin);
1416 
1417 	return block;
1418 }
1419 
1420 /**
1421  * gfs2_alloc_di - Allocate a dinode
1422  * @dip: the directory that the inode is going in
1423  *
1424  * Returns: the block allocated
1425  */
1426 
gfs2_alloc_di(struct gfs2_inode * dip,u64 * generation)1427 u64 gfs2_alloc_di(struct gfs2_inode *dip, u64 *generation)
1428 {
1429 	struct gfs2_sbd *sdp = GFS2_SB(&dip->i_inode);
1430 	struct gfs2_alloc *al = dip->i_alloc;
1431 	struct gfs2_rgrpd *rgd = al->al_rgd;
1432 	u32 blk;
1433 	u64 block;
1434 	unsigned int n = 1;
1435 
1436 	blk = rgblk_search(rgd, rgd->rd_last_alloc,
1437 			   GFS2_BLKST_FREE, GFS2_BLKST_DINODE, &n);
1438 	BUG_ON(blk == BFITNOENT);
1439 
1440 	rgd->rd_last_alloc = blk;
1441 
1442 	block = rgd->rd_data0 + blk;
1443 
1444 	gfs2_assert_withdraw(sdp, rgd->rd_free);
1445 	rgd->rd_free--;
1446 	rgd->rd_dinodes++;
1447 	*generation = rgd->rd_igeneration++;
1448 	gfs2_trans_add_bh(rgd->rd_gl, rgd->rd_bits[0].bi_bh, 1);
1449 	gfs2_rgrp_out(rgd, rgd->rd_bits[0].bi_bh->b_data);
1450 
1451 	al->al_alloced++;
1452 
1453 	gfs2_statfs_change(sdp, 0, -1, +1);
1454 	gfs2_trans_add_unrevoke(sdp, block, 1);
1455 
1456 	spin_lock(&sdp->sd_rindex_spin);
1457 	rgd->rd_free_clone--;
1458 	spin_unlock(&sdp->sd_rindex_spin);
1459 
1460 	return block;
1461 }
1462 
1463 /**
1464  * gfs2_free_data - free a contiguous run of data block(s)
1465  * @ip: the inode these blocks are being freed from
1466  * @bstart: first block of a run of contiguous blocks
1467  * @blen: the length of the block run
1468  *
1469  */
1470 
gfs2_free_data(struct gfs2_inode * ip,u64 bstart,u32 blen)1471 void gfs2_free_data(struct gfs2_inode *ip, u64 bstart, u32 blen)
1472 {
1473 	struct gfs2_sbd *sdp = GFS2_SB(&ip->i_inode);
1474 	struct gfs2_rgrpd *rgd;
1475 
1476 	rgd = rgblk_free(sdp, bstart, blen, GFS2_BLKST_FREE);
1477 	if (!rgd)
1478 		return;
1479 
1480 	rgd->rd_free += blen;
1481 
1482 	gfs2_trans_add_bh(rgd->rd_gl, rgd->rd_bits[0].bi_bh, 1);
1483 	gfs2_rgrp_out(rgd, rgd->rd_bits[0].bi_bh->b_data);
1484 
1485 	gfs2_trans_add_rg(rgd);
1486 
1487 	gfs2_statfs_change(sdp, 0, +blen, 0);
1488 	gfs2_quota_change(ip, -(s64)blen, ip->i_inode.i_uid, ip->i_inode.i_gid);
1489 }
1490 
1491 /**
1492  * gfs2_free_meta - free a contiguous run of data block(s)
1493  * @ip: the inode these blocks are being freed from
1494  * @bstart: first block of a run of contiguous blocks
1495  * @blen: the length of the block run
1496  *
1497  */
1498 
gfs2_free_meta(struct gfs2_inode * ip,u64 bstart,u32 blen)1499 void gfs2_free_meta(struct gfs2_inode *ip, u64 bstart, u32 blen)
1500 {
1501 	struct gfs2_sbd *sdp = GFS2_SB(&ip->i_inode);
1502 	struct gfs2_rgrpd *rgd;
1503 
1504 	rgd = rgblk_free(sdp, bstart, blen, GFS2_BLKST_FREE);
1505 	if (!rgd)
1506 		return;
1507 
1508 	rgd->rd_free += blen;
1509 
1510 	gfs2_trans_add_bh(rgd->rd_gl, rgd->rd_bits[0].bi_bh, 1);
1511 	gfs2_rgrp_out(rgd, rgd->rd_bits[0].bi_bh->b_data);
1512 
1513 	gfs2_trans_add_rg(rgd);
1514 
1515 	gfs2_statfs_change(sdp, 0, +blen, 0);
1516 	gfs2_quota_change(ip, -(s64)blen, ip->i_inode.i_uid, ip->i_inode.i_gid);
1517 	gfs2_meta_wipe(ip, bstart, blen);
1518 }
1519 
gfs2_unlink_di(struct inode * inode)1520 void gfs2_unlink_di(struct inode *inode)
1521 {
1522 	struct gfs2_inode *ip = GFS2_I(inode);
1523 	struct gfs2_sbd *sdp = GFS2_SB(inode);
1524 	struct gfs2_rgrpd *rgd;
1525 	u64 blkno = ip->i_no_addr;
1526 
1527 	rgd = rgblk_free(sdp, blkno, 1, GFS2_BLKST_UNLINKED);
1528 	if (!rgd)
1529 		return;
1530 	gfs2_trans_add_bh(rgd->rd_gl, rgd->rd_bits[0].bi_bh, 1);
1531 	gfs2_rgrp_out(rgd, rgd->rd_bits[0].bi_bh->b_data);
1532 	gfs2_trans_add_rg(rgd);
1533 }
1534 
gfs2_free_uninit_di(struct gfs2_rgrpd * rgd,u64 blkno)1535 static void gfs2_free_uninit_di(struct gfs2_rgrpd *rgd, u64 blkno)
1536 {
1537 	struct gfs2_sbd *sdp = rgd->rd_sbd;
1538 	struct gfs2_rgrpd *tmp_rgd;
1539 
1540 	tmp_rgd = rgblk_free(sdp, blkno, 1, GFS2_BLKST_FREE);
1541 	if (!tmp_rgd)
1542 		return;
1543 	gfs2_assert_withdraw(sdp, rgd == tmp_rgd);
1544 
1545 	if (!rgd->rd_dinodes)
1546 		gfs2_consist_rgrpd(rgd);
1547 	rgd->rd_dinodes--;
1548 	rgd->rd_free++;
1549 
1550 	gfs2_trans_add_bh(rgd->rd_gl, rgd->rd_bits[0].bi_bh, 1);
1551 	gfs2_rgrp_out(rgd, rgd->rd_bits[0].bi_bh->b_data);
1552 
1553 	gfs2_statfs_change(sdp, 0, +1, -1);
1554 	gfs2_trans_add_rg(rgd);
1555 }
1556 
1557 
gfs2_free_di(struct gfs2_rgrpd * rgd,struct gfs2_inode * ip)1558 void gfs2_free_di(struct gfs2_rgrpd *rgd, struct gfs2_inode *ip)
1559 {
1560 	gfs2_free_uninit_di(rgd, ip->i_no_addr);
1561 	gfs2_quota_change(ip, -1, ip->i_inode.i_uid, ip->i_inode.i_gid);
1562 	gfs2_meta_wipe(ip, ip->i_no_addr, 1);
1563 }
1564 
1565 /**
1566  * gfs2_rlist_add - add a RG to a list of RGs
1567  * @sdp: the filesystem
1568  * @rlist: the list of resource groups
1569  * @block: the block
1570  *
1571  * Figure out what RG a block belongs to and add that RG to the list
1572  *
1573  * FIXME: Don't use NOFAIL
1574  *
1575  */
1576 
gfs2_rlist_add(struct gfs2_sbd * sdp,struct gfs2_rgrp_list * rlist,u64 block)1577 void gfs2_rlist_add(struct gfs2_sbd *sdp, struct gfs2_rgrp_list *rlist,
1578 		    u64 block)
1579 {
1580 	struct gfs2_rgrpd *rgd;
1581 	struct gfs2_rgrpd **tmp;
1582 	unsigned int new_space;
1583 	unsigned int x;
1584 
1585 	if (gfs2_assert_warn(sdp, !rlist->rl_ghs))
1586 		return;
1587 
1588 	rgd = gfs2_blk2rgrpd(sdp, block);
1589 	if (!rgd) {
1590 		if (gfs2_consist(sdp))
1591 			fs_err(sdp, "block = %llu\n", (unsigned long long)block);
1592 		return;
1593 	}
1594 
1595 	for (x = 0; x < rlist->rl_rgrps; x++)
1596 		if (rlist->rl_rgd[x] == rgd)
1597 			return;
1598 
1599 	if (rlist->rl_rgrps == rlist->rl_space) {
1600 		new_space = rlist->rl_space + 10;
1601 
1602 		tmp = kcalloc(new_space, sizeof(struct gfs2_rgrpd *),
1603 			      GFP_NOFS | __GFP_NOFAIL);
1604 
1605 		if (rlist->rl_rgd) {
1606 			memcpy(tmp, rlist->rl_rgd,
1607 			       rlist->rl_space * sizeof(struct gfs2_rgrpd *));
1608 			kfree(rlist->rl_rgd);
1609 		}
1610 
1611 		rlist->rl_space = new_space;
1612 		rlist->rl_rgd = tmp;
1613 	}
1614 
1615 	rlist->rl_rgd[rlist->rl_rgrps++] = rgd;
1616 }
1617 
1618 /**
1619  * gfs2_rlist_alloc - all RGs have been added to the rlist, now allocate
1620  *      and initialize an array of glock holders for them
1621  * @rlist: the list of resource groups
1622  * @state: the lock state to acquire the RG lock in
1623  * @flags: the modifier flags for the holder structures
1624  *
1625  * FIXME: Don't use NOFAIL
1626  *
1627  */
1628 
gfs2_rlist_alloc(struct gfs2_rgrp_list * rlist,unsigned int state)1629 void gfs2_rlist_alloc(struct gfs2_rgrp_list *rlist, unsigned int state)
1630 {
1631 	unsigned int x;
1632 
1633 	rlist->rl_ghs = kcalloc(rlist->rl_rgrps, sizeof(struct gfs2_holder),
1634 				GFP_NOFS | __GFP_NOFAIL);
1635 	for (x = 0; x < rlist->rl_rgrps; x++)
1636 		gfs2_holder_init(rlist->rl_rgd[x]->rd_gl,
1637 				state, 0,
1638 				&rlist->rl_ghs[x]);
1639 }
1640 
1641 /**
1642  * gfs2_rlist_free - free a resource group list
1643  * @list: the list of resource groups
1644  *
1645  */
1646 
gfs2_rlist_free(struct gfs2_rgrp_list * rlist)1647 void gfs2_rlist_free(struct gfs2_rgrp_list *rlist)
1648 {
1649 	unsigned int x;
1650 
1651 	kfree(rlist->rl_rgd);
1652 
1653 	if (rlist->rl_ghs) {
1654 		for (x = 0; x < rlist->rl_rgrps; x++)
1655 			gfs2_holder_uninit(&rlist->rl_ghs[x]);
1656 		kfree(rlist->rl_ghs);
1657 	}
1658 }
1659 
1660