xref: /linux/fs/xfs/libxfs/xfs_alloc.c (revision 4359a011e259a4608afc7fb3635370c9d4ba5943)
1 // SPDX-License-Identifier: GPL-2.0
2 /*
3  * Copyright (c) 2000-2002,2005 Silicon Graphics, Inc.
4  * All Rights Reserved.
5  */
6 #include "xfs.h"
7 #include "xfs_fs.h"
8 #include "xfs_format.h"
9 #include "xfs_log_format.h"
10 #include "xfs_shared.h"
11 #include "xfs_trans_resv.h"
12 #include "xfs_bit.h"
13 #include "xfs_mount.h"
14 #include "xfs_defer.h"
15 #include "xfs_btree.h"
16 #include "xfs_rmap.h"
17 #include "xfs_alloc_btree.h"
18 #include "xfs_alloc.h"
19 #include "xfs_extent_busy.h"
20 #include "xfs_errortag.h"
21 #include "xfs_error.h"
22 #include "xfs_trace.h"
23 #include "xfs_trans.h"
24 #include "xfs_buf_item.h"
25 #include "xfs_log.h"
26 #include "xfs_ag.h"
27 #include "xfs_ag_resv.h"
28 #include "xfs_bmap.h"
29 
30 struct kmem_cache	*xfs_extfree_item_cache;
31 
32 struct workqueue_struct *xfs_alloc_wq;
33 
34 #define XFS_ABSDIFF(a,b)	(((a) <= (b)) ? ((b) - (a)) : ((a) - (b)))
35 
36 #define	XFSA_FIXUP_BNO_OK	1
37 #define	XFSA_FIXUP_CNT_OK	2
38 
39 STATIC int xfs_alloc_ag_vextent_exact(xfs_alloc_arg_t *);
40 STATIC int xfs_alloc_ag_vextent_near(xfs_alloc_arg_t *);
41 STATIC int xfs_alloc_ag_vextent_size(xfs_alloc_arg_t *);
42 
43 /*
44  * Size of the AGFL.  For CRC-enabled filesystes we steal a couple of slots in
45  * the beginning of the block for a proper header with the location information
46  * and CRC.
47  */
48 unsigned int
49 xfs_agfl_size(
50 	struct xfs_mount	*mp)
51 {
52 	unsigned int		size = mp->m_sb.sb_sectsize;
53 
54 	if (xfs_has_crc(mp))
55 		size -= sizeof(struct xfs_agfl);
56 
57 	return size / sizeof(xfs_agblock_t);
58 }
59 
60 unsigned int
61 xfs_refc_block(
62 	struct xfs_mount	*mp)
63 {
64 	if (xfs_has_rmapbt(mp))
65 		return XFS_RMAP_BLOCK(mp) + 1;
66 	if (xfs_has_finobt(mp))
67 		return XFS_FIBT_BLOCK(mp) + 1;
68 	return XFS_IBT_BLOCK(mp) + 1;
69 }
70 
71 xfs_extlen_t
72 xfs_prealloc_blocks(
73 	struct xfs_mount	*mp)
74 {
75 	if (xfs_has_reflink(mp))
76 		return xfs_refc_block(mp) + 1;
77 	if (xfs_has_rmapbt(mp))
78 		return XFS_RMAP_BLOCK(mp) + 1;
79 	if (xfs_has_finobt(mp))
80 		return XFS_FIBT_BLOCK(mp) + 1;
81 	return XFS_IBT_BLOCK(mp) + 1;
82 }
83 
84 /*
85  * The number of blocks per AG that we withhold from xfs_mod_fdblocks to
86  * guarantee that we can refill the AGFL prior to allocating space in a nearly
87  * full AG.  Although the space described by the free space btrees, the
88  * blocks used by the freesp btrees themselves, and the blocks owned by the
89  * AGFL are counted in the ondisk fdblocks, it's a mistake to let the ondisk
90  * free space in the AG drop so low that the free space btrees cannot refill an
91  * empty AGFL up to the minimum level.  Rather than grind through empty AGs
92  * until the fs goes down, we subtract this many AG blocks from the incore
93  * fdblocks to ensure user allocation does not overcommit the space the
94  * filesystem needs for the AGFLs.  The rmap btree uses a per-AG reservation to
95  * withhold space from xfs_mod_fdblocks, so we do not account for that here.
96  */
97 #define XFS_ALLOCBT_AGFL_RESERVE	4
98 
99 /*
100  * Compute the number of blocks that we set aside to guarantee the ability to
101  * refill the AGFL and handle a full bmap btree split.
102  *
103  * In order to avoid ENOSPC-related deadlock caused by out-of-order locking of
104  * AGF buffer (PV 947395), we place constraints on the relationship among
105  * actual allocations for data blocks, freelist blocks, and potential file data
106  * bmap btree blocks. However, these restrictions may result in no actual space
107  * allocated for a delayed extent, for example, a data block in a certain AG is
108  * allocated but there is no additional block for the additional bmap btree
109  * block due to a split of the bmap btree of the file. The result of this may
110  * lead to an infinite loop when the file gets flushed to disk and all delayed
111  * extents need to be actually allocated. To get around this, we explicitly set
112  * aside a few blocks which will not be reserved in delayed allocation.
113  *
114  * For each AG, we need to reserve enough blocks to replenish a totally empty
115  * AGFL and 4 more to handle a potential split of the file's bmap btree.
116  */
117 unsigned int
118 xfs_alloc_set_aside(
119 	struct xfs_mount	*mp)
120 {
121 	return mp->m_sb.sb_agcount * (XFS_ALLOCBT_AGFL_RESERVE + 4);
122 }
123 
124 /*
125  * When deciding how much space to allocate out of an AG, we limit the
126  * allocation maximum size to the size the AG. However, we cannot use all the
127  * blocks in the AG - some are permanently used by metadata. These
128  * blocks are generally:
129  *	- the AG superblock, AGF, AGI and AGFL
130  *	- the AGF (bno and cnt) and AGI btree root blocks, and optionally
131  *	  the AGI free inode and rmap btree root blocks.
132  *	- blocks on the AGFL according to xfs_alloc_set_aside() limits
133  *	- the rmapbt root block
134  *
135  * The AG headers are sector sized, so the amount of space they take up is
136  * dependent on filesystem geometry. The others are all single blocks.
137  */
138 unsigned int
139 xfs_alloc_ag_max_usable(
140 	struct xfs_mount	*mp)
141 {
142 	unsigned int		blocks;
143 
144 	blocks = XFS_BB_TO_FSB(mp, XFS_FSS_TO_BB(mp, 4)); /* ag headers */
145 	blocks += XFS_ALLOCBT_AGFL_RESERVE;
146 	blocks += 3;			/* AGF, AGI btree root blocks */
147 	if (xfs_has_finobt(mp))
148 		blocks++;		/* finobt root block */
149 	if (xfs_has_rmapbt(mp))
150 		blocks++;		/* rmap root block */
151 	if (xfs_has_reflink(mp))
152 		blocks++;		/* refcount root block */
153 
154 	return mp->m_sb.sb_agblocks - blocks;
155 }
156 
157 /*
158  * Lookup the record equal to [bno, len] in the btree given by cur.
159  */
160 STATIC int				/* error */
161 xfs_alloc_lookup_eq(
162 	struct xfs_btree_cur	*cur,	/* btree cursor */
163 	xfs_agblock_t		bno,	/* starting block of extent */
164 	xfs_extlen_t		len,	/* length of extent */
165 	int			*stat)	/* success/failure */
166 {
167 	int			error;
168 
169 	cur->bc_rec.a.ar_startblock = bno;
170 	cur->bc_rec.a.ar_blockcount = len;
171 	error = xfs_btree_lookup(cur, XFS_LOOKUP_EQ, stat);
172 	cur->bc_ag.abt.active = (*stat == 1);
173 	return error;
174 }
175 
176 /*
177  * Lookup the first record greater than or equal to [bno, len]
178  * in the btree given by cur.
179  */
180 int				/* error */
181 xfs_alloc_lookup_ge(
182 	struct xfs_btree_cur	*cur,	/* btree cursor */
183 	xfs_agblock_t		bno,	/* starting block of extent */
184 	xfs_extlen_t		len,	/* length of extent */
185 	int			*stat)	/* success/failure */
186 {
187 	int			error;
188 
189 	cur->bc_rec.a.ar_startblock = bno;
190 	cur->bc_rec.a.ar_blockcount = len;
191 	error = xfs_btree_lookup(cur, XFS_LOOKUP_GE, stat);
192 	cur->bc_ag.abt.active = (*stat == 1);
193 	return error;
194 }
195 
196 /*
197  * Lookup the first record less than or equal to [bno, len]
198  * in the btree given by cur.
199  */
200 int					/* error */
201 xfs_alloc_lookup_le(
202 	struct xfs_btree_cur	*cur,	/* btree cursor */
203 	xfs_agblock_t		bno,	/* starting block of extent */
204 	xfs_extlen_t		len,	/* length of extent */
205 	int			*stat)	/* success/failure */
206 {
207 	int			error;
208 	cur->bc_rec.a.ar_startblock = bno;
209 	cur->bc_rec.a.ar_blockcount = len;
210 	error = xfs_btree_lookup(cur, XFS_LOOKUP_LE, stat);
211 	cur->bc_ag.abt.active = (*stat == 1);
212 	return error;
213 }
214 
215 static inline bool
216 xfs_alloc_cur_active(
217 	struct xfs_btree_cur	*cur)
218 {
219 	return cur && cur->bc_ag.abt.active;
220 }
221 
222 /*
223  * Update the record referred to by cur to the value given
224  * by [bno, len].
225  * This either works (return 0) or gets an EFSCORRUPTED error.
226  */
227 STATIC int				/* error */
228 xfs_alloc_update(
229 	struct xfs_btree_cur	*cur,	/* btree cursor */
230 	xfs_agblock_t		bno,	/* starting block of extent */
231 	xfs_extlen_t		len)	/* length of extent */
232 {
233 	union xfs_btree_rec	rec;
234 
235 	rec.alloc.ar_startblock = cpu_to_be32(bno);
236 	rec.alloc.ar_blockcount = cpu_to_be32(len);
237 	return xfs_btree_update(cur, &rec);
238 }
239 
240 /*
241  * Get the data from the pointed-to record.
242  */
243 int					/* error */
244 xfs_alloc_get_rec(
245 	struct xfs_btree_cur	*cur,	/* btree cursor */
246 	xfs_agblock_t		*bno,	/* output: starting block of extent */
247 	xfs_extlen_t		*len,	/* output: length of extent */
248 	int			*stat)	/* output: success/failure */
249 {
250 	struct xfs_mount	*mp = cur->bc_mp;
251 	struct xfs_perag	*pag = cur->bc_ag.pag;
252 	union xfs_btree_rec	*rec;
253 	int			error;
254 
255 	error = xfs_btree_get_rec(cur, &rec, stat);
256 	if (error || !(*stat))
257 		return error;
258 
259 	*bno = be32_to_cpu(rec->alloc.ar_startblock);
260 	*len = be32_to_cpu(rec->alloc.ar_blockcount);
261 
262 	if (*len == 0)
263 		goto out_bad_rec;
264 
265 	/* check for valid extent range, including overflow */
266 	if (!xfs_verify_agbno(pag, *bno))
267 		goto out_bad_rec;
268 	if (*bno > *bno + *len)
269 		goto out_bad_rec;
270 	if (!xfs_verify_agbno(pag, *bno + *len - 1))
271 		goto out_bad_rec;
272 
273 	return 0;
274 
275 out_bad_rec:
276 	xfs_warn(mp,
277 		"%s Freespace BTree record corruption in AG %d detected!",
278 		cur->bc_btnum == XFS_BTNUM_BNO ? "Block" : "Size",
279 		pag->pag_agno);
280 	xfs_warn(mp,
281 		"start block 0x%x block count 0x%x", *bno, *len);
282 	return -EFSCORRUPTED;
283 }
284 
285 /*
286  * Compute aligned version of the found extent.
287  * Takes alignment and min length into account.
288  */
289 STATIC bool
290 xfs_alloc_compute_aligned(
291 	xfs_alloc_arg_t	*args,		/* allocation argument structure */
292 	xfs_agblock_t	foundbno,	/* starting block in found extent */
293 	xfs_extlen_t	foundlen,	/* length in found extent */
294 	xfs_agblock_t	*resbno,	/* result block number */
295 	xfs_extlen_t	*reslen,	/* result length */
296 	unsigned	*busy_gen)
297 {
298 	xfs_agblock_t	bno = foundbno;
299 	xfs_extlen_t	len = foundlen;
300 	xfs_extlen_t	diff;
301 	bool		busy;
302 
303 	/* Trim busy sections out of found extent */
304 	busy = xfs_extent_busy_trim(args, &bno, &len, busy_gen);
305 
306 	/*
307 	 * If we have a largish extent that happens to start before min_agbno,
308 	 * see if we can shift it into range...
309 	 */
310 	if (bno < args->min_agbno && bno + len > args->min_agbno) {
311 		diff = args->min_agbno - bno;
312 		if (len > diff) {
313 			bno += diff;
314 			len -= diff;
315 		}
316 	}
317 
318 	if (args->alignment > 1 && len >= args->minlen) {
319 		xfs_agblock_t	aligned_bno = roundup(bno, args->alignment);
320 
321 		diff = aligned_bno - bno;
322 
323 		*resbno = aligned_bno;
324 		*reslen = diff >= len ? 0 : len - diff;
325 	} else {
326 		*resbno = bno;
327 		*reslen = len;
328 	}
329 
330 	return busy;
331 }
332 
333 /*
334  * Compute best start block and diff for "near" allocations.
335  * freelen >= wantlen already checked by caller.
336  */
337 STATIC xfs_extlen_t			/* difference value (absolute) */
338 xfs_alloc_compute_diff(
339 	xfs_agblock_t	wantbno,	/* target starting block */
340 	xfs_extlen_t	wantlen,	/* target length */
341 	xfs_extlen_t	alignment,	/* target alignment */
342 	int		datatype,	/* are we allocating data? */
343 	xfs_agblock_t	freebno,	/* freespace's starting block */
344 	xfs_extlen_t	freelen,	/* freespace's length */
345 	xfs_agblock_t	*newbnop)	/* result: best start block from free */
346 {
347 	xfs_agblock_t	freeend;	/* end of freespace extent */
348 	xfs_agblock_t	newbno1;	/* return block number */
349 	xfs_agblock_t	newbno2;	/* other new block number */
350 	xfs_extlen_t	newlen1=0;	/* length with newbno1 */
351 	xfs_extlen_t	newlen2=0;	/* length with newbno2 */
352 	xfs_agblock_t	wantend;	/* end of target extent */
353 	bool		userdata = datatype & XFS_ALLOC_USERDATA;
354 
355 	ASSERT(freelen >= wantlen);
356 	freeend = freebno + freelen;
357 	wantend = wantbno + wantlen;
358 	/*
359 	 * We want to allocate from the start of a free extent if it is past
360 	 * the desired block or if we are allocating user data and the free
361 	 * extent is before desired block. The second case is there to allow
362 	 * for contiguous allocation from the remaining free space if the file
363 	 * grows in the short term.
364 	 */
365 	if (freebno >= wantbno || (userdata && freeend < wantend)) {
366 		if ((newbno1 = roundup(freebno, alignment)) >= freeend)
367 			newbno1 = NULLAGBLOCK;
368 	} else if (freeend >= wantend && alignment > 1) {
369 		newbno1 = roundup(wantbno, alignment);
370 		newbno2 = newbno1 - alignment;
371 		if (newbno1 >= freeend)
372 			newbno1 = NULLAGBLOCK;
373 		else
374 			newlen1 = XFS_EXTLEN_MIN(wantlen, freeend - newbno1);
375 		if (newbno2 < freebno)
376 			newbno2 = NULLAGBLOCK;
377 		else
378 			newlen2 = XFS_EXTLEN_MIN(wantlen, freeend - newbno2);
379 		if (newbno1 != NULLAGBLOCK && newbno2 != NULLAGBLOCK) {
380 			if (newlen1 < newlen2 ||
381 			    (newlen1 == newlen2 &&
382 			     XFS_ABSDIFF(newbno1, wantbno) >
383 			     XFS_ABSDIFF(newbno2, wantbno)))
384 				newbno1 = newbno2;
385 		} else if (newbno2 != NULLAGBLOCK)
386 			newbno1 = newbno2;
387 	} else if (freeend >= wantend) {
388 		newbno1 = wantbno;
389 	} else if (alignment > 1) {
390 		newbno1 = roundup(freeend - wantlen, alignment);
391 		if (newbno1 > freeend - wantlen &&
392 		    newbno1 - alignment >= freebno)
393 			newbno1 -= alignment;
394 		else if (newbno1 >= freeend)
395 			newbno1 = NULLAGBLOCK;
396 	} else
397 		newbno1 = freeend - wantlen;
398 	*newbnop = newbno1;
399 	return newbno1 == NULLAGBLOCK ? 0 : XFS_ABSDIFF(newbno1, wantbno);
400 }
401 
402 /*
403  * Fix up the length, based on mod and prod.
404  * len should be k * prod + mod for some k.
405  * If len is too small it is returned unchanged.
406  * If len hits maxlen it is left alone.
407  */
408 STATIC void
409 xfs_alloc_fix_len(
410 	xfs_alloc_arg_t	*args)		/* allocation argument structure */
411 {
412 	xfs_extlen_t	k;
413 	xfs_extlen_t	rlen;
414 
415 	ASSERT(args->mod < args->prod);
416 	rlen = args->len;
417 	ASSERT(rlen >= args->minlen);
418 	ASSERT(rlen <= args->maxlen);
419 	if (args->prod <= 1 || rlen < args->mod || rlen == args->maxlen ||
420 	    (args->mod == 0 && rlen < args->prod))
421 		return;
422 	k = rlen % args->prod;
423 	if (k == args->mod)
424 		return;
425 	if (k > args->mod)
426 		rlen = rlen - (k - args->mod);
427 	else
428 		rlen = rlen - args->prod + (args->mod - k);
429 	/* casts to (int) catch length underflows */
430 	if ((int)rlen < (int)args->minlen)
431 		return;
432 	ASSERT(rlen >= args->minlen && rlen <= args->maxlen);
433 	ASSERT(rlen % args->prod == args->mod);
434 	ASSERT(args->pag->pagf_freeblks + args->pag->pagf_flcount >=
435 		rlen + args->minleft);
436 	args->len = rlen;
437 }
438 
439 /*
440  * Update the two btrees, logically removing from freespace the extent
441  * starting at rbno, rlen blocks.  The extent is contained within the
442  * actual (current) free extent fbno for flen blocks.
443  * Flags are passed in indicating whether the cursors are set to the
444  * relevant records.
445  */
446 STATIC int				/* error code */
447 xfs_alloc_fixup_trees(
448 	struct xfs_btree_cur *cnt_cur,	/* cursor for by-size btree */
449 	struct xfs_btree_cur *bno_cur,	/* cursor for by-block btree */
450 	xfs_agblock_t	fbno,		/* starting block of free extent */
451 	xfs_extlen_t	flen,		/* length of free extent */
452 	xfs_agblock_t	rbno,		/* starting block of returned extent */
453 	xfs_extlen_t	rlen,		/* length of returned extent */
454 	int		flags)		/* flags, XFSA_FIXUP_... */
455 {
456 	int		error;		/* error code */
457 	int		i;		/* operation results */
458 	xfs_agblock_t	nfbno1;		/* first new free startblock */
459 	xfs_agblock_t	nfbno2;		/* second new free startblock */
460 	xfs_extlen_t	nflen1=0;	/* first new free length */
461 	xfs_extlen_t	nflen2=0;	/* second new free length */
462 	struct xfs_mount *mp;
463 
464 	mp = cnt_cur->bc_mp;
465 
466 	/*
467 	 * Look up the record in the by-size tree if necessary.
468 	 */
469 	if (flags & XFSA_FIXUP_CNT_OK) {
470 #ifdef DEBUG
471 		if ((error = xfs_alloc_get_rec(cnt_cur, &nfbno1, &nflen1, &i)))
472 			return error;
473 		if (XFS_IS_CORRUPT(mp,
474 				   i != 1 ||
475 				   nfbno1 != fbno ||
476 				   nflen1 != flen))
477 			return -EFSCORRUPTED;
478 #endif
479 	} else {
480 		if ((error = xfs_alloc_lookup_eq(cnt_cur, fbno, flen, &i)))
481 			return error;
482 		if (XFS_IS_CORRUPT(mp, i != 1))
483 			return -EFSCORRUPTED;
484 	}
485 	/*
486 	 * Look up the record in the by-block tree if necessary.
487 	 */
488 	if (flags & XFSA_FIXUP_BNO_OK) {
489 #ifdef DEBUG
490 		if ((error = xfs_alloc_get_rec(bno_cur, &nfbno1, &nflen1, &i)))
491 			return error;
492 		if (XFS_IS_CORRUPT(mp,
493 				   i != 1 ||
494 				   nfbno1 != fbno ||
495 				   nflen1 != flen))
496 			return -EFSCORRUPTED;
497 #endif
498 	} else {
499 		if ((error = xfs_alloc_lookup_eq(bno_cur, fbno, flen, &i)))
500 			return error;
501 		if (XFS_IS_CORRUPT(mp, i != 1))
502 			return -EFSCORRUPTED;
503 	}
504 
505 #ifdef DEBUG
506 	if (bno_cur->bc_nlevels == 1 && cnt_cur->bc_nlevels == 1) {
507 		struct xfs_btree_block	*bnoblock;
508 		struct xfs_btree_block	*cntblock;
509 
510 		bnoblock = XFS_BUF_TO_BLOCK(bno_cur->bc_levels[0].bp);
511 		cntblock = XFS_BUF_TO_BLOCK(cnt_cur->bc_levels[0].bp);
512 
513 		if (XFS_IS_CORRUPT(mp,
514 				   bnoblock->bb_numrecs !=
515 				   cntblock->bb_numrecs))
516 			return -EFSCORRUPTED;
517 	}
518 #endif
519 
520 	/*
521 	 * Deal with all four cases: the allocated record is contained
522 	 * within the freespace record, so we can have new freespace
523 	 * at either (or both) end, or no freespace remaining.
524 	 */
525 	if (rbno == fbno && rlen == flen)
526 		nfbno1 = nfbno2 = NULLAGBLOCK;
527 	else if (rbno == fbno) {
528 		nfbno1 = rbno + rlen;
529 		nflen1 = flen - rlen;
530 		nfbno2 = NULLAGBLOCK;
531 	} else if (rbno + rlen == fbno + flen) {
532 		nfbno1 = fbno;
533 		nflen1 = flen - rlen;
534 		nfbno2 = NULLAGBLOCK;
535 	} else {
536 		nfbno1 = fbno;
537 		nflen1 = rbno - fbno;
538 		nfbno2 = rbno + rlen;
539 		nflen2 = (fbno + flen) - nfbno2;
540 	}
541 	/*
542 	 * Delete the entry from the by-size btree.
543 	 */
544 	if ((error = xfs_btree_delete(cnt_cur, &i)))
545 		return error;
546 	if (XFS_IS_CORRUPT(mp, i != 1))
547 		return -EFSCORRUPTED;
548 	/*
549 	 * Add new by-size btree entry(s).
550 	 */
551 	if (nfbno1 != NULLAGBLOCK) {
552 		if ((error = xfs_alloc_lookup_eq(cnt_cur, nfbno1, nflen1, &i)))
553 			return error;
554 		if (XFS_IS_CORRUPT(mp, i != 0))
555 			return -EFSCORRUPTED;
556 		if ((error = xfs_btree_insert(cnt_cur, &i)))
557 			return error;
558 		if (XFS_IS_CORRUPT(mp, i != 1))
559 			return -EFSCORRUPTED;
560 	}
561 	if (nfbno2 != NULLAGBLOCK) {
562 		if ((error = xfs_alloc_lookup_eq(cnt_cur, nfbno2, nflen2, &i)))
563 			return error;
564 		if (XFS_IS_CORRUPT(mp, i != 0))
565 			return -EFSCORRUPTED;
566 		if ((error = xfs_btree_insert(cnt_cur, &i)))
567 			return error;
568 		if (XFS_IS_CORRUPT(mp, i != 1))
569 			return -EFSCORRUPTED;
570 	}
571 	/*
572 	 * Fix up the by-block btree entry(s).
573 	 */
574 	if (nfbno1 == NULLAGBLOCK) {
575 		/*
576 		 * No remaining freespace, just delete the by-block tree entry.
577 		 */
578 		if ((error = xfs_btree_delete(bno_cur, &i)))
579 			return error;
580 		if (XFS_IS_CORRUPT(mp, i != 1))
581 			return -EFSCORRUPTED;
582 	} else {
583 		/*
584 		 * Update the by-block entry to start later|be shorter.
585 		 */
586 		if ((error = xfs_alloc_update(bno_cur, nfbno1, nflen1)))
587 			return error;
588 	}
589 	if (nfbno2 != NULLAGBLOCK) {
590 		/*
591 		 * 2 resulting free entries, need to add one.
592 		 */
593 		if ((error = xfs_alloc_lookup_eq(bno_cur, nfbno2, nflen2, &i)))
594 			return error;
595 		if (XFS_IS_CORRUPT(mp, i != 0))
596 			return -EFSCORRUPTED;
597 		if ((error = xfs_btree_insert(bno_cur, &i)))
598 			return error;
599 		if (XFS_IS_CORRUPT(mp, i != 1))
600 			return -EFSCORRUPTED;
601 	}
602 	return 0;
603 }
604 
605 static xfs_failaddr_t
606 xfs_agfl_verify(
607 	struct xfs_buf	*bp)
608 {
609 	struct xfs_mount *mp = bp->b_mount;
610 	struct xfs_agfl	*agfl = XFS_BUF_TO_AGFL(bp);
611 	__be32		*agfl_bno = xfs_buf_to_agfl_bno(bp);
612 	int		i;
613 
614 	/*
615 	 * There is no verification of non-crc AGFLs because mkfs does not
616 	 * initialise the AGFL to zero or NULL. Hence the only valid part of the
617 	 * AGFL is what the AGF says is active. We can't get to the AGF, so we
618 	 * can't verify just those entries are valid.
619 	 */
620 	if (!xfs_has_crc(mp))
621 		return NULL;
622 
623 	if (!xfs_verify_magic(bp, agfl->agfl_magicnum))
624 		return __this_address;
625 	if (!uuid_equal(&agfl->agfl_uuid, &mp->m_sb.sb_meta_uuid))
626 		return __this_address;
627 	/*
628 	 * during growfs operations, the perag is not fully initialised,
629 	 * so we can't use it for any useful checking. growfs ensures we can't
630 	 * use it by using uncached buffers that don't have the perag attached
631 	 * so we can detect and avoid this problem.
632 	 */
633 	if (bp->b_pag && be32_to_cpu(agfl->agfl_seqno) != bp->b_pag->pag_agno)
634 		return __this_address;
635 
636 	for (i = 0; i < xfs_agfl_size(mp); i++) {
637 		if (be32_to_cpu(agfl_bno[i]) != NULLAGBLOCK &&
638 		    be32_to_cpu(agfl_bno[i]) >= mp->m_sb.sb_agblocks)
639 			return __this_address;
640 	}
641 
642 	if (!xfs_log_check_lsn(mp, be64_to_cpu(XFS_BUF_TO_AGFL(bp)->agfl_lsn)))
643 		return __this_address;
644 	return NULL;
645 }
646 
647 static void
648 xfs_agfl_read_verify(
649 	struct xfs_buf	*bp)
650 {
651 	struct xfs_mount *mp = bp->b_mount;
652 	xfs_failaddr_t	fa;
653 
654 	/*
655 	 * There is no verification of non-crc AGFLs because mkfs does not
656 	 * initialise the AGFL to zero or NULL. Hence the only valid part of the
657 	 * AGFL is what the AGF says is active. We can't get to the AGF, so we
658 	 * can't verify just those entries are valid.
659 	 */
660 	if (!xfs_has_crc(mp))
661 		return;
662 
663 	if (!xfs_buf_verify_cksum(bp, XFS_AGFL_CRC_OFF))
664 		xfs_verifier_error(bp, -EFSBADCRC, __this_address);
665 	else {
666 		fa = xfs_agfl_verify(bp);
667 		if (fa)
668 			xfs_verifier_error(bp, -EFSCORRUPTED, fa);
669 	}
670 }
671 
672 static void
673 xfs_agfl_write_verify(
674 	struct xfs_buf	*bp)
675 {
676 	struct xfs_mount	*mp = bp->b_mount;
677 	struct xfs_buf_log_item	*bip = bp->b_log_item;
678 	xfs_failaddr_t		fa;
679 
680 	/* no verification of non-crc AGFLs */
681 	if (!xfs_has_crc(mp))
682 		return;
683 
684 	fa = xfs_agfl_verify(bp);
685 	if (fa) {
686 		xfs_verifier_error(bp, -EFSCORRUPTED, fa);
687 		return;
688 	}
689 
690 	if (bip)
691 		XFS_BUF_TO_AGFL(bp)->agfl_lsn = cpu_to_be64(bip->bli_item.li_lsn);
692 
693 	xfs_buf_update_cksum(bp, XFS_AGFL_CRC_OFF);
694 }
695 
696 const struct xfs_buf_ops xfs_agfl_buf_ops = {
697 	.name = "xfs_agfl",
698 	.magic = { cpu_to_be32(XFS_AGFL_MAGIC), cpu_to_be32(XFS_AGFL_MAGIC) },
699 	.verify_read = xfs_agfl_read_verify,
700 	.verify_write = xfs_agfl_write_verify,
701 	.verify_struct = xfs_agfl_verify,
702 };
703 
704 /*
705  * Read in the allocation group free block array.
706  */
707 int
708 xfs_alloc_read_agfl(
709 	struct xfs_perag	*pag,
710 	struct xfs_trans	*tp,
711 	struct xfs_buf		**bpp)
712 {
713 	struct xfs_mount	*mp = pag->pag_mount;
714 	struct xfs_buf		*bp;
715 	int			error;
716 
717 	error = xfs_trans_read_buf(
718 			mp, tp, mp->m_ddev_targp,
719 			XFS_AG_DADDR(mp, pag->pag_agno, XFS_AGFL_DADDR(mp)),
720 			XFS_FSS_TO_BB(mp, 1), 0, &bp, &xfs_agfl_buf_ops);
721 	if (error)
722 		return error;
723 	xfs_buf_set_ref(bp, XFS_AGFL_REF);
724 	*bpp = bp;
725 	return 0;
726 }
727 
728 STATIC int
729 xfs_alloc_update_counters(
730 	struct xfs_trans	*tp,
731 	struct xfs_buf		*agbp,
732 	long			len)
733 {
734 	struct xfs_agf		*agf = agbp->b_addr;
735 
736 	agbp->b_pag->pagf_freeblks += len;
737 	be32_add_cpu(&agf->agf_freeblks, len);
738 
739 	if (unlikely(be32_to_cpu(agf->agf_freeblks) >
740 		     be32_to_cpu(agf->agf_length))) {
741 		xfs_buf_mark_corrupt(agbp);
742 		return -EFSCORRUPTED;
743 	}
744 
745 	xfs_alloc_log_agf(tp, agbp, XFS_AGF_FREEBLKS);
746 	return 0;
747 }
748 
749 /*
750  * Block allocation algorithm and data structures.
751  */
752 struct xfs_alloc_cur {
753 	struct xfs_btree_cur		*cnt;	/* btree cursors */
754 	struct xfs_btree_cur		*bnolt;
755 	struct xfs_btree_cur		*bnogt;
756 	xfs_extlen_t			cur_len;/* current search length */
757 	xfs_agblock_t			rec_bno;/* extent startblock */
758 	xfs_extlen_t			rec_len;/* extent length */
759 	xfs_agblock_t			bno;	/* alloc bno */
760 	xfs_extlen_t			len;	/* alloc len */
761 	xfs_extlen_t			diff;	/* diff from search bno */
762 	unsigned int			busy_gen;/* busy state */
763 	bool				busy;
764 };
765 
766 /*
767  * Set up cursors, etc. in the extent allocation cursor. This function can be
768  * called multiple times to reset an initialized structure without having to
769  * reallocate cursors.
770  */
771 static int
772 xfs_alloc_cur_setup(
773 	struct xfs_alloc_arg	*args,
774 	struct xfs_alloc_cur	*acur)
775 {
776 	int			error;
777 	int			i;
778 
779 	ASSERT(args->alignment == 1 || args->type != XFS_ALLOCTYPE_THIS_BNO);
780 
781 	acur->cur_len = args->maxlen;
782 	acur->rec_bno = 0;
783 	acur->rec_len = 0;
784 	acur->bno = 0;
785 	acur->len = 0;
786 	acur->diff = -1;
787 	acur->busy = false;
788 	acur->busy_gen = 0;
789 
790 	/*
791 	 * Perform an initial cntbt lookup to check for availability of maxlen
792 	 * extents. If this fails, we'll return -ENOSPC to signal the caller to
793 	 * attempt a small allocation.
794 	 */
795 	if (!acur->cnt)
796 		acur->cnt = xfs_allocbt_init_cursor(args->mp, args->tp,
797 					args->agbp, args->pag, XFS_BTNUM_CNT);
798 	error = xfs_alloc_lookup_ge(acur->cnt, 0, args->maxlen, &i);
799 	if (error)
800 		return error;
801 
802 	/*
803 	 * Allocate the bnobt left and right search cursors.
804 	 */
805 	if (!acur->bnolt)
806 		acur->bnolt = xfs_allocbt_init_cursor(args->mp, args->tp,
807 					args->agbp, args->pag, XFS_BTNUM_BNO);
808 	if (!acur->bnogt)
809 		acur->bnogt = xfs_allocbt_init_cursor(args->mp, args->tp,
810 					args->agbp, args->pag, XFS_BTNUM_BNO);
811 	return i == 1 ? 0 : -ENOSPC;
812 }
813 
814 static void
815 xfs_alloc_cur_close(
816 	struct xfs_alloc_cur	*acur,
817 	bool			error)
818 {
819 	int			cur_error = XFS_BTREE_NOERROR;
820 
821 	if (error)
822 		cur_error = XFS_BTREE_ERROR;
823 
824 	if (acur->cnt)
825 		xfs_btree_del_cursor(acur->cnt, cur_error);
826 	if (acur->bnolt)
827 		xfs_btree_del_cursor(acur->bnolt, cur_error);
828 	if (acur->bnogt)
829 		xfs_btree_del_cursor(acur->bnogt, cur_error);
830 	acur->cnt = acur->bnolt = acur->bnogt = NULL;
831 }
832 
833 /*
834  * Check an extent for allocation and track the best available candidate in the
835  * allocation structure. The cursor is deactivated if it has entered an out of
836  * range state based on allocation arguments. Optionally return the extent
837  * extent geometry and allocation status if requested by the caller.
838  */
839 static int
840 xfs_alloc_cur_check(
841 	struct xfs_alloc_arg	*args,
842 	struct xfs_alloc_cur	*acur,
843 	struct xfs_btree_cur	*cur,
844 	int			*new)
845 {
846 	int			error, i;
847 	xfs_agblock_t		bno, bnoa, bnew;
848 	xfs_extlen_t		len, lena, diff = -1;
849 	bool			busy;
850 	unsigned		busy_gen = 0;
851 	bool			deactivate = false;
852 	bool			isbnobt = cur->bc_btnum == XFS_BTNUM_BNO;
853 
854 	*new = 0;
855 
856 	error = xfs_alloc_get_rec(cur, &bno, &len, &i);
857 	if (error)
858 		return error;
859 	if (XFS_IS_CORRUPT(args->mp, i != 1))
860 		return -EFSCORRUPTED;
861 
862 	/*
863 	 * Check minlen and deactivate a cntbt cursor if out of acceptable size
864 	 * range (i.e., walking backwards looking for a minlen extent).
865 	 */
866 	if (len < args->minlen) {
867 		deactivate = !isbnobt;
868 		goto out;
869 	}
870 
871 	busy = xfs_alloc_compute_aligned(args, bno, len, &bnoa, &lena,
872 					 &busy_gen);
873 	acur->busy |= busy;
874 	if (busy)
875 		acur->busy_gen = busy_gen;
876 	/* deactivate a bnobt cursor outside of locality range */
877 	if (bnoa < args->min_agbno || bnoa > args->max_agbno) {
878 		deactivate = isbnobt;
879 		goto out;
880 	}
881 	if (lena < args->minlen)
882 		goto out;
883 
884 	args->len = XFS_EXTLEN_MIN(lena, args->maxlen);
885 	xfs_alloc_fix_len(args);
886 	ASSERT(args->len >= args->minlen);
887 	if (args->len < acur->len)
888 		goto out;
889 
890 	/*
891 	 * We have an aligned record that satisfies minlen and beats or matches
892 	 * the candidate extent size. Compare locality for near allocation mode.
893 	 */
894 	ASSERT(args->type == XFS_ALLOCTYPE_NEAR_BNO);
895 	diff = xfs_alloc_compute_diff(args->agbno, args->len,
896 				      args->alignment, args->datatype,
897 				      bnoa, lena, &bnew);
898 	if (bnew == NULLAGBLOCK)
899 		goto out;
900 
901 	/*
902 	 * Deactivate a bnobt cursor with worse locality than the current best.
903 	 */
904 	if (diff > acur->diff) {
905 		deactivate = isbnobt;
906 		goto out;
907 	}
908 
909 	ASSERT(args->len > acur->len ||
910 	       (args->len == acur->len && diff <= acur->diff));
911 	acur->rec_bno = bno;
912 	acur->rec_len = len;
913 	acur->bno = bnew;
914 	acur->len = args->len;
915 	acur->diff = diff;
916 	*new = 1;
917 
918 	/*
919 	 * We're done if we found a perfect allocation. This only deactivates
920 	 * the current cursor, but this is just an optimization to terminate a
921 	 * cntbt search that otherwise runs to the edge of the tree.
922 	 */
923 	if (acur->diff == 0 && acur->len == args->maxlen)
924 		deactivate = true;
925 out:
926 	if (deactivate)
927 		cur->bc_ag.abt.active = false;
928 	trace_xfs_alloc_cur_check(args->mp, cur->bc_btnum, bno, len, diff,
929 				  *new);
930 	return 0;
931 }
932 
933 /*
934  * Complete an allocation of a candidate extent. Remove the extent from both
935  * trees and update the args structure.
936  */
937 STATIC int
938 xfs_alloc_cur_finish(
939 	struct xfs_alloc_arg	*args,
940 	struct xfs_alloc_cur	*acur)
941 {
942 	struct xfs_agf __maybe_unused *agf = args->agbp->b_addr;
943 	int			error;
944 
945 	ASSERT(acur->cnt && acur->bnolt);
946 	ASSERT(acur->bno >= acur->rec_bno);
947 	ASSERT(acur->bno + acur->len <= acur->rec_bno + acur->rec_len);
948 	ASSERT(acur->rec_bno + acur->rec_len <= be32_to_cpu(agf->agf_length));
949 
950 	error = xfs_alloc_fixup_trees(acur->cnt, acur->bnolt, acur->rec_bno,
951 				      acur->rec_len, acur->bno, acur->len, 0);
952 	if (error)
953 		return error;
954 
955 	args->agbno = acur->bno;
956 	args->len = acur->len;
957 	args->wasfromfl = 0;
958 
959 	trace_xfs_alloc_cur(args);
960 	return 0;
961 }
962 
963 /*
964  * Locality allocation lookup algorithm. This expects a cntbt cursor and uses
965  * bno optimized lookup to search for extents with ideal size and locality.
966  */
967 STATIC int
968 xfs_alloc_cntbt_iter(
969 	struct xfs_alloc_arg		*args,
970 	struct xfs_alloc_cur		*acur)
971 {
972 	struct xfs_btree_cur	*cur = acur->cnt;
973 	xfs_agblock_t		bno;
974 	xfs_extlen_t		len, cur_len;
975 	int			error;
976 	int			i;
977 
978 	if (!xfs_alloc_cur_active(cur))
979 		return 0;
980 
981 	/* locality optimized lookup */
982 	cur_len = acur->cur_len;
983 	error = xfs_alloc_lookup_ge(cur, args->agbno, cur_len, &i);
984 	if (error)
985 		return error;
986 	if (i == 0)
987 		return 0;
988 	error = xfs_alloc_get_rec(cur, &bno, &len, &i);
989 	if (error)
990 		return error;
991 
992 	/* check the current record and update search length from it */
993 	error = xfs_alloc_cur_check(args, acur, cur, &i);
994 	if (error)
995 		return error;
996 	ASSERT(len >= acur->cur_len);
997 	acur->cur_len = len;
998 
999 	/*
1000 	 * We looked up the first record >= [agbno, len] above. The agbno is a
1001 	 * secondary key and so the current record may lie just before or after
1002 	 * agbno. If it is past agbno, check the previous record too so long as
1003 	 * the length matches as it may be closer. Don't check a smaller record
1004 	 * because that could deactivate our cursor.
1005 	 */
1006 	if (bno > args->agbno) {
1007 		error = xfs_btree_decrement(cur, 0, &i);
1008 		if (!error && i) {
1009 			error = xfs_alloc_get_rec(cur, &bno, &len, &i);
1010 			if (!error && i && len == acur->cur_len)
1011 				error = xfs_alloc_cur_check(args, acur, cur,
1012 							    &i);
1013 		}
1014 		if (error)
1015 			return error;
1016 	}
1017 
1018 	/*
1019 	 * Increment the search key until we find at least one allocation
1020 	 * candidate or if the extent we found was larger. Otherwise, double the
1021 	 * search key to optimize the search. Efficiency is more important here
1022 	 * than absolute best locality.
1023 	 */
1024 	cur_len <<= 1;
1025 	if (!acur->len || acur->cur_len >= cur_len)
1026 		acur->cur_len++;
1027 	else
1028 		acur->cur_len = cur_len;
1029 
1030 	return error;
1031 }
1032 
1033 /*
1034  * Deal with the case where only small freespaces remain. Either return the
1035  * contents of the last freespace record, or allocate space from the freelist if
1036  * there is nothing in the tree.
1037  */
1038 STATIC int			/* error */
1039 xfs_alloc_ag_vextent_small(
1040 	struct xfs_alloc_arg	*args,	/* allocation argument structure */
1041 	struct xfs_btree_cur	*ccur,	/* optional by-size cursor */
1042 	xfs_agblock_t		*fbnop,	/* result block number */
1043 	xfs_extlen_t		*flenp,	/* result length */
1044 	int			*stat)	/* status: 0-freelist, 1-normal/none */
1045 {
1046 	struct xfs_agf		*agf = args->agbp->b_addr;
1047 	int			error = 0;
1048 	xfs_agblock_t		fbno = NULLAGBLOCK;
1049 	xfs_extlen_t		flen = 0;
1050 	int			i = 0;
1051 
1052 	/*
1053 	 * If a cntbt cursor is provided, try to allocate the largest record in
1054 	 * the tree. Try the AGFL if the cntbt is empty, otherwise fail the
1055 	 * allocation. Make sure to respect minleft even when pulling from the
1056 	 * freelist.
1057 	 */
1058 	if (ccur)
1059 		error = xfs_btree_decrement(ccur, 0, &i);
1060 	if (error)
1061 		goto error;
1062 	if (i) {
1063 		error = xfs_alloc_get_rec(ccur, &fbno, &flen, &i);
1064 		if (error)
1065 			goto error;
1066 		if (XFS_IS_CORRUPT(args->mp, i != 1)) {
1067 			error = -EFSCORRUPTED;
1068 			goto error;
1069 		}
1070 		goto out;
1071 	}
1072 
1073 	if (args->minlen != 1 || args->alignment != 1 ||
1074 	    args->resv == XFS_AG_RESV_AGFL ||
1075 	    be32_to_cpu(agf->agf_flcount) <= args->minleft)
1076 		goto out;
1077 
1078 	error = xfs_alloc_get_freelist(args->pag, args->tp, args->agbp,
1079 			&fbno, 0);
1080 	if (error)
1081 		goto error;
1082 	if (fbno == NULLAGBLOCK)
1083 		goto out;
1084 
1085 	xfs_extent_busy_reuse(args->mp, args->pag, fbno, 1,
1086 			      (args->datatype & XFS_ALLOC_NOBUSY));
1087 
1088 	if (args->datatype & XFS_ALLOC_USERDATA) {
1089 		struct xfs_buf	*bp;
1090 
1091 		error = xfs_trans_get_buf(args->tp, args->mp->m_ddev_targp,
1092 				XFS_AGB_TO_DADDR(args->mp, args->agno, fbno),
1093 				args->mp->m_bsize, 0, &bp);
1094 		if (error)
1095 			goto error;
1096 		xfs_trans_binval(args->tp, bp);
1097 	}
1098 	*fbnop = args->agbno = fbno;
1099 	*flenp = args->len = 1;
1100 	if (XFS_IS_CORRUPT(args->mp, fbno >= be32_to_cpu(agf->agf_length))) {
1101 		error = -EFSCORRUPTED;
1102 		goto error;
1103 	}
1104 	args->wasfromfl = 1;
1105 	trace_xfs_alloc_small_freelist(args);
1106 
1107 	/*
1108 	 * If we're feeding an AGFL block to something that doesn't live in the
1109 	 * free space, we need to clear out the OWN_AG rmap.
1110 	 */
1111 	error = xfs_rmap_free(args->tp, args->agbp, args->pag, fbno, 1,
1112 			      &XFS_RMAP_OINFO_AG);
1113 	if (error)
1114 		goto error;
1115 
1116 	*stat = 0;
1117 	return 0;
1118 
1119 out:
1120 	/*
1121 	 * Can't do the allocation, give up.
1122 	 */
1123 	if (flen < args->minlen) {
1124 		args->agbno = NULLAGBLOCK;
1125 		trace_xfs_alloc_small_notenough(args);
1126 		flen = 0;
1127 	}
1128 	*fbnop = fbno;
1129 	*flenp = flen;
1130 	*stat = 1;
1131 	trace_xfs_alloc_small_done(args);
1132 	return 0;
1133 
1134 error:
1135 	trace_xfs_alloc_small_error(args);
1136 	return error;
1137 }
1138 
1139 /*
1140  * Allocate a variable extent in the allocation group agno.
1141  * Type and bno are used to determine where in the allocation group the
1142  * extent will start.
1143  * Extent's length (returned in *len) will be between minlen and maxlen,
1144  * and of the form k * prod + mod unless there's nothing that large.
1145  * Return the starting a.g. block, or NULLAGBLOCK if we can't do it.
1146  */
1147 STATIC int			/* error */
1148 xfs_alloc_ag_vextent(
1149 	xfs_alloc_arg_t	*args)	/* argument structure for allocation */
1150 {
1151 	int		error=0;
1152 
1153 	ASSERT(args->minlen > 0);
1154 	ASSERT(args->maxlen > 0);
1155 	ASSERT(args->minlen <= args->maxlen);
1156 	ASSERT(args->mod < args->prod);
1157 	ASSERT(args->alignment > 0);
1158 
1159 	/*
1160 	 * Branch to correct routine based on the type.
1161 	 */
1162 	args->wasfromfl = 0;
1163 	switch (args->type) {
1164 	case XFS_ALLOCTYPE_THIS_AG:
1165 		error = xfs_alloc_ag_vextent_size(args);
1166 		break;
1167 	case XFS_ALLOCTYPE_NEAR_BNO:
1168 		error = xfs_alloc_ag_vextent_near(args);
1169 		break;
1170 	case XFS_ALLOCTYPE_THIS_BNO:
1171 		error = xfs_alloc_ag_vextent_exact(args);
1172 		break;
1173 	default:
1174 		ASSERT(0);
1175 		/* NOTREACHED */
1176 	}
1177 
1178 	if (error || args->agbno == NULLAGBLOCK)
1179 		return error;
1180 
1181 	ASSERT(args->len >= args->minlen);
1182 	ASSERT(args->len <= args->maxlen);
1183 	ASSERT(!args->wasfromfl || args->resv != XFS_AG_RESV_AGFL);
1184 	ASSERT(args->agbno % args->alignment == 0);
1185 
1186 	/* if not file data, insert new block into the reverse map btree */
1187 	if (!xfs_rmap_should_skip_owner_update(&args->oinfo)) {
1188 		error = xfs_rmap_alloc(args->tp, args->agbp, args->pag,
1189 				       args->agbno, args->len, &args->oinfo);
1190 		if (error)
1191 			return error;
1192 	}
1193 
1194 	if (!args->wasfromfl) {
1195 		error = xfs_alloc_update_counters(args->tp, args->agbp,
1196 						  -((long)(args->len)));
1197 		if (error)
1198 			return error;
1199 
1200 		ASSERT(!xfs_extent_busy_search(args->mp, args->pag,
1201 					      args->agbno, args->len));
1202 	}
1203 
1204 	xfs_ag_resv_alloc_extent(args->pag, args->resv, args);
1205 
1206 	XFS_STATS_INC(args->mp, xs_allocx);
1207 	XFS_STATS_ADD(args->mp, xs_allocb, args->len);
1208 	return error;
1209 }
1210 
1211 /*
1212  * Allocate a variable extent at exactly agno/bno.
1213  * Extent's length (returned in *len) will be between minlen and maxlen,
1214  * and of the form k * prod + mod unless there's nothing that large.
1215  * Return the starting a.g. block (bno), or NULLAGBLOCK if we can't do it.
1216  */
1217 STATIC int			/* error */
1218 xfs_alloc_ag_vextent_exact(
1219 	xfs_alloc_arg_t	*args)	/* allocation argument structure */
1220 {
1221 	struct xfs_agf __maybe_unused *agf = args->agbp->b_addr;
1222 	struct xfs_btree_cur *bno_cur;/* by block-number btree cursor */
1223 	struct xfs_btree_cur *cnt_cur;/* by count btree cursor */
1224 	int		error;
1225 	xfs_agblock_t	fbno;	/* start block of found extent */
1226 	xfs_extlen_t	flen;	/* length of found extent */
1227 	xfs_agblock_t	tbno;	/* start block of busy extent */
1228 	xfs_extlen_t	tlen;	/* length of busy extent */
1229 	xfs_agblock_t	tend;	/* end block of busy extent */
1230 	int		i;	/* success/failure of operation */
1231 	unsigned	busy_gen;
1232 
1233 	ASSERT(args->alignment == 1);
1234 
1235 	/*
1236 	 * Allocate/initialize a cursor for the by-number freespace btree.
1237 	 */
1238 	bno_cur = xfs_allocbt_init_cursor(args->mp, args->tp, args->agbp,
1239 					  args->pag, XFS_BTNUM_BNO);
1240 
1241 	/*
1242 	 * Lookup bno and minlen in the btree (minlen is irrelevant, really).
1243 	 * Look for the closest free block <= bno, it must contain bno
1244 	 * if any free block does.
1245 	 */
1246 	error = xfs_alloc_lookup_le(bno_cur, args->agbno, args->minlen, &i);
1247 	if (error)
1248 		goto error0;
1249 	if (!i)
1250 		goto not_found;
1251 
1252 	/*
1253 	 * Grab the freespace record.
1254 	 */
1255 	error = xfs_alloc_get_rec(bno_cur, &fbno, &flen, &i);
1256 	if (error)
1257 		goto error0;
1258 	if (XFS_IS_CORRUPT(args->mp, i != 1)) {
1259 		error = -EFSCORRUPTED;
1260 		goto error0;
1261 	}
1262 	ASSERT(fbno <= args->agbno);
1263 
1264 	/*
1265 	 * Check for overlapping busy extents.
1266 	 */
1267 	tbno = fbno;
1268 	tlen = flen;
1269 	xfs_extent_busy_trim(args, &tbno, &tlen, &busy_gen);
1270 
1271 	/*
1272 	 * Give up if the start of the extent is busy, or the freespace isn't
1273 	 * long enough for the minimum request.
1274 	 */
1275 	if (tbno > args->agbno)
1276 		goto not_found;
1277 	if (tlen < args->minlen)
1278 		goto not_found;
1279 	tend = tbno + tlen;
1280 	if (tend < args->agbno + args->minlen)
1281 		goto not_found;
1282 
1283 	/*
1284 	 * End of extent will be smaller of the freespace end and the
1285 	 * maximal requested end.
1286 	 *
1287 	 * Fix the length according to mod and prod if given.
1288 	 */
1289 	args->len = XFS_AGBLOCK_MIN(tend, args->agbno + args->maxlen)
1290 						- args->agbno;
1291 	xfs_alloc_fix_len(args);
1292 	ASSERT(args->agbno + args->len <= tend);
1293 
1294 	/*
1295 	 * We are allocating agbno for args->len
1296 	 * Allocate/initialize a cursor for the by-size btree.
1297 	 */
1298 	cnt_cur = xfs_allocbt_init_cursor(args->mp, args->tp, args->agbp,
1299 					args->pag, XFS_BTNUM_CNT);
1300 	ASSERT(args->agbno + args->len <= be32_to_cpu(agf->agf_length));
1301 	error = xfs_alloc_fixup_trees(cnt_cur, bno_cur, fbno, flen, args->agbno,
1302 				      args->len, XFSA_FIXUP_BNO_OK);
1303 	if (error) {
1304 		xfs_btree_del_cursor(cnt_cur, XFS_BTREE_ERROR);
1305 		goto error0;
1306 	}
1307 
1308 	xfs_btree_del_cursor(bno_cur, XFS_BTREE_NOERROR);
1309 	xfs_btree_del_cursor(cnt_cur, XFS_BTREE_NOERROR);
1310 
1311 	args->wasfromfl = 0;
1312 	trace_xfs_alloc_exact_done(args);
1313 	return 0;
1314 
1315 not_found:
1316 	/* Didn't find it, return null. */
1317 	xfs_btree_del_cursor(bno_cur, XFS_BTREE_NOERROR);
1318 	args->agbno = NULLAGBLOCK;
1319 	trace_xfs_alloc_exact_notfound(args);
1320 	return 0;
1321 
1322 error0:
1323 	xfs_btree_del_cursor(bno_cur, XFS_BTREE_ERROR);
1324 	trace_xfs_alloc_exact_error(args);
1325 	return error;
1326 }
1327 
1328 /*
1329  * Search a given number of btree records in a given direction. Check each
1330  * record against the good extent we've already found.
1331  */
1332 STATIC int
1333 xfs_alloc_walk_iter(
1334 	struct xfs_alloc_arg	*args,
1335 	struct xfs_alloc_cur	*acur,
1336 	struct xfs_btree_cur	*cur,
1337 	bool			increment,
1338 	bool			find_one, /* quit on first candidate */
1339 	int			count,    /* rec count (-1 for infinite) */
1340 	int			*stat)
1341 {
1342 	int			error;
1343 	int			i;
1344 
1345 	*stat = 0;
1346 
1347 	/*
1348 	 * Search so long as the cursor is active or we find a better extent.
1349 	 * The cursor is deactivated if it extends beyond the range of the
1350 	 * current allocation candidate.
1351 	 */
1352 	while (xfs_alloc_cur_active(cur) && count) {
1353 		error = xfs_alloc_cur_check(args, acur, cur, &i);
1354 		if (error)
1355 			return error;
1356 		if (i == 1) {
1357 			*stat = 1;
1358 			if (find_one)
1359 				break;
1360 		}
1361 		if (!xfs_alloc_cur_active(cur))
1362 			break;
1363 
1364 		if (increment)
1365 			error = xfs_btree_increment(cur, 0, &i);
1366 		else
1367 			error = xfs_btree_decrement(cur, 0, &i);
1368 		if (error)
1369 			return error;
1370 		if (i == 0)
1371 			cur->bc_ag.abt.active = false;
1372 
1373 		if (count > 0)
1374 			count--;
1375 	}
1376 
1377 	return 0;
1378 }
1379 
1380 /*
1381  * Search the by-bno and by-size btrees in parallel in search of an extent with
1382  * ideal locality based on the NEAR mode ->agbno locality hint.
1383  */
1384 STATIC int
1385 xfs_alloc_ag_vextent_locality(
1386 	struct xfs_alloc_arg	*args,
1387 	struct xfs_alloc_cur	*acur,
1388 	int			*stat)
1389 {
1390 	struct xfs_btree_cur	*fbcur = NULL;
1391 	int			error;
1392 	int			i;
1393 	bool			fbinc;
1394 
1395 	ASSERT(acur->len == 0);
1396 	ASSERT(args->type == XFS_ALLOCTYPE_NEAR_BNO);
1397 
1398 	*stat = 0;
1399 
1400 	error = xfs_alloc_lookup_ge(acur->cnt, args->agbno, acur->cur_len, &i);
1401 	if (error)
1402 		return error;
1403 	error = xfs_alloc_lookup_le(acur->bnolt, args->agbno, 0, &i);
1404 	if (error)
1405 		return error;
1406 	error = xfs_alloc_lookup_ge(acur->bnogt, args->agbno, 0, &i);
1407 	if (error)
1408 		return error;
1409 
1410 	/*
1411 	 * Search the bnobt and cntbt in parallel. Search the bnobt left and
1412 	 * right and lookup the closest extent to the locality hint for each
1413 	 * extent size key in the cntbt. The entire search terminates
1414 	 * immediately on a bnobt hit because that means we've found best case
1415 	 * locality. Otherwise the search continues until the cntbt cursor runs
1416 	 * off the end of the tree. If no allocation candidate is found at this
1417 	 * point, give up on locality, walk backwards from the end of the cntbt
1418 	 * and take the first available extent.
1419 	 *
1420 	 * The parallel tree searches balance each other out to provide fairly
1421 	 * consistent performance for various situations. The bnobt search can
1422 	 * have pathological behavior in the worst case scenario of larger
1423 	 * allocation requests and fragmented free space. On the other hand, the
1424 	 * bnobt is able to satisfy most smaller allocation requests much more
1425 	 * quickly than the cntbt. The cntbt search can sift through fragmented
1426 	 * free space and sets of free extents for larger allocation requests
1427 	 * more quickly than the bnobt. Since the locality hint is just a hint
1428 	 * and we don't want to scan the entire bnobt for perfect locality, the
1429 	 * cntbt search essentially bounds the bnobt search such that we can
1430 	 * find good enough locality at reasonable performance in most cases.
1431 	 */
1432 	while (xfs_alloc_cur_active(acur->bnolt) ||
1433 	       xfs_alloc_cur_active(acur->bnogt) ||
1434 	       xfs_alloc_cur_active(acur->cnt)) {
1435 
1436 		trace_xfs_alloc_cur_lookup(args);
1437 
1438 		/*
1439 		 * Search the bnobt left and right. In the case of a hit, finish
1440 		 * the search in the opposite direction and we're done.
1441 		 */
1442 		error = xfs_alloc_walk_iter(args, acur, acur->bnolt, false,
1443 					    true, 1, &i);
1444 		if (error)
1445 			return error;
1446 		if (i == 1) {
1447 			trace_xfs_alloc_cur_left(args);
1448 			fbcur = acur->bnogt;
1449 			fbinc = true;
1450 			break;
1451 		}
1452 		error = xfs_alloc_walk_iter(args, acur, acur->bnogt, true, true,
1453 					    1, &i);
1454 		if (error)
1455 			return error;
1456 		if (i == 1) {
1457 			trace_xfs_alloc_cur_right(args);
1458 			fbcur = acur->bnolt;
1459 			fbinc = false;
1460 			break;
1461 		}
1462 
1463 		/*
1464 		 * Check the extent with best locality based on the current
1465 		 * extent size search key and keep track of the best candidate.
1466 		 */
1467 		error = xfs_alloc_cntbt_iter(args, acur);
1468 		if (error)
1469 			return error;
1470 		if (!xfs_alloc_cur_active(acur->cnt)) {
1471 			trace_xfs_alloc_cur_lookup_done(args);
1472 			break;
1473 		}
1474 	}
1475 
1476 	/*
1477 	 * If we failed to find anything due to busy extents, return empty
1478 	 * handed so the caller can flush and retry. If no busy extents were
1479 	 * found, walk backwards from the end of the cntbt as a last resort.
1480 	 */
1481 	if (!xfs_alloc_cur_active(acur->cnt) && !acur->len && !acur->busy) {
1482 		error = xfs_btree_decrement(acur->cnt, 0, &i);
1483 		if (error)
1484 			return error;
1485 		if (i) {
1486 			acur->cnt->bc_ag.abt.active = true;
1487 			fbcur = acur->cnt;
1488 			fbinc = false;
1489 		}
1490 	}
1491 
1492 	/*
1493 	 * Search in the opposite direction for a better entry in the case of
1494 	 * a bnobt hit or walk backwards from the end of the cntbt.
1495 	 */
1496 	if (fbcur) {
1497 		error = xfs_alloc_walk_iter(args, acur, fbcur, fbinc, true, -1,
1498 					    &i);
1499 		if (error)
1500 			return error;
1501 	}
1502 
1503 	if (acur->len)
1504 		*stat = 1;
1505 
1506 	return 0;
1507 }
1508 
1509 /* Check the last block of the cnt btree for allocations. */
1510 static int
1511 xfs_alloc_ag_vextent_lastblock(
1512 	struct xfs_alloc_arg	*args,
1513 	struct xfs_alloc_cur	*acur,
1514 	xfs_agblock_t		*bno,
1515 	xfs_extlen_t		*len,
1516 	bool			*allocated)
1517 {
1518 	int			error;
1519 	int			i;
1520 
1521 #ifdef DEBUG
1522 	/* Randomly don't execute the first algorithm. */
1523 	if (prandom_u32() & 1)
1524 		return 0;
1525 #endif
1526 
1527 	/*
1528 	 * Start from the entry that lookup found, sequence through all larger
1529 	 * free blocks.  If we're actually pointing at a record smaller than
1530 	 * maxlen, go to the start of this block, and skip all those smaller
1531 	 * than minlen.
1532 	 */
1533 	if (*len || args->alignment > 1) {
1534 		acur->cnt->bc_levels[0].ptr = 1;
1535 		do {
1536 			error = xfs_alloc_get_rec(acur->cnt, bno, len, &i);
1537 			if (error)
1538 				return error;
1539 			if (XFS_IS_CORRUPT(args->mp, i != 1))
1540 				return -EFSCORRUPTED;
1541 			if (*len >= args->minlen)
1542 				break;
1543 			error = xfs_btree_increment(acur->cnt, 0, &i);
1544 			if (error)
1545 				return error;
1546 		} while (i);
1547 		ASSERT(*len >= args->minlen);
1548 		if (!i)
1549 			return 0;
1550 	}
1551 
1552 	error = xfs_alloc_walk_iter(args, acur, acur->cnt, true, false, -1, &i);
1553 	if (error)
1554 		return error;
1555 
1556 	/*
1557 	 * It didn't work.  We COULD be in a case where there's a good record
1558 	 * somewhere, so try again.
1559 	 */
1560 	if (acur->len == 0)
1561 		return 0;
1562 
1563 	trace_xfs_alloc_near_first(args);
1564 	*allocated = true;
1565 	return 0;
1566 }
1567 
1568 /*
1569  * Allocate a variable extent near bno in the allocation group agno.
1570  * Extent's length (returned in len) will be between minlen and maxlen,
1571  * and of the form k * prod + mod unless there's nothing that large.
1572  * Return the starting a.g. block, or NULLAGBLOCK if we can't do it.
1573  */
1574 STATIC int
1575 xfs_alloc_ag_vextent_near(
1576 	struct xfs_alloc_arg	*args)
1577 {
1578 	struct xfs_alloc_cur	acur = {};
1579 	int			error;		/* error code */
1580 	int			i;		/* result code, temporary */
1581 	xfs_agblock_t		bno;
1582 	xfs_extlen_t		len;
1583 
1584 	/* handle uninitialized agbno range so caller doesn't have to */
1585 	if (!args->min_agbno && !args->max_agbno)
1586 		args->max_agbno = args->mp->m_sb.sb_agblocks - 1;
1587 	ASSERT(args->min_agbno <= args->max_agbno);
1588 
1589 	/* clamp agbno to the range if it's outside */
1590 	if (args->agbno < args->min_agbno)
1591 		args->agbno = args->min_agbno;
1592 	if (args->agbno > args->max_agbno)
1593 		args->agbno = args->max_agbno;
1594 
1595 restart:
1596 	len = 0;
1597 
1598 	/*
1599 	 * Set up cursors and see if there are any free extents as big as
1600 	 * maxlen. If not, pick the last entry in the tree unless the tree is
1601 	 * empty.
1602 	 */
1603 	error = xfs_alloc_cur_setup(args, &acur);
1604 	if (error == -ENOSPC) {
1605 		error = xfs_alloc_ag_vextent_small(args, acur.cnt, &bno,
1606 				&len, &i);
1607 		if (error)
1608 			goto out;
1609 		if (i == 0 || len == 0) {
1610 			trace_xfs_alloc_near_noentry(args);
1611 			goto out;
1612 		}
1613 		ASSERT(i == 1);
1614 	} else if (error) {
1615 		goto out;
1616 	}
1617 
1618 	/*
1619 	 * First algorithm.
1620 	 * If the requested extent is large wrt the freespaces available
1621 	 * in this a.g., then the cursor will be pointing to a btree entry
1622 	 * near the right edge of the tree.  If it's in the last btree leaf
1623 	 * block, then we just examine all the entries in that block
1624 	 * that are big enough, and pick the best one.
1625 	 */
1626 	if (xfs_btree_islastblock(acur.cnt, 0)) {
1627 		bool		allocated = false;
1628 
1629 		error = xfs_alloc_ag_vextent_lastblock(args, &acur, &bno, &len,
1630 				&allocated);
1631 		if (error)
1632 			goto out;
1633 		if (allocated)
1634 			goto alloc_finish;
1635 	}
1636 
1637 	/*
1638 	 * Second algorithm. Combined cntbt and bnobt search to find ideal
1639 	 * locality.
1640 	 */
1641 	error = xfs_alloc_ag_vextent_locality(args, &acur, &i);
1642 	if (error)
1643 		goto out;
1644 
1645 	/*
1646 	 * If we couldn't get anything, give up.
1647 	 */
1648 	if (!acur.len) {
1649 		if (acur.busy) {
1650 			trace_xfs_alloc_near_busy(args);
1651 			xfs_extent_busy_flush(args->mp, args->pag,
1652 					      acur.busy_gen);
1653 			goto restart;
1654 		}
1655 		trace_xfs_alloc_size_neither(args);
1656 		args->agbno = NULLAGBLOCK;
1657 		goto out;
1658 	}
1659 
1660 alloc_finish:
1661 	/* fix up btrees on a successful allocation */
1662 	error = xfs_alloc_cur_finish(args, &acur);
1663 
1664 out:
1665 	xfs_alloc_cur_close(&acur, error);
1666 	return error;
1667 }
1668 
1669 /*
1670  * Allocate a variable extent anywhere in the allocation group agno.
1671  * Extent's length (returned in len) will be between minlen and maxlen,
1672  * and of the form k * prod + mod unless there's nothing that large.
1673  * Return the starting a.g. block, or NULLAGBLOCK if we can't do it.
1674  */
1675 STATIC int				/* error */
1676 xfs_alloc_ag_vextent_size(
1677 	xfs_alloc_arg_t	*args)		/* allocation argument structure */
1678 {
1679 	struct xfs_agf	*agf = args->agbp->b_addr;
1680 	struct xfs_btree_cur *bno_cur;	/* cursor for bno btree */
1681 	struct xfs_btree_cur *cnt_cur;	/* cursor for cnt btree */
1682 	int		error;		/* error result */
1683 	xfs_agblock_t	fbno;		/* start of found freespace */
1684 	xfs_extlen_t	flen;		/* length of found freespace */
1685 	int		i;		/* temp status variable */
1686 	xfs_agblock_t	rbno;		/* returned block number */
1687 	xfs_extlen_t	rlen;		/* length of returned extent */
1688 	bool		busy;
1689 	unsigned	busy_gen;
1690 
1691 restart:
1692 	/*
1693 	 * Allocate and initialize a cursor for the by-size btree.
1694 	 */
1695 	cnt_cur = xfs_allocbt_init_cursor(args->mp, args->tp, args->agbp,
1696 					args->pag, XFS_BTNUM_CNT);
1697 	bno_cur = NULL;
1698 
1699 	/*
1700 	 * Look for an entry >= maxlen+alignment-1 blocks.
1701 	 */
1702 	if ((error = xfs_alloc_lookup_ge(cnt_cur, 0,
1703 			args->maxlen + args->alignment - 1, &i)))
1704 		goto error0;
1705 
1706 	/*
1707 	 * If none then we have to settle for a smaller extent. In the case that
1708 	 * there are no large extents, this will return the last entry in the
1709 	 * tree unless the tree is empty. In the case that there are only busy
1710 	 * large extents, this will return the largest small extent unless there
1711 	 * are no smaller extents available.
1712 	 */
1713 	if (!i) {
1714 		error = xfs_alloc_ag_vextent_small(args, cnt_cur,
1715 						   &fbno, &flen, &i);
1716 		if (error)
1717 			goto error0;
1718 		if (i == 0 || flen == 0) {
1719 			xfs_btree_del_cursor(cnt_cur, XFS_BTREE_NOERROR);
1720 			trace_xfs_alloc_size_noentry(args);
1721 			return 0;
1722 		}
1723 		ASSERT(i == 1);
1724 		busy = xfs_alloc_compute_aligned(args, fbno, flen, &rbno,
1725 				&rlen, &busy_gen);
1726 	} else {
1727 		/*
1728 		 * Search for a non-busy extent that is large enough.
1729 		 */
1730 		for (;;) {
1731 			error = xfs_alloc_get_rec(cnt_cur, &fbno, &flen, &i);
1732 			if (error)
1733 				goto error0;
1734 			if (XFS_IS_CORRUPT(args->mp, i != 1)) {
1735 				error = -EFSCORRUPTED;
1736 				goto error0;
1737 			}
1738 
1739 			busy = xfs_alloc_compute_aligned(args, fbno, flen,
1740 					&rbno, &rlen, &busy_gen);
1741 
1742 			if (rlen >= args->maxlen)
1743 				break;
1744 
1745 			error = xfs_btree_increment(cnt_cur, 0, &i);
1746 			if (error)
1747 				goto error0;
1748 			if (i == 0) {
1749 				/*
1750 				 * Our only valid extents must have been busy.
1751 				 * Make it unbusy by forcing the log out and
1752 				 * retrying.
1753 				 */
1754 				xfs_btree_del_cursor(cnt_cur,
1755 						     XFS_BTREE_NOERROR);
1756 				trace_xfs_alloc_size_busy(args);
1757 				xfs_extent_busy_flush(args->mp,
1758 							args->pag, busy_gen);
1759 				goto restart;
1760 			}
1761 		}
1762 	}
1763 
1764 	/*
1765 	 * In the first case above, we got the last entry in the
1766 	 * by-size btree.  Now we check to see if the space hits maxlen
1767 	 * once aligned; if not, we search left for something better.
1768 	 * This can't happen in the second case above.
1769 	 */
1770 	rlen = XFS_EXTLEN_MIN(args->maxlen, rlen);
1771 	if (XFS_IS_CORRUPT(args->mp,
1772 			   rlen != 0 &&
1773 			   (rlen > flen ||
1774 			    rbno + rlen > fbno + flen))) {
1775 		error = -EFSCORRUPTED;
1776 		goto error0;
1777 	}
1778 	if (rlen < args->maxlen) {
1779 		xfs_agblock_t	bestfbno;
1780 		xfs_extlen_t	bestflen;
1781 		xfs_agblock_t	bestrbno;
1782 		xfs_extlen_t	bestrlen;
1783 
1784 		bestrlen = rlen;
1785 		bestrbno = rbno;
1786 		bestflen = flen;
1787 		bestfbno = fbno;
1788 		for (;;) {
1789 			if ((error = xfs_btree_decrement(cnt_cur, 0, &i)))
1790 				goto error0;
1791 			if (i == 0)
1792 				break;
1793 			if ((error = xfs_alloc_get_rec(cnt_cur, &fbno, &flen,
1794 					&i)))
1795 				goto error0;
1796 			if (XFS_IS_CORRUPT(args->mp, i != 1)) {
1797 				error = -EFSCORRUPTED;
1798 				goto error0;
1799 			}
1800 			if (flen < bestrlen)
1801 				break;
1802 			busy = xfs_alloc_compute_aligned(args, fbno, flen,
1803 					&rbno, &rlen, &busy_gen);
1804 			rlen = XFS_EXTLEN_MIN(args->maxlen, rlen);
1805 			if (XFS_IS_CORRUPT(args->mp,
1806 					   rlen != 0 &&
1807 					   (rlen > flen ||
1808 					    rbno + rlen > fbno + flen))) {
1809 				error = -EFSCORRUPTED;
1810 				goto error0;
1811 			}
1812 			if (rlen > bestrlen) {
1813 				bestrlen = rlen;
1814 				bestrbno = rbno;
1815 				bestflen = flen;
1816 				bestfbno = fbno;
1817 				if (rlen == args->maxlen)
1818 					break;
1819 			}
1820 		}
1821 		if ((error = xfs_alloc_lookup_eq(cnt_cur, bestfbno, bestflen,
1822 				&i)))
1823 			goto error0;
1824 		if (XFS_IS_CORRUPT(args->mp, i != 1)) {
1825 			error = -EFSCORRUPTED;
1826 			goto error0;
1827 		}
1828 		rlen = bestrlen;
1829 		rbno = bestrbno;
1830 		flen = bestflen;
1831 		fbno = bestfbno;
1832 	}
1833 	args->wasfromfl = 0;
1834 	/*
1835 	 * Fix up the length.
1836 	 */
1837 	args->len = rlen;
1838 	if (rlen < args->minlen) {
1839 		if (busy) {
1840 			xfs_btree_del_cursor(cnt_cur, XFS_BTREE_NOERROR);
1841 			trace_xfs_alloc_size_busy(args);
1842 			xfs_extent_busy_flush(args->mp, args->pag, busy_gen);
1843 			goto restart;
1844 		}
1845 		goto out_nominleft;
1846 	}
1847 	xfs_alloc_fix_len(args);
1848 
1849 	rlen = args->len;
1850 	if (XFS_IS_CORRUPT(args->mp, rlen > flen)) {
1851 		error = -EFSCORRUPTED;
1852 		goto error0;
1853 	}
1854 	/*
1855 	 * Allocate and initialize a cursor for the by-block tree.
1856 	 */
1857 	bno_cur = xfs_allocbt_init_cursor(args->mp, args->tp, args->agbp,
1858 					args->pag, XFS_BTNUM_BNO);
1859 	if ((error = xfs_alloc_fixup_trees(cnt_cur, bno_cur, fbno, flen,
1860 			rbno, rlen, XFSA_FIXUP_CNT_OK)))
1861 		goto error0;
1862 	xfs_btree_del_cursor(cnt_cur, XFS_BTREE_NOERROR);
1863 	xfs_btree_del_cursor(bno_cur, XFS_BTREE_NOERROR);
1864 	cnt_cur = bno_cur = NULL;
1865 	args->len = rlen;
1866 	args->agbno = rbno;
1867 	if (XFS_IS_CORRUPT(args->mp,
1868 			   args->agbno + args->len >
1869 			   be32_to_cpu(agf->agf_length))) {
1870 		error = -EFSCORRUPTED;
1871 		goto error0;
1872 	}
1873 	trace_xfs_alloc_size_done(args);
1874 	return 0;
1875 
1876 error0:
1877 	trace_xfs_alloc_size_error(args);
1878 	if (cnt_cur)
1879 		xfs_btree_del_cursor(cnt_cur, XFS_BTREE_ERROR);
1880 	if (bno_cur)
1881 		xfs_btree_del_cursor(bno_cur, XFS_BTREE_ERROR);
1882 	return error;
1883 
1884 out_nominleft:
1885 	xfs_btree_del_cursor(cnt_cur, XFS_BTREE_NOERROR);
1886 	trace_xfs_alloc_size_nominleft(args);
1887 	args->agbno = NULLAGBLOCK;
1888 	return 0;
1889 }
1890 
1891 /*
1892  * Free the extent starting at agno/bno for length.
1893  */
1894 STATIC int
1895 xfs_free_ag_extent(
1896 	struct xfs_trans		*tp,
1897 	struct xfs_buf			*agbp,
1898 	xfs_agnumber_t			agno,
1899 	xfs_agblock_t			bno,
1900 	xfs_extlen_t			len,
1901 	const struct xfs_owner_info	*oinfo,
1902 	enum xfs_ag_resv_type		type)
1903 {
1904 	struct xfs_mount		*mp;
1905 	struct xfs_btree_cur		*bno_cur;
1906 	struct xfs_btree_cur		*cnt_cur;
1907 	xfs_agblock_t			gtbno; /* start of right neighbor */
1908 	xfs_extlen_t			gtlen; /* length of right neighbor */
1909 	xfs_agblock_t			ltbno; /* start of left neighbor */
1910 	xfs_extlen_t			ltlen; /* length of left neighbor */
1911 	xfs_agblock_t			nbno; /* new starting block of freesp */
1912 	xfs_extlen_t			nlen; /* new length of freespace */
1913 	int				haveleft; /* have a left neighbor */
1914 	int				haveright; /* have a right neighbor */
1915 	int				i;
1916 	int				error;
1917 	struct xfs_perag		*pag = agbp->b_pag;
1918 
1919 	bno_cur = cnt_cur = NULL;
1920 	mp = tp->t_mountp;
1921 
1922 	if (!xfs_rmap_should_skip_owner_update(oinfo)) {
1923 		error = xfs_rmap_free(tp, agbp, pag, bno, len, oinfo);
1924 		if (error)
1925 			goto error0;
1926 	}
1927 
1928 	/*
1929 	 * Allocate and initialize a cursor for the by-block btree.
1930 	 */
1931 	bno_cur = xfs_allocbt_init_cursor(mp, tp, agbp, pag, XFS_BTNUM_BNO);
1932 	/*
1933 	 * Look for a neighboring block on the left (lower block numbers)
1934 	 * that is contiguous with this space.
1935 	 */
1936 	if ((error = xfs_alloc_lookup_le(bno_cur, bno, len, &haveleft)))
1937 		goto error0;
1938 	if (haveleft) {
1939 		/*
1940 		 * There is a block to our left.
1941 		 */
1942 		if ((error = xfs_alloc_get_rec(bno_cur, &ltbno, &ltlen, &i)))
1943 			goto error0;
1944 		if (XFS_IS_CORRUPT(mp, i != 1)) {
1945 			error = -EFSCORRUPTED;
1946 			goto error0;
1947 		}
1948 		/*
1949 		 * It's not contiguous, though.
1950 		 */
1951 		if (ltbno + ltlen < bno)
1952 			haveleft = 0;
1953 		else {
1954 			/*
1955 			 * If this failure happens the request to free this
1956 			 * space was invalid, it's (partly) already free.
1957 			 * Very bad.
1958 			 */
1959 			if (XFS_IS_CORRUPT(mp, ltbno + ltlen > bno)) {
1960 				error = -EFSCORRUPTED;
1961 				goto error0;
1962 			}
1963 		}
1964 	}
1965 	/*
1966 	 * Look for a neighboring block on the right (higher block numbers)
1967 	 * that is contiguous with this space.
1968 	 */
1969 	if ((error = xfs_btree_increment(bno_cur, 0, &haveright)))
1970 		goto error0;
1971 	if (haveright) {
1972 		/*
1973 		 * There is a block to our right.
1974 		 */
1975 		if ((error = xfs_alloc_get_rec(bno_cur, &gtbno, &gtlen, &i)))
1976 			goto error0;
1977 		if (XFS_IS_CORRUPT(mp, i != 1)) {
1978 			error = -EFSCORRUPTED;
1979 			goto error0;
1980 		}
1981 		/*
1982 		 * It's not contiguous, though.
1983 		 */
1984 		if (bno + len < gtbno)
1985 			haveright = 0;
1986 		else {
1987 			/*
1988 			 * If this failure happens the request to free this
1989 			 * space was invalid, it's (partly) already free.
1990 			 * Very bad.
1991 			 */
1992 			if (XFS_IS_CORRUPT(mp, bno + len > gtbno)) {
1993 				error = -EFSCORRUPTED;
1994 				goto error0;
1995 			}
1996 		}
1997 	}
1998 	/*
1999 	 * Now allocate and initialize a cursor for the by-size tree.
2000 	 */
2001 	cnt_cur = xfs_allocbt_init_cursor(mp, tp, agbp, pag, XFS_BTNUM_CNT);
2002 	/*
2003 	 * Have both left and right contiguous neighbors.
2004 	 * Merge all three into a single free block.
2005 	 */
2006 	if (haveleft && haveright) {
2007 		/*
2008 		 * Delete the old by-size entry on the left.
2009 		 */
2010 		if ((error = xfs_alloc_lookup_eq(cnt_cur, ltbno, ltlen, &i)))
2011 			goto error0;
2012 		if (XFS_IS_CORRUPT(mp, i != 1)) {
2013 			error = -EFSCORRUPTED;
2014 			goto error0;
2015 		}
2016 		if ((error = xfs_btree_delete(cnt_cur, &i)))
2017 			goto error0;
2018 		if (XFS_IS_CORRUPT(mp, i != 1)) {
2019 			error = -EFSCORRUPTED;
2020 			goto error0;
2021 		}
2022 		/*
2023 		 * Delete the old by-size entry on the right.
2024 		 */
2025 		if ((error = xfs_alloc_lookup_eq(cnt_cur, gtbno, gtlen, &i)))
2026 			goto error0;
2027 		if (XFS_IS_CORRUPT(mp, i != 1)) {
2028 			error = -EFSCORRUPTED;
2029 			goto error0;
2030 		}
2031 		if ((error = xfs_btree_delete(cnt_cur, &i)))
2032 			goto error0;
2033 		if (XFS_IS_CORRUPT(mp, i != 1)) {
2034 			error = -EFSCORRUPTED;
2035 			goto error0;
2036 		}
2037 		/*
2038 		 * Delete the old by-block entry for the right block.
2039 		 */
2040 		if ((error = xfs_btree_delete(bno_cur, &i)))
2041 			goto error0;
2042 		if (XFS_IS_CORRUPT(mp, i != 1)) {
2043 			error = -EFSCORRUPTED;
2044 			goto error0;
2045 		}
2046 		/*
2047 		 * Move the by-block cursor back to the left neighbor.
2048 		 */
2049 		if ((error = xfs_btree_decrement(bno_cur, 0, &i)))
2050 			goto error0;
2051 		if (XFS_IS_CORRUPT(mp, i != 1)) {
2052 			error = -EFSCORRUPTED;
2053 			goto error0;
2054 		}
2055 #ifdef DEBUG
2056 		/*
2057 		 * Check that this is the right record: delete didn't
2058 		 * mangle the cursor.
2059 		 */
2060 		{
2061 			xfs_agblock_t	xxbno;
2062 			xfs_extlen_t	xxlen;
2063 
2064 			if ((error = xfs_alloc_get_rec(bno_cur, &xxbno, &xxlen,
2065 					&i)))
2066 				goto error0;
2067 			if (XFS_IS_CORRUPT(mp,
2068 					   i != 1 ||
2069 					   xxbno != ltbno ||
2070 					   xxlen != ltlen)) {
2071 				error = -EFSCORRUPTED;
2072 				goto error0;
2073 			}
2074 		}
2075 #endif
2076 		/*
2077 		 * Update remaining by-block entry to the new, joined block.
2078 		 */
2079 		nbno = ltbno;
2080 		nlen = len + ltlen + gtlen;
2081 		if ((error = xfs_alloc_update(bno_cur, nbno, nlen)))
2082 			goto error0;
2083 	}
2084 	/*
2085 	 * Have only a left contiguous neighbor.
2086 	 * Merge it together with the new freespace.
2087 	 */
2088 	else if (haveleft) {
2089 		/*
2090 		 * Delete the old by-size entry on the left.
2091 		 */
2092 		if ((error = xfs_alloc_lookup_eq(cnt_cur, ltbno, ltlen, &i)))
2093 			goto error0;
2094 		if (XFS_IS_CORRUPT(mp, i != 1)) {
2095 			error = -EFSCORRUPTED;
2096 			goto error0;
2097 		}
2098 		if ((error = xfs_btree_delete(cnt_cur, &i)))
2099 			goto error0;
2100 		if (XFS_IS_CORRUPT(mp, i != 1)) {
2101 			error = -EFSCORRUPTED;
2102 			goto error0;
2103 		}
2104 		/*
2105 		 * Back up the by-block cursor to the left neighbor, and
2106 		 * update its length.
2107 		 */
2108 		if ((error = xfs_btree_decrement(bno_cur, 0, &i)))
2109 			goto error0;
2110 		if (XFS_IS_CORRUPT(mp, i != 1)) {
2111 			error = -EFSCORRUPTED;
2112 			goto error0;
2113 		}
2114 		nbno = ltbno;
2115 		nlen = len + ltlen;
2116 		if ((error = xfs_alloc_update(bno_cur, nbno, nlen)))
2117 			goto error0;
2118 	}
2119 	/*
2120 	 * Have only a right contiguous neighbor.
2121 	 * Merge it together with the new freespace.
2122 	 */
2123 	else if (haveright) {
2124 		/*
2125 		 * Delete the old by-size entry on the right.
2126 		 */
2127 		if ((error = xfs_alloc_lookup_eq(cnt_cur, gtbno, gtlen, &i)))
2128 			goto error0;
2129 		if (XFS_IS_CORRUPT(mp, i != 1)) {
2130 			error = -EFSCORRUPTED;
2131 			goto error0;
2132 		}
2133 		if ((error = xfs_btree_delete(cnt_cur, &i)))
2134 			goto error0;
2135 		if (XFS_IS_CORRUPT(mp, i != 1)) {
2136 			error = -EFSCORRUPTED;
2137 			goto error0;
2138 		}
2139 		/*
2140 		 * Update the starting block and length of the right
2141 		 * neighbor in the by-block tree.
2142 		 */
2143 		nbno = bno;
2144 		nlen = len + gtlen;
2145 		if ((error = xfs_alloc_update(bno_cur, nbno, nlen)))
2146 			goto error0;
2147 	}
2148 	/*
2149 	 * No contiguous neighbors.
2150 	 * Insert the new freespace into the by-block tree.
2151 	 */
2152 	else {
2153 		nbno = bno;
2154 		nlen = len;
2155 		if ((error = xfs_btree_insert(bno_cur, &i)))
2156 			goto error0;
2157 		if (XFS_IS_CORRUPT(mp, i != 1)) {
2158 			error = -EFSCORRUPTED;
2159 			goto error0;
2160 		}
2161 	}
2162 	xfs_btree_del_cursor(bno_cur, XFS_BTREE_NOERROR);
2163 	bno_cur = NULL;
2164 	/*
2165 	 * In all cases we need to insert the new freespace in the by-size tree.
2166 	 */
2167 	if ((error = xfs_alloc_lookup_eq(cnt_cur, nbno, nlen, &i)))
2168 		goto error0;
2169 	if (XFS_IS_CORRUPT(mp, i != 0)) {
2170 		error = -EFSCORRUPTED;
2171 		goto error0;
2172 	}
2173 	if ((error = xfs_btree_insert(cnt_cur, &i)))
2174 		goto error0;
2175 	if (XFS_IS_CORRUPT(mp, i != 1)) {
2176 		error = -EFSCORRUPTED;
2177 		goto error0;
2178 	}
2179 	xfs_btree_del_cursor(cnt_cur, XFS_BTREE_NOERROR);
2180 	cnt_cur = NULL;
2181 
2182 	/*
2183 	 * Update the freespace totals in the ag and superblock.
2184 	 */
2185 	error = xfs_alloc_update_counters(tp, agbp, len);
2186 	xfs_ag_resv_free_extent(agbp->b_pag, type, tp, len);
2187 	if (error)
2188 		goto error0;
2189 
2190 	XFS_STATS_INC(mp, xs_freex);
2191 	XFS_STATS_ADD(mp, xs_freeb, len);
2192 
2193 	trace_xfs_free_extent(mp, agno, bno, len, type, haveleft, haveright);
2194 
2195 	return 0;
2196 
2197  error0:
2198 	trace_xfs_free_extent(mp, agno, bno, len, type, -1, -1);
2199 	if (bno_cur)
2200 		xfs_btree_del_cursor(bno_cur, XFS_BTREE_ERROR);
2201 	if (cnt_cur)
2202 		xfs_btree_del_cursor(cnt_cur, XFS_BTREE_ERROR);
2203 	return error;
2204 }
2205 
2206 /*
2207  * Visible (exported) allocation/free functions.
2208  * Some of these are used just by xfs_alloc_btree.c and this file.
2209  */
2210 
2211 /*
2212  * Compute and fill in value of m_alloc_maxlevels.
2213  */
2214 void
2215 xfs_alloc_compute_maxlevels(
2216 	xfs_mount_t	*mp)	/* file system mount structure */
2217 {
2218 	mp->m_alloc_maxlevels = xfs_btree_compute_maxlevels(mp->m_alloc_mnr,
2219 			(mp->m_sb.sb_agblocks + 1) / 2);
2220 	ASSERT(mp->m_alloc_maxlevels <= xfs_allocbt_maxlevels_ondisk());
2221 }
2222 
2223 /*
2224  * Find the length of the longest extent in an AG.  The 'need' parameter
2225  * specifies how much space we're going to need for the AGFL and the
2226  * 'reserved' parameter tells us how many blocks in this AG are reserved for
2227  * other callers.
2228  */
2229 xfs_extlen_t
2230 xfs_alloc_longest_free_extent(
2231 	struct xfs_perag	*pag,
2232 	xfs_extlen_t		need,
2233 	xfs_extlen_t		reserved)
2234 {
2235 	xfs_extlen_t		delta = 0;
2236 
2237 	/*
2238 	 * If the AGFL needs a recharge, we'll have to subtract that from the
2239 	 * longest extent.
2240 	 */
2241 	if (need > pag->pagf_flcount)
2242 		delta = need - pag->pagf_flcount;
2243 
2244 	/*
2245 	 * If we cannot maintain others' reservations with space from the
2246 	 * not-longest freesp extents, we'll have to subtract /that/ from
2247 	 * the longest extent too.
2248 	 */
2249 	if (pag->pagf_freeblks - pag->pagf_longest < reserved)
2250 		delta += reserved - (pag->pagf_freeblks - pag->pagf_longest);
2251 
2252 	/*
2253 	 * If the longest extent is long enough to satisfy all the
2254 	 * reservations and AGFL rules in place, we can return this extent.
2255 	 */
2256 	if (pag->pagf_longest > delta)
2257 		return min_t(xfs_extlen_t, pag->pag_mount->m_ag_max_usable,
2258 				pag->pagf_longest - delta);
2259 
2260 	/* Otherwise, let the caller try for 1 block if there's space. */
2261 	return pag->pagf_flcount > 0 || pag->pagf_longest > 0;
2262 }
2263 
2264 /*
2265  * Compute the minimum length of the AGFL in the given AG.  If @pag is NULL,
2266  * return the largest possible minimum length.
2267  */
2268 unsigned int
2269 xfs_alloc_min_freelist(
2270 	struct xfs_mount	*mp,
2271 	struct xfs_perag	*pag)
2272 {
2273 	/* AG btrees have at least 1 level. */
2274 	static const uint8_t	fake_levels[XFS_BTNUM_AGF] = {1, 1, 1};
2275 	const uint8_t		*levels = pag ? pag->pagf_levels : fake_levels;
2276 	unsigned int		min_free;
2277 
2278 	ASSERT(mp->m_alloc_maxlevels > 0);
2279 
2280 	/* space needed by-bno freespace btree */
2281 	min_free = min_t(unsigned int, levels[XFS_BTNUM_BNOi] + 1,
2282 				       mp->m_alloc_maxlevels);
2283 	/* space needed by-size freespace btree */
2284 	min_free += min_t(unsigned int, levels[XFS_BTNUM_CNTi] + 1,
2285 				       mp->m_alloc_maxlevels);
2286 	/* space needed reverse mapping used space btree */
2287 	if (xfs_has_rmapbt(mp))
2288 		min_free += min_t(unsigned int, levels[XFS_BTNUM_RMAPi] + 1,
2289 						mp->m_rmap_maxlevels);
2290 
2291 	return min_free;
2292 }
2293 
2294 /*
2295  * Check if the operation we are fixing up the freelist for should go ahead or
2296  * not. If we are freeing blocks, we always allow it, otherwise the allocation
2297  * is dependent on whether the size and shape of free space available will
2298  * permit the requested allocation to take place.
2299  */
2300 static bool
2301 xfs_alloc_space_available(
2302 	struct xfs_alloc_arg	*args,
2303 	xfs_extlen_t		min_free,
2304 	int			flags)
2305 {
2306 	struct xfs_perag	*pag = args->pag;
2307 	xfs_extlen_t		alloc_len, longest;
2308 	xfs_extlen_t		reservation; /* blocks that are still reserved */
2309 	int			available;
2310 	xfs_extlen_t		agflcount;
2311 
2312 	if (flags & XFS_ALLOC_FLAG_FREEING)
2313 		return true;
2314 
2315 	reservation = xfs_ag_resv_needed(pag, args->resv);
2316 
2317 	/* do we have enough contiguous free space for the allocation? */
2318 	alloc_len = args->minlen + (args->alignment - 1) + args->minalignslop;
2319 	longest = xfs_alloc_longest_free_extent(pag, min_free, reservation);
2320 	if (longest < alloc_len)
2321 		return false;
2322 
2323 	/*
2324 	 * Do we have enough free space remaining for the allocation? Don't
2325 	 * account extra agfl blocks because we are about to defer free them,
2326 	 * making them unavailable until the current transaction commits.
2327 	 */
2328 	agflcount = min_t(xfs_extlen_t, pag->pagf_flcount, min_free);
2329 	available = (int)(pag->pagf_freeblks + agflcount -
2330 			  reservation - min_free - args->minleft);
2331 	if (available < (int)max(args->total, alloc_len))
2332 		return false;
2333 
2334 	/*
2335 	 * Clamp maxlen to the amount of free space available for the actual
2336 	 * extent allocation.
2337 	 */
2338 	if (available < (int)args->maxlen && !(flags & XFS_ALLOC_FLAG_CHECK)) {
2339 		args->maxlen = available;
2340 		ASSERT(args->maxlen > 0);
2341 		ASSERT(args->maxlen >= args->minlen);
2342 	}
2343 
2344 	return true;
2345 }
2346 
2347 int
2348 xfs_free_agfl_block(
2349 	struct xfs_trans	*tp,
2350 	xfs_agnumber_t		agno,
2351 	xfs_agblock_t		agbno,
2352 	struct xfs_buf		*agbp,
2353 	struct xfs_owner_info	*oinfo)
2354 {
2355 	int			error;
2356 	struct xfs_buf		*bp;
2357 
2358 	error = xfs_free_ag_extent(tp, agbp, agno, agbno, 1, oinfo,
2359 				   XFS_AG_RESV_AGFL);
2360 	if (error)
2361 		return error;
2362 
2363 	error = xfs_trans_get_buf(tp, tp->t_mountp->m_ddev_targp,
2364 			XFS_AGB_TO_DADDR(tp->t_mountp, agno, agbno),
2365 			tp->t_mountp->m_bsize, 0, &bp);
2366 	if (error)
2367 		return error;
2368 	xfs_trans_binval(tp, bp);
2369 
2370 	return 0;
2371 }
2372 
2373 /*
2374  * Check the agfl fields of the agf for inconsistency or corruption. The purpose
2375  * is to detect an agfl header padding mismatch between current and early v5
2376  * kernels. This problem manifests as a 1-slot size difference between the
2377  * on-disk flcount and the active [first, last] range of a wrapped agfl. This
2378  * may also catch variants of agfl count corruption unrelated to padding. Either
2379  * way, we'll reset the agfl and warn the user.
2380  *
2381  * Return true if a reset is required before the agfl can be used, false
2382  * otherwise.
2383  */
2384 static bool
2385 xfs_agfl_needs_reset(
2386 	struct xfs_mount	*mp,
2387 	struct xfs_agf		*agf)
2388 {
2389 	uint32_t		f = be32_to_cpu(agf->agf_flfirst);
2390 	uint32_t		l = be32_to_cpu(agf->agf_fllast);
2391 	uint32_t		c = be32_to_cpu(agf->agf_flcount);
2392 	int			agfl_size = xfs_agfl_size(mp);
2393 	int			active;
2394 
2395 	/* no agfl header on v4 supers */
2396 	if (!xfs_has_crc(mp))
2397 		return false;
2398 
2399 	/*
2400 	 * The agf read verifier catches severe corruption of these fields.
2401 	 * Repeat some sanity checks to cover a packed -> unpacked mismatch if
2402 	 * the verifier allows it.
2403 	 */
2404 	if (f >= agfl_size || l >= agfl_size)
2405 		return true;
2406 	if (c > agfl_size)
2407 		return true;
2408 
2409 	/*
2410 	 * Check consistency between the on-disk count and the active range. An
2411 	 * agfl padding mismatch manifests as an inconsistent flcount.
2412 	 */
2413 	if (c && l >= f)
2414 		active = l - f + 1;
2415 	else if (c)
2416 		active = agfl_size - f + l + 1;
2417 	else
2418 		active = 0;
2419 
2420 	return active != c;
2421 }
2422 
2423 /*
2424  * Reset the agfl to an empty state. Ignore/drop any existing blocks since the
2425  * agfl content cannot be trusted. Warn the user that a repair is required to
2426  * recover leaked blocks.
2427  *
2428  * The purpose of this mechanism is to handle filesystems affected by the agfl
2429  * header padding mismatch problem. A reset keeps the filesystem online with a
2430  * relatively minor free space accounting inconsistency rather than suffer the
2431  * inevitable crash from use of an invalid agfl block.
2432  */
2433 static void
2434 xfs_agfl_reset(
2435 	struct xfs_trans	*tp,
2436 	struct xfs_buf		*agbp,
2437 	struct xfs_perag	*pag)
2438 {
2439 	struct xfs_mount	*mp = tp->t_mountp;
2440 	struct xfs_agf		*agf = agbp->b_addr;
2441 
2442 	ASSERT(pag->pagf_agflreset);
2443 	trace_xfs_agfl_reset(mp, agf, 0, _RET_IP_);
2444 
2445 	xfs_warn(mp,
2446 	       "WARNING: Reset corrupted AGFL on AG %u. %d blocks leaked. "
2447 	       "Please unmount and run xfs_repair.",
2448 	         pag->pag_agno, pag->pagf_flcount);
2449 
2450 	agf->agf_flfirst = 0;
2451 	agf->agf_fllast = cpu_to_be32(xfs_agfl_size(mp) - 1);
2452 	agf->agf_flcount = 0;
2453 	xfs_alloc_log_agf(tp, agbp, XFS_AGF_FLFIRST | XFS_AGF_FLLAST |
2454 				    XFS_AGF_FLCOUNT);
2455 
2456 	pag->pagf_flcount = 0;
2457 	pag->pagf_agflreset = false;
2458 }
2459 
2460 /*
2461  * Defer an AGFL block free. This is effectively equivalent to
2462  * xfs_free_extent_later() with some special handling particular to AGFL blocks.
2463  *
2464  * Deferring AGFL frees helps prevent log reservation overruns due to too many
2465  * allocation operations in a transaction. AGFL frees are prone to this problem
2466  * because for one they are always freed one at a time. Further, an immediate
2467  * AGFL block free can cause a btree join and require another block free before
2468  * the real allocation can proceed. Deferring the free disconnects freeing up
2469  * the AGFL slot from freeing the block.
2470  */
2471 STATIC void
2472 xfs_defer_agfl_block(
2473 	struct xfs_trans		*tp,
2474 	xfs_agnumber_t			agno,
2475 	xfs_fsblock_t			agbno,
2476 	struct xfs_owner_info		*oinfo)
2477 {
2478 	struct xfs_mount		*mp = tp->t_mountp;
2479 	struct xfs_extent_free_item	*new;		/* new element */
2480 
2481 	ASSERT(xfs_extfree_item_cache != NULL);
2482 	ASSERT(oinfo != NULL);
2483 
2484 	new = kmem_cache_zalloc(xfs_extfree_item_cache,
2485 			       GFP_KERNEL | __GFP_NOFAIL);
2486 	new->xefi_startblock = XFS_AGB_TO_FSB(mp, agno, agbno);
2487 	new->xefi_blockcount = 1;
2488 	new->xefi_owner = oinfo->oi_owner;
2489 
2490 	trace_xfs_agfl_free_defer(mp, agno, 0, agbno, 1);
2491 
2492 	xfs_defer_add(tp, XFS_DEFER_OPS_TYPE_AGFL_FREE, &new->xefi_list);
2493 }
2494 
2495 /*
2496  * Add the extent to the list of extents to be free at transaction end.
2497  * The list is maintained sorted (by block number).
2498  */
2499 void
2500 __xfs_free_extent_later(
2501 	struct xfs_trans		*tp,
2502 	xfs_fsblock_t			bno,
2503 	xfs_filblks_t			len,
2504 	const struct xfs_owner_info	*oinfo,
2505 	bool				skip_discard)
2506 {
2507 	struct xfs_extent_free_item	*new;		/* new element */
2508 #ifdef DEBUG
2509 	struct xfs_mount		*mp = tp->t_mountp;
2510 	xfs_agnumber_t			agno;
2511 	xfs_agblock_t			agbno;
2512 
2513 	ASSERT(bno != NULLFSBLOCK);
2514 	ASSERT(len > 0);
2515 	ASSERT(len <= XFS_MAX_BMBT_EXTLEN);
2516 	ASSERT(!isnullstartblock(bno));
2517 	agno = XFS_FSB_TO_AGNO(mp, bno);
2518 	agbno = XFS_FSB_TO_AGBNO(mp, bno);
2519 	ASSERT(agno < mp->m_sb.sb_agcount);
2520 	ASSERT(agbno < mp->m_sb.sb_agblocks);
2521 	ASSERT(len < mp->m_sb.sb_agblocks);
2522 	ASSERT(agbno + len <= mp->m_sb.sb_agblocks);
2523 #endif
2524 	ASSERT(xfs_extfree_item_cache != NULL);
2525 
2526 	new = kmem_cache_zalloc(xfs_extfree_item_cache,
2527 			       GFP_KERNEL | __GFP_NOFAIL);
2528 	new->xefi_startblock = bno;
2529 	new->xefi_blockcount = (xfs_extlen_t)len;
2530 	if (skip_discard)
2531 		new->xefi_flags |= XFS_EFI_SKIP_DISCARD;
2532 	if (oinfo) {
2533 		ASSERT(oinfo->oi_offset == 0);
2534 
2535 		if (oinfo->oi_flags & XFS_OWNER_INFO_ATTR_FORK)
2536 			new->xefi_flags |= XFS_EFI_ATTR_FORK;
2537 		if (oinfo->oi_flags & XFS_OWNER_INFO_BMBT_BLOCK)
2538 			new->xefi_flags |= XFS_EFI_BMBT_BLOCK;
2539 		new->xefi_owner = oinfo->oi_owner;
2540 	} else {
2541 		new->xefi_owner = XFS_RMAP_OWN_NULL;
2542 	}
2543 	trace_xfs_bmap_free_defer(tp->t_mountp,
2544 			XFS_FSB_TO_AGNO(tp->t_mountp, bno), 0,
2545 			XFS_FSB_TO_AGBNO(tp->t_mountp, bno), len);
2546 	xfs_defer_add(tp, XFS_DEFER_OPS_TYPE_FREE, &new->xefi_list);
2547 }
2548 
2549 #ifdef DEBUG
2550 /*
2551  * Check if an AGF has a free extent record whose length is equal to
2552  * args->minlen.
2553  */
2554 STATIC int
2555 xfs_exact_minlen_extent_available(
2556 	struct xfs_alloc_arg	*args,
2557 	struct xfs_buf		*agbp,
2558 	int			*stat)
2559 {
2560 	struct xfs_btree_cur	*cnt_cur;
2561 	xfs_agblock_t		fbno;
2562 	xfs_extlen_t		flen;
2563 	int			error = 0;
2564 
2565 	cnt_cur = xfs_allocbt_init_cursor(args->mp, args->tp, agbp,
2566 					args->pag, XFS_BTNUM_CNT);
2567 	error = xfs_alloc_lookup_ge(cnt_cur, 0, args->minlen, stat);
2568 	if (error)
2569 		goto out;
2570 
2571 	if (*stat == 0) {
2572 		error = -EFSCORRUPTED;
2573 		goto out;
2574 	}
2575 
2576 	error = xfs_alloc_get_rec(cnt_cur, &fbno, &flen, stat);
2577 	if (error)
2578 		goto out;
2579 
2580 	if (*stat == 1 && flen != args->minlen)
2581 		*stat = 0;
2582 
2583 out:
2584 	xfs_btree_del_cursor(cnt_cur, error);
2585 
2586 	return error;
2587 }
2588 #endif
2589 
2590 /*
2591  * Decide whether to use this allocation group for this allocation.
2592  * If so, fix up the btree freelist's size.
2593  */
2594 int			/* error */
2595 xfs_alloc_fix_freelist(
2596 	struct xfs_alloc_arg	*args,	/* allocation argument structure */
2597 	int			flags)	/* XFS_ALLOC_FLAG_... */
2598 {
2599 	struct xfs_mount	*mp = args->mp;
2600 	struct xfs_perag	*pag = args->pag;
2601 	struct xfs_trans	*tp = args->tp;
2602 	struct xfs_buf		*agbp = NULL;
2603 	struct xfs_buf		*agflbp = NULL;
2604 	struct xfs_alloc_arg	targs;	/* local allocation arguments */
2605 	xfs_agblock_t		bno;	/* freelist block */
2606 	xfs_extlen_t		need;	/* total blocks needed in freelist */
2607 	int			error = 0;
2608 
2609 	/* deferred ops (AGFL block frees) require permanent transactions */
2610 	ASSERT(tp->t_flags & XFS_TRANS_PERM_LOG_RES);
2611 
2612 	if (!pag->pagf_init) {
2613 		error = xfs_alloc_read_agf(pag, tp, flags, &agbp);
2614 		if (error) {
2615 			/* Couldn't lock the AGF so skip this AG. */
2616 			if (error == -EAGAIN)
2617 				error = 0;
2618 			goto out_no_agbp;
2619 		}
2620 	}
2621 
2622 	/*
2623 	 * If this is a metadata preferred pag and we are user data then try
2624 	 * somewhere else if we are not being asked to try harder at this
2625 	 * point
2626 	 */
2627 	if (pag->pagf_metadata && (args->datatype & XFS_ALLOC_USERDATA) &&
2628 	    (flags & XFS_ALLOC_FLAG_TRYLOCK)) {
2629 		ASSERT(!(flags & XFS_ALLOC_FLAG_FREEING));
2630 		goto out_agbp_relse;
2631 	}
2632 
2633 	need = xfs_alloc_min_freelist(mp, pag);
2634 	if (!xfs_alloc_space_available(args, need, flags |
2635 			XFS_ALLOC_FLAG_CHECK))
2636 		goto out_agbp_relse;
2637 
2638 	/*
2639 	 * Get the a.g. freespace buffer.
2640 	 * Can fail if we're not blocking on locks, and it's held.
2641 	 */
2642 	if (!agbp) {
2643 		error = xfs_alloc_read_agf(pag, tp, flags, &agbp);
2644 		if (error) {
2645 			/* Couldn't lock the AGF so skip this AG. */
2646 			if (error == -EAGAIN)
2647 				error = 0;
2648 			goto out_no_agbp;
2649 		}
2650 	}
2651 
2652 	/* reset a padding mismatched agfl before final free space check */
2653 	if (pag->pagf_agflreset)
2654 		xfs_agfl_reset(tp, agbp, pag);
2655 
2656 	/* If there isn't enough total space or single-extent, reject it. */
2657 	need = xfs_alloc_min_freelist(mp, pag);
2658 	if (!xfs_alloc_space_available(args, need, flags))
2659 		goto out_agbp_relse;
2660 
2661 #ifdef DEBUG
2662 	if (args->alloc_minlen_only) {
2663 		int stat;
2664 
2665 		error = xfs_exact_minlen_extent_available(args, agbp, &stat);
2666 		if (error || !stat)
2667 			goto out_agbp_relse;
2668 	}
2669 #endif
2670 	/*
2671 	 * Make the freelist shorter if it's too long.
2672 	 *
2673 	 * Note that from this point onwards, we will always release the agf and
2674 	 * agfl buffers on error. This handles the case where we error out and
2675 	 * the buffers are clean or may not have been joined to the transaction
2676 	 * and hence need to be released manually. If they have been joined to
2677 	 * the transaction, then xfs_trans_brelse() will handle them
2678 	 * appropriately based on the recursion count and dirty state of the
2679 	 * buffer.
2680 	 *
2681 	 * XXX (dgc): When we have lots of free space, does this buy us
2682 	 * anything other than extra overhead when we need to put more blocks
2683 	 * back on the free list? Maybe we should only do this when space is
2684 	 * getting low or the AGFL is more than half full?
2685 	 *
2686 	 * The NOSHRINK flag prevents the AGFL from being shrunk if it's too
2687 	 * big; the NORMAP flag prevents AGFL expand/shrink operations from
2688 	 * updating the rmapbt.  Both flags are used in xfs_repair while we're
2689 	 * rebuilding the rmapbt, and neither are used by the kernel.  They're
2690 	 * both required to ensure that rmaps are correctly recorded for the
2691 	 * regenerated AGFL, bnobt, and cntbt.  See repair/phase5.c and
2692 	 * repair/rmap.c in xfsprogs for details.
2693 	 */
2694 	memset(&targs, 0, sizeof(targs));
2695 	/* struct copy below */
2696 	if (flags & XFS_ALLOC_FLAG_NORMAP)
2697 		targs.oinfo = XFS_RMAP_OINFO_SKIP_UPDATE;
2698 	else
2699 		targs.oinfo = XFS_RMAP_OINFO_AG;
2700 	while (!(flags & XFS_ALLOC_FLAG_NOSHRINK) && pag->pagf_flcount > need) {
2701 		error = xfs_alloc_get_freelist(pag, tp, agbp, &bno, 0);
2702 		if (error)
2703 			goto out_agbp_relse;
2704 
2705 		/* defer agfl frees */
2706 		xfs_defer_agfl_block(tp, args->agno, bno, &targs.oinfo);
2707 	}
2708 
2709 	targs.tp = tp;
2710 	targs.mp = mp;
2711 	targs.agbp = agbp;
2712 	targs.agno = args->agno;
2713 	targs.alignment = targs.minlen = targs.prod = 1;
2714 	targs.type = XFS_ALLOCTYPE_THIS_AG;
2715 	targs.pag = pag;
2716 	error = xfs_alloc_read_agfl(pag, tp, &agflbp);
2717 	if (error)
2718 		goto out_agbp_relse;
2719 
2720 	/* Make the freelist longer if it's too short. */
2721 	while (pag->pagf_flcount < need) {
2722 		targs.agbno = 0;
2723 		targs.maxlen = need - pag->pagf_flcount;
2724 		targs.resv = XFS_AG_RESV_AGFL;
2725 
2726 		/* Allocate as many blocks as possible at once. */
2727 		error = xfs_alloc_ag_vextent(&targs);
2728 		if (error)
2729 			goto out_agflbp_relse;
2730 
2731 		/*
2732 		 * Stop if we run out.  Won't happen if callers are obeying
2733 		 * the restrictions correctly.  Can happen for free calls
2734 		 * on a completely full ag.
2735 		 */
2736 		if (targs.agbno == NULLAGBLOCK) {
2737 			if (flags & XFS_ALLOC_FLAG_FREEING)
2738 				break;
2739 			goto out_agflbp_relse;
2740 		}
2741 		/*
2742 		 * Put each allocated block on the list.
2743 		 */
2744 		for (bno = targs.agbno; bno < targs.agbno + targs.len; bno++) {
2745 			error = xfs_alloc_put_freelist(pag, tp, agbp,
2746 							agflbp, bno, 0);
2747 			if (error)
2748 				goto out_agflbp_relse;
2749 		}
2750 	}
2751 	xfs_trans_brelse(tp, agflbp);
2752 	args->agbp = agbp;
2753 	return 0;
2754 
2755 out_agflbp_relse:
2756 	xfs_trans_brelse(tp, agflbp);
2757 out_agbp_relse:
2758 	if (agbp)
2759 		xfs_trans_brelse(tp, agbp);
2760 out_no_agbp:
2761 	args->agbp = NULL;
2762 	return error;
2763 }
2764 
2765 /*
2766  * Get a block from the freelist.
2767  * Returns with the buffer for the block gotten.
2768  */
2769 int
2770 xfs_alloc_get_freelist(
2771 	struct xfs_perag	*pag,
2772 	struct xfs_trans	*tp,
2773 	struct xfs_buf		*agbp,
2774 	xfs_agblock_t		*bnop,
2775 	int			btreeblk)
2776 {
2777 	struct xfs_agf		*agf = agbp->b_addr;
2778 	struct xfs_buf		*agflbp;
2779 	xfs_agblock_t		bno;
2780 	__be32			*agfl_bno;
2781 	int			error;
2782 	uint32_t		logflags;
2783 	struct xfs_mount	*mp = tp->t_mountp;
2784 
2785 	/*
2786 	 * Freelist is empty, give up.
2787 	 */
2788 	if (!agf->agf_flcount) {
2789 		*bnop = NULLAGBLOCK;
2790 		return 0;
2791 	}
2792 	/*
2793 	 * Read the array of free blocks.
2794 	 */
2795 	error = xfs_alloc_read_agfl(pag, tp, &agflbp);
2796 	if (error)
2797 		return error;
2798 
2799 
2800 	/*
2801 	 * Get the block number and update the data structures.
2802 	 */
2803 	agfl_bno = xfs_buf_to_agfl_bno(agflbp);
2804 	bno = be32_to_cpu(agfl_bno[be32_to_cpu(agf->agf_flfirst)]);
2805 	be32_add_cpu(&agf->agf_flfirst, 1);
2806 	xfs_trans_brelse(tp, agflbp);
2807 	if (be32_to_cpu(agf->agf_flfirst) == xfs_agfl_size(mp))
2808 		agf->agf_flfirst = 0;
2809 
2810 	ASSERT(!pag->pagf_agflreset);
2811 	be32_add_cpu(&agf->agf_flcount, -1);
2812 	pag->pagf_flcount--;
2813 
2814 	logflags = XFS_AGF_FLFIRST | XFS_AGF_FLCOUNT;
2815 	if (btreeblk) {
2816 		be32_add_cpu(&agf->agf_btreeblks, 1);
2817 		pag->pagf_btreeblks++;
2818 		logflags |= XFS_AGF_BTREEBLKS;
2819 	}
2820 
2821 	xfs_alloc_log_agf(tp, agbp, logflags);
2822 	*bnop = bno;
2823 
2824 	return 0;
2825 }
2826 
2827 /*
2828  * Log the given fields from the agf structure.
2829  */
2830 void
2831 xfs_alloc_log_agf(
2832 	struct xfs_trans	*tp,
2833 	struct xfs_buf		*bp,
2834 	uint32_t		fields)
2835 {
2836 	int	first;		/* first byte offset */
2837 	int	last;		/* last byte offset */
2838 	static const short	offsets[] = {
2839 		offsetof(xfs_agf_t, agf_magicnum),
2840 		offsetof(xfs_agf_t, agf_versionnum),
2841 		offsetof(xfs_agf_t, agf_seqno),
2842 		offsetof(xfs_agf_t, agf_length),
2843 		offsetof(xfs_agf_t, agf_roots[0]),
2844 		offsetof(xfs_agf_t, agf_levels[0]),
2845 		offsetof(xfs_agf_t, agf_flfirst),
2846 		offsetof(xfs_agf_t, agf_fllast),
2847 		offsetof(xfs_agf_t, agf_flcount),
2848 		offsetof(xfs_agf_t, agf_freeblks),
2849 		offsetof(xfs_agf_t, agf_longest),
2850 		offsetof(xfs_agf_t, agf_btreeblks),
2851 		offsetof(xfs_agf_t, agf_uuid),
2852 		offsetof(xfs_agf_t, agf_rmap_blocks),
2853 		offsetof(xfs_agf_t, agf_refcount_blocks),
2854 		offsetof(xfs_agf_t, agf_refcount_root),
2855 		offsetof(xfs_agf_t, agf_refcount_level),
2856 		/* needed so that we don't log the whole rest of the structure: */
2857 		offsetof(xfs_agf_t, agf_spare64),
2858 		sizeof(xfs_agf_t)
2859 	};
2860 
2861 	trace_xfs_agf(tp->t_mountp, bp->b_addr, fields, _RET_IP_);
2862 
2863 	xfs_trans_buf_set_type(tp, bp, XFS_BLFT_AGF_BUF);
2864 
2865 	xfs_btree_offsets(fields, offsets, XFS_AGF_NUM_BITS, &first, &last);
2866 	xfs_trans_log_buf(tp, bp, (uint)first, (uint)last);
2867 }
2868 
2869 /*
2870  * Put the block on the freelist for the allocation group.
2871  */
2872 int
2873 xfs_alloc_put_freelist(
2874 	struct xfs_perag	*pag,
2875 	struct xfs_trans	*tp,
2876 	struct xfs_buf		*agbp,
2877 	struct xfs_buf		*agflbp,
2878 	xfs_agblock_t		bno,
2879 	int			btreeblk)
2880 {
2881 	struct xfs_mount	*mp = tp->t_mountp;
2882 	struct xfs_agf		*agf = agbp->b_addr;
2883 	__be32			*blockp;
2884 	int			error;
2885 	uint32_t		logflags;
2886 	__be32			*agfl_bno;
2887 	int			startoff;
2888 
2889 	if (!agflbp) {
2890 		error = xfs_alloc_read_agfl(pag, tp, &agflbp);
2891 		if (error)
2892 			return error;
2893 	}
2894 
2895 	be32_add_cpu(&agf->agf_fllast, 1);
2896 	if (be32_to_cpu(agf->agf_fllast) == xfs_agfl_size(mp))
2897 		agf->agf_fllast = 0;
2898 
2899 	ASSERT(!pag->pagf_agflreset);
2900 	be32_add_cpu(&agf->agf_flcount, 1);
2901 	pag->pagf_flcount++;
2902 
2903 	logflags = XFS_AGF_FLLAST | XFS_AGF_FLCOUNT;
2904 	if (btreeblk) {
2905 		be32_add_cpu(&agf->agf_btreeblks, -1);
2906 		pag->pagf_btreeblks--;
2907 		logflags |= XFS_AGF_BTREEBLKS;
2908 	}
2909 
2910 	xfs_alloc_log_agf(tp, agbp, logflags);
2911 
2912 	ASSERT(be32_to_cpu(agf->agf_flcount) <= xfs_agfl_size(mp));
2913 
2914 	agfl_bno = xfs_buf_to_agfl_bno(agflbp);
2915 	blockp = &agfl_bno[be32_to_cpu(agf->agf_fllast)];
2916 	*blockp = cpu_to_be32(bno);
2917 	startoff = (char *)blockp - (char *)agflbp->b_addr;
2918 
2919 	xfs_alloc_log_agf(tp, agbp, logflags);
2920 
2921 	xfs_trans_buf_set_type(tp, agflbp, XFS_BLFT_AGFL_BUF);
2922 	xfs_trans_log_buf(tp, agflbp, startoff,
2923 			  startoff + sizeof(xfs_agblock_t) - 1);
2924 	return 0;
2925 }
2926 
2927 static xfs_failaddr_t
2928 xfs_agf_verify(
2929 	struct xfs_buf		*bp)
2930 {
2931 	struct xfs_mount	*mp = bp->b_mount;
2932 	struct xfs_agf		*agf = bp->b_addr;
2933 
2934 	if (xfs_has_crc(mp)) {
2935 		if (!uuid_equal(&agf->agf_uuid, &mp->m_sb.sb_meta_uuid))
2936 			return __this_address;
2937 		if (!xfs_log_check_lsn(mp, be64_to_cpu(agf->agf_lsn)))
2938 			return __this_address;
2939 	}
2940 
2941 	if (!xfs_verify_magic(bp, agf->agf_magicnum))
2942 		return __this_address;
2943 
2944 	if (!(XFS_AGF_GOOD_VERSION(be32_to_cpu(agf->agf_versionnum)) &&
2945 	      be32_to_cpu(agf->agf_freeblks) <= be32_to_cpu(agf->agf_length) &&
2946 	      be32_to_cpu(agf->agf_flfirst) < xfs_agfl_size(mp) &&
2947 	      be32_to_cpu(agf->agf_fllast) < xfs_agfl_size(mp) &&
2948 	      be32_to_cpu(agf->agf_flcount) <= xfs_agfl_size(mp)))
2949 		return __this_address;
2950 
2951 	if (be32_to_cpu(agf->agf_length) > mp->m_sb.sb_dblocks)
2952 		return __this_address;
2953 
2954 	if (be32_to_cpu(agf->agf_freeblks) < be32_to_cpu(agf->agf_longest) ||
2955 	    be32_to_cpu(agf->agf_freeblks) > be32_to_cpu(agf->agf_length))
2956 		return __this_address;
2957 
2958 	if (be32_to_cpu(agf->agf_levels[XFS_BTNUM_BNO]) < 1 ||
2959 	    be32_to_cpu(agf->agf_levels[XFS_BTNUM_CNT]) < 1 ||
2960 	    be32_to_cpu(agf->agf_levels[XFS_BTNUM_BNO]) >
2961 						mp->m_alloc_maxlevels ||
2962 	    be32_to_cpu(agf->agf_levels[XFS_BTNUM_CNT]) >
2963 						mp->m_alloc_maxlevels)
2964 		return __this_address;
2965 
2966 	if (xfs_has_rmapbt(mp) &&
2967 	    (be32_to_cpu(agf->agf_levels[XFS_BTNUM_RMAP]) < 1 ||
2968 	     be32_to_cpu(agf->agf_levels[XFS_BTNUM_RMAP]) >
2969 						mp->m_rmap_maxlevels))
2970 		return __this_address;
2971 
2972 	if (xfs_has_rmapbt(mp) &&
2973 	    be32_to_cpu(agf->agf_rmap_blocks) > be32_to_cpu(agf->agf_length))
2974 		return __this_address;
2975 
2976 	/*
2977 	 * during growfs operations, the perag is not fully initialised,
2978 	 * so we can't use it for any useful checking. growfs ensures we can't
2979 	 * use it by using uncached buffers that don't have the perag attached
2980 	 * so we can detect and avoid this problem.
2981 	 */
2982 	if (bp->b_pag && be32_to_cpu(agf->agf_seqno) != bp->b_pag->pag_agno)
2983 		return __this_address;
2984 
2985 	if (xfs_has_lazysbcount(mp) &&
2986 	    be32_to_cpu(agf->agf_btreeblks) > be32_to_cpu(agf->agf_length))
2987 		return __this_address;
2988 
2989 	if (xfs_has_reflink(mp) &&
2990 	    be32_to_cpu(agf->agf_refcount_blocks) >
2991 	    be32_to_cpu(agf->agf_length))
2992 		return __this_address;
2993 
2994 	if (xfs_has_reflink(mp) &&
2995 	    (be32_to_cpu(agf->agf_refcount_level) < 1 ||
2996 	     be32_to_cpu(agf->agf_refcount_level) > mp->m_refc_maxlevels))
2997 		return __this_address;
2998 
2999 	return NULL;
3000 
3001 }
3002 
3003 static void
3004 xfs_agf_read_verify(
3005 	struct xfs_buf	*bp)
3006 {
3007 	struct xfs_mount *mp = bp->b_mount;
3008 	xfs_failaddr_t	fa;
3009 
3010 	if (xfs_has_crc(mp) &&
3011 	    !xfs_buf_verify_cksum(bp, XFS_AGF_CRC_OFF))
3012 		xfs_verifier_error(bp, -EFSBADCRC, __this_address);
3013 	else {
3014 		fa = xfs_agf_verify(bp);
3015 		if (XFS_TEST_ERROR(fa, mp, XFS_ERRTAG_ALLOC_READ_AGF))
3016 			xfs_verifier_error(bp, -EFSCORRUPTED, fa);
3017 	}
3018 }
3019 
3020 static void
3021 xfs_agf_write_verify(
3022 	struct xfs_buf	*bp)
3023 {
3024 	struct xfs_mount	*mp = bp->b_mount;
3025 	struct xfs_buf_log_item	*bip = bp->b_log_item;
3026 	struct xfs_agf		*agf = bp->b_addr;
3027 	xfs_failaddr_t		fa;
3028 
3029 	fa = xfs_agf_verify(bp);
3030 	if (fa) {
3031 		xfs_verifier_error(bp, -EFSCORRUPTED, fa);
3032 		return;
3033 	}
3034 
3035 	if (!xfs_has_crc(mp))
3036 		return;
3037 
3038 	if (bip)
3039 		agf->agf_lsn = cpu_to_be64(bip->bli_item.li_lsn);
3040 
3041 	xfs_buf_update_cksum(bp, XFS_AGF_CRC_OFF);
3042 }
3043 
3044 const struct xfs_buf_ops xfs_agf_buf_ops = {
3045 	.name = "xfs_agf",
3046 	.magic = { cpu_to_be32(XFS_AGF_MAGIC), cpu_to_be32(XFS_AGF_MAGIC) },
3047 	.verify_read = xfs_agf_read_verify,
3048 	.verify_write = xfs_agf_write_verify,
3049 	.verify_struct = xfs_agf_verify,
3050 };
3051 
3052 /*
3053  * Read in the allocation group header (free/alloc section).
3054  */
3055 int
3056 xfs_read_agf(
3057 	struct xfs_perag	*pag,
3058 	struct xfs_trans	*tp,
3059 	int			flags,
3060 	struct xfs_buf		**agfbpp)
3061 {
3062 	struct xfs_mount	*mp = pag->pag_mount;
3063 	int			error;
3064 
3065 	trace_xfs_read_agf(pag->pag_mount, pag->pag_agno);
3066 
3067 	error = xfs_trans_read_buf(mp, tp, mp->m_ddev_targp,
3068 			XFS_AG_DADDR(mp, pag->pag_agno, XFS_AGF_DADDR(mp)),
3069 			XFS_FSS_TO_BB(mp, 1), flags, agfbpp, &xfs_agf_buf_ops);
3070 	if (error)
3071 		return error;
3072 
3073 	xfs_buf_set_ref(*agfbpp, XFS_AGF_REF);
3074 	return 0;
3075 }
3076 
3077 /*
3078  * Read in the allocation group header (free/alloc section) and initialise the
3079  * perag structure if necessary. If the caller provides @agfbpp, then return the
3080  * locked buffer to the caller, otherwise free it.
3081  */
3082 int
3083 xfs_alloc_read_agf(
3084 	struct xfs_perag	*pag,
3085 	struct xfs_trans	*tp,
3086 	int			flags,
3087 	struct xfs_buf		**agfbpp)
3088 {
3089 	struct xfs_buf		*agfbp;
3090 	struct xfs_agf		*agf;
3091 	int			error;
3092 	int			allocbt_blks;
3093 
3094 	trace_xfs_alloc_read_agf(pag->pag_mount, pag->pag_agno);
3095 
3096 	/* We don't support trylock when freeing. */
3097 	ASSERT((flags & (XFS_ALLOC_FLAG_FREEING | XFS_ALLOC_FLAG_TRYLOCK)) !=
3098 			(XFS_ALLOC_FLAG_FREEING | XFS_ALLOC_FLAG_TRYLOCK));
3099 	error = xfs_read_agf(pag, tp,
3100 			(flags & XFS_ALLOC_FLAG_TRYLOCK) ? XBF_TRYLOCK : 0,
3101 			&agfbp);
3102 	if (error)
3103 		return error;
3104 
3105 	agf = agfbp->b_addr;
3106 	if (!pag->pagf_init) {
3107 		pag->pagf_freeblks = be32_to_cpu(agf->agf_freeblks);
3108 		pag->pagf_btreeblks = be32_to_cpu(agf->agf_btreeblks);
3109 		pag->pagf_flcount = be32_to_cpu(agf->agf_flcount);
3110 		pag->pagf_longest = be32_to_cpu(agf->agf_longest);
3111 		pag->pagf_levels[XFS_BTNUM_BNOi] =
3112 			be32_to_cpu(agf->agf_levels[XFS_BTNUM_BNOi]);
3113 		pag->pagf_levels[XFS_BTNUM_CNTi] =
3114 			be32_to_cpu(agf->agf_levels[XFS_BTNUM_CNTi]);
3115 		pag->pagf_levels[XFS_BTNUM_RMAPi] =
3116 			be32_to_cpu(agf->agf_levels[XFS_BTNUM_RMAPi]);
3117 		pag->pagf_refcount_level = be32_to_cpu(agf->agf_refcount_level);
3118 		pag->pagf_init = 1;
3119 		pag->pagf_agflreset = xfs_agfl_needs_reset(pag->pag_mount, agf);
3120 
3121 		/*
3122 		 * Update the in-core allocbt counter. Filter out the rmapbt
3123 		 * subset of the btreeblks counter because the rmapbt is managed
3124 		 * by perag reservation. Subtract one for the rmapbt root block
3125 		 * because the rmap counter includes it while the btreeblks
3126 		 * counter only tracks non-root blocks.
3127 		 */
3128 		allocbt_blks = pag->pagf_btreeblks;
3129 		if (xfs_has_rmapbt(pag->pag_mount))
3130 			allocbt_blks -= be32_to_cpu(agf->agf_rmap_blocks) - 1;
3131 		if (allocbt_blks > 0)
3132 			atomic64_add(allocbt_blks,
3133 					&pag->pag_mount->m_allocbt_blks);
3134 	}
3135 #ifdef DEBUG
3136 	else if (!xfs_is_shutdown(pag->pag_mount)) {
3137 		ASSERT(pag->pagf_freeblks == be32_to_cpu(agf->agf_freeblks));
3138 		ASSERT(pag->pagf_btreeblks == be32_to_cpu(agf->agf_btreeblks));
3139 		ASSERT(pag->pagf_flcount == be32_to_cpu(agf->agf_flcount));
3140 		ASSERT(pag->pagf_longest == be32_to_cpu(agf->agf_longest));
3141 		ASSERT(pag->pagf_levels[XFS_BTNUM_BNOi] ==
3142 		       be32_to_cpu(agf->agf_levels[XFS_BTNUM_BNOi]));
3143 		ASSERT(pag->pagf_levels[XFS_BTNUM_CNTi] ==
3144 		       be32_to_cpu(agf->agf_levels[XFS_BTNUM_CNTi]));
3145 	}
3146 #endif
3147 	if (agfbpp)
3148 		*agfbpp = agfbp;
3149 	else
3150 		xfs_trans_brelse(tp, agfbp);
3151 	return 0;
3152 }
3153 
3154 /*
3155  * Allocate an extent (variable-size).
3156  * Depending on the allocation type, we either look in a single allocation
3157  * group or loop over the allocation groups to find the result.
3158  */
3159 int				/* error */
3160 xfs_alloc_vextent(
3161 	struct xfs_alloc_arg	*args)	/* allocation argument structure */
3162 {
3163 	xfs_agblock_t		agsize;	/* allocation group size */
3164 	int			error;
3165 	int			flags;	/* XFS_ALLOC_FLAG_... locking flags */
3166 	struct xfs_mount	*mp;	/* mount structure pointer */
3167 	xfs_agnumber_t		sagno;	/* starting allocation group number */
3168 	xfs_alloctype_t		type;	/* input allocation type */
3169 	int			bump_rotor = 0;
3170 	xfs_agnumber_t		rotorstep = xfs_rotorstep; /* inode32 agf stepper */
3171 
3172 	mp = args->mp;
3173 	type = args->otype = args->type;
3174 	args->agbno = NULLAGBLOCK;
3175 	/*
3176 	 * Just fix this up, for the case where the last a.g. is shorter
3177 	 * (or there's only one a.g.) and the caller couldn't easily figure
3178 	 * that out (xfs_bmap_alloc).
3179 	 */
3180 	agsize = mp->m_sb.sb_agblocks;
3181 	if (args->maxlen > agsize)
3182 		args->maxlen = agsize;
3183 	if (args->alignment == 0)
3184 		args->alignment = 1;
3185 	ASSERT(XFS_FSB_TO_AGNO(mp, args->fsbno) < mp->m_sb.sb_agcount);
3186 	ASSERT(XFS_FSB_TO_AGBNO(mp, args->fsbno) < agsize);
3187 	ASSERT(args->minlen <= args->maxlen);
3188 	ASSERT(args->minlen <= agsize);
3189 	ASSERT(args->mod < args->prod);
3190 	if (XFS_FSB_TO_AGNO(mp, args->fsbno) >= mp->m_sb.sb_agcount ||
3191 	    XFS_FSB_TO_AGBNO(mp, args->fsbno) >= agsize ||
3192 	    args->minlen > args->maxlen || args->minlen > agsize ||
3193 	    args->mod >= args->prod) {
3194 		args->fsbno = NULLFSBLOCK;
3195 		trace_xfs_alloc_vextent_badargs(args);
3196 		return 0;
3197 	}
3198 
3199 	switch (type) {
3200 	case XFS_ALLOCTYPE_THIS_AG:
3201 	case XFS_ALLOCTYPE_NEAR_BNO:
3202 	case XFS_ALLOCTYPE_THIS_BNO:
3203 		/*
3204 		 * These three force us into a single a.g.
3205 		 */
3206 		args->agno = XFS_FSB_TO_AGNO(mp, args->fsbno);
3207 		args->pag = xfs_perag_get(mp, args->agno);
3208 		error = xfs_alloc_fix_freelist(args, 0);
3209 		if (error) {
3210 			trace_xfs_alloc_vextent_nofix(args);
3211 			goto error0;
3212 		}
3213 		if (!args->agbp) {
3214 			trace_xfs_alloc_vextent_noagbp(args);
3215 			break;
3216 		}
3217 		args->agbno = XFS_FSB_TO_AGBNO(mp, args->fsbno);
3218 		if ((error = xfs_alloc_ag_vextent(args)))
3219 			goto error0;
3220 		break;
3221 	case XFS_ALLOCTYPE_START_BNO:
3222 		/*
3223 		 * Try near allocation first, then anywhere-in-ag after
3224 		 * the first a.g. fails.
3225 		 */
3226 		if ((args->datatype & XFS_ALLOC_INITIAL_USER_DATA) &&
3227 		    xfs_is_inode32(mp)) {
3228 			args->fsbno = XFS_AGB_TO_FSB(mp,
3229 					((mp->m_agfrotor / rotorstep) %
3230 					mp->m_sb.sb_agcount), 0);
3231 			bump_rotor = 1;
3232 		}
3233 		args->agbno = XFS_FSB_TO_AGBNO(mp, args->fsbno);
3234 		args->type = XFS_ALLOCTYPE_NEAR_BNO;
3235 		fallthrough;
3236 	case XFS_ALLOCTYPE_FIRST_AG:
3237 		/*
3238 		 * Rotate through the allocation groups looking for a winner.
3239 		 */
3240 		if (type == XFS_ALLOCTYPE_FIRST_AG) {
3241 			/*
3242 			 * Start with allocation group given by bno.
3243 			 */
3244 			args->agno = XFS_FSB_TO_AGNO(mp, args->fsbno);
3245 			args->type = XFS_ALLOCTYPE_THIS_AG;
3246 			sagno = 0;
3247 			flags = 0;
3248 		} else {
3249 			/*
3250 			 * Start with the given allocation group.
3251 			 */
3252 			args->agno = sagno = XFS_FSB_TO_AGNO(mp, args->fsbno);
3253 			flags = XFS_ALLOC_FLAG_TRYLOCK;
3254 		}
3255 		/*
3256 		 * Loop over allocation groups twice; first time with
3257 		 * trylock set, second time without.
3258 		 */
3259 		for (;;) {
3260 			args->pag = xfs_perag_get(mp, args->agno);
3261 			error = xfs_alloc_fix_freelist(args, flags);
3262 			if (error) {
3263 				trace_xfs_alloc_vextent_nofix(args);
3264 				goto error0;
3265 			}
3266 			/*
3267 			 * If we get a buffer back then the allocation will fly.
3268 			 */
3269 			if (args->agbp) {
3270 				if ((error = xfs_alloc_ag_vextent(args)))
3271 					goto error0;
3272 				break;
3273 			}
3274 
3275 			trace_xfs_alloc_vextent_loopfailed(args);
3276 
3277 			/*
3278 			 * Didn't work, figure out the next iteration.
3279 			 */
3280 			if (args->agno == sagno &&
3281 			    type == XFS_ALLOCTYPE_START_BNO)
3282 				args->type = XFS_ALLOCTYPE_THIS_AG;
3283 			/*
3284 			* For the first allocation, we can try any AG to get
3285 			* space.  However, if we already have allocated a
3286 			* block, we don't want to try AGs whose number is below
3287 			* sagno. Otherwise, we may end up with out-of-order
3288 			* locking of AGF, which might cause deadlock.
3289 			*/
3290 			if (++(args->agno) == mp->m_sb.sb_agcount) {
3291 				if (args->tp->t_firstblock != NULLFSBLOCK)
3292 					args->agno = sagno;
3293 				else
3294 					args->agno = 0;
3295 			}
3296 			/*
3297 			 * Reached the starting a.g., must either be done
3298 			 * or switch to non-trylock mode.
3299 			 */
3300 			if (args->agno == sagno) {
3301 				if (flags == 0) {
3302 					args->agbno = NULLAGBLOCK;
3303 					trace_xfs_alloc_vextent_allfailed(args);
3304 					break;
3305 				}
3306 
3307 				flags = 0;
3308 				if (type == XFS_ALLOCTYPE_START_BNO) {
3309 					args->agbno = XFS_FSB_TO_AGBNO(mp,
3310 						args->fsbno);
3311 					args->type = XFS_ALLOCTYPE_NEAR_BNO;
3312 				}
3313 			}
3314 			xfs_perag_put(args->pag);
3315 		}
3316 		if (bump_rotor) {
3317 			if (args->agno == sagno)
3318 				mp->m_agfrotor = (mp->m_agfrotor + 1) %
3319 					(mp->m_sb.sb_agcount * rotorstep);
3320 			else
3321 				mp->m_agfrotor = (args->agno * rotorstep + 1) %
3322 					(mp->m_sb.sb_agcount * rotorstep);
3323 		}
3324 		break;
3325 	default:
3326 		ASSERT(0);
3327 		/* NOTREACHED */
3328 	}
3329 	if (args->agbno == NULLAGBLOCK)
3330 		args->fsbno = NULLFSBLOCK;
3331 	else {
3332 		args->fsbno = XFS_AGB_TO_FSB(mp, args->agno, args->agbno);
3333 #ifdef DEBUG
3334 		ASSERT(args->len >= args->minlen);
3335 		ASSERT(args->len <= args->maxlen);
3336 		ASSERT(args->agbno % args->alignment == 0);
3337 		XFS_AG_CHECK_DADDR(mp, XFS_FSB_TO_DADDR(mp, args->fsbno),
3338 			args->len);
3339 #endif
3340 
3341 	}
3342 	xfs_perag_put(args->pag);
3343 	return 0;
3344 error0:
3345 	xfs_perag_put(args->pag);
3346 	return error;
3347 }
3348 
3349 /* Ensure that the freelist is at full capacity. */
3350 int
3351 xfs_free_extent_fix_freelist(
3352 	struct xfs_trans	*tp,
3353 	struct xfs_perag	*pag,
3354 	struct xfs_buf		**agbp)
3355 {
3356 	struct xfs_alloc_arg	args;
3357 	int			error;
3358 
3359 	memset(&args, 0, sizeof(struct xfs_alloc_arg));
3360 	args.tp = tp;
3361 	args.mp = tp->t_mountp;
3362 	args.agno = pag->pag_agno;
3363 	args.pag = pag;
3364 
3365 	/*
3366 	 * validate that the block number is legal - the enables us to detect
3367 	 * and handle a silent filesystem corruption rather than crashing.
3368 	 */
3369 	if (args.agno >= args.mp->m_sb.sb_agcount)
3370 		return -EFSCORRUPTED;
3371 
3372 	error = xfs_alloc_fix_freelist(&args, XFS_ALLOC_FLAG_FREEING);
3373 	if (error)
3374 		return error;
3375 
3376 	*agbp = args.agbp;
3377 	return 0;
3378 }
3379 
3380 /*
3381  * Free an extent.
3382  * Just break up the extent address and hand off to xfs_free_ag_extent
3383  * after fixing up the freelist.
3384  */
3385 int
3386 __xfs_free_extent(
3387 	struct xfs_trans		*tp,
3388 	xfs_fsblock_t			bno,
3389 	xfs_extlen_t			len,
3390 	const struct xfs_owner_info	*oinfo,
3391 	enum xfs_ag_resv_type		type,
3392 	bool				skip_discard)
3393 {
3394 	struct xfs_mount		*mp = tp->t_mountp;
3395 	struct xfs_buf			*agbp;
3396 	xfs_agnumber_t			agno = XFS_FSB_TO_AGNO(mp, bno);
3397 	xfs_agblock_t			agbno = XFS_FSB_TO_AGBNO(mp, bno);
3398 	struct xfs_agf			*agf;
3399 	int				error;
3400 	unsigned int			busy_flags = 0;
3401 	struct xfs_perag		*pag;
3402 
3403 	ASSERT(len != 0);
3404 	ASSERT(type != XFS_AG_RESV_AGFL);
3405 
3406 	if (XFS_TEST_ERROR(false, mp,
3407 			XFS_ERRTAG_FREE_EXTENT))
3408 		return -EIO;
3409 
3410 	pag = xfs_perag_get(mp, agno);
3411 	error = xfs_free_extent_fix_freelist(tp, pag, &agbp);
3412 	if (error)
3413 		goto err;
3414 	agf = agbp->b_addr;
3415 
3416 	if (XFS_IS_CORRUPT(mp, agbno >= mp->m_sb.sb_agblocks)) {
3417 		error = -EFSCORRUPTED;
3418 		goto err_release;
3419 	}
3420 
3421 	/* validate the extent size is legal now we have the agf locked */
3422 	if (XFS_IS_CORRUPT(mp, agbno + len > be32_to_cpu(agf->agf_length))) {
3423 		error = -EFSCORRUPTED;
3424 		goto err_release;
3425 	}
3426 
3427 	error = xfs_free_ag_extent(tp, agbp, agno, agbno, len, oinfo, type);
3428 	if (error)
3429 		goto err_release;
3430 
3431 	if (skip_discard)
3432 		busy_flags |= XFS_EXTENT_BUSY_SKIP_DISCARD;
3433 	xfs_extent_busy_insert(tp, pag, agbno, len, busy_flags);
3434 	xfs_perag_put(pag);
3435 	return 0;
3436 
3437 err_release:
3438 	xfs_trans_brelse(tp, agbp);
3439 err:
3440 	xfs_perag_put(pag);
3441 	return error;
3442 }
3443 
3444 struct xfs_alloc_query_range_info {
3445 	xfs_alloc_query_range_fn	fn;
3446 	void				*priv;
3447 };
3448 
3449 /* Format btree record and pass to our callback. */
3450 STATIC int
3451 xfs_alloc_query_range_helper(
3452 	struct xfs_btree_cur		*cur,
3453 	const union xfs_btree_rec	*rec,
3454 	void				*priv)
3455 {
3456 	struct xfs_alloc_query_range_info	*query = priv;
3457 	struct xfs_alloc_rec_incore		irec;
3458 
3459 	irec.ar_startblock = be32_to_cpu(rec->alloc.ar_startblock);
3460 	irec.ar_blockcount = be32_to_cpu(rec->alloc.ar_blockcount);
3461 	return query->fn(cur, &irec, query->priv);
3462 }
3463 
3464 /* Find all free space within a given range of blocks. */
3465 int
3466 xfs_alloc_query_range(
3467 	struct xfs_btree_cur			*cur,
3468 	const struct xfs_alloc_rec_incore	*low_rec,
3469 	const struct xfs_alloc_rec_incore	*high_rec,
3470 	xfs_alloc_query_range_fn		fn,
3471 	void					*priv)
3472 {
3473 	union xfs_btree_irec			low_brec;
3474 	union xfs_btree_irec			high_brec;
3475 	struct xfs_alloc_query_range_info	query;
3476 
3477 	ASSERT(cur->bc_btnum == XFS_BTNUM_BNO);
3478 	low_brec.a = *low_rec;
3479 	high_brec.a = *high_rec;
3480 	query.priv = priv;
3481 	query.fn = fn;
3482 	return xfs_btree_query_range(cur, &low_brec, &high_brec,
3483 			xfs_alloc_query_range_helper, &query);
3484 }
3485 
3486 /* Find all free space records. */
3487 int
3488 xfs_alloc_query_all(
3489 	struct xfs_btree_cur			*cur,
3490 	xfs_alloc_query_range_fn		fn,
3491 	void					*priv)
3492 {
3493 	struct xfs_alloc_query_range_info	query;
3494 
3495 	ASSERT(cur->bc_btnum == XFS_BTNUM_BNO);
3496 	query.priv = priv;
3497 	query.fn = fn;
3498 	return xfs_btree_query_all(cur, xfs_alloc_query_range_helper, &query);
3499 }
3500 
3501 /* Is there a record covering a given extent? */
3502 int
3503 xfs_alloc_has_record(
3504 	struct xfs_btree_cur	*cur,
3505 	xfs_agblock_t		bno,
3506 	xfs_extlen_t		len,
3507 	bool			*exists)
3508 {
3509 	union xfs_btree_irec	low;
3510 	union xfs_btree_irec	high;
3511 
3512 	memset(&low, 0, sizeof(low));
3513 	low.a.ar_startblock = bno;
3514 	memset(&high, 0xFF, sizeof(high));
3515 	high.a.ar_startblock = bno + len - 1;
3516 
3517 	return xfs_btree_has_record(cur, &low, &high, exists);
3518 }
3519 
3520 /*
3521  * Walk all the blocks in the AGFL.  The @walk_fn can return any negative
3522  * error code or XFS_ITER_*.
3523  */
3524 int
3525 xfs_agfl_walk(
3526 	struct xfs_mount	*mp,
3527 	struct xfs_agf		*agf,
3528 	struct xfs_buf		*agflbp,
3529 	xfs_agfl_walk_fn	walk_fn,
3530 	void			*priv)
3531 {
3532 	__be32			*agfl_bno;
3533 	unsigned int		i;
3534 	int			error;
3535 
3536 	agfl_bno = xfs_buf_to_agfl_bno(agflbp);
3537 	i = be32_to_cpu(agf->agf_flfirst);
3538 
3539 	/* Nothing to walk in an empty AGFL. */
3540 	if (agf->agf_flcount == cpu_to_be32(0))
3541 		return 0;
3542 
3543 	/* Otherwise, walk from first to last, wrapping as needed. */
3544 	for (;;) {
3545 		error = walk_fn(mp, be32_to_cpu(agfl_bno[i]), priv);
3546 		if (error)
3547 			return error;
3548 		if (i == be32_to_cpu(agf->agf_fllast))
3549 			break;
3550 		if (++i == xfs_agfl_size(mp))
3551 			i = 0;
3552 	}
3553 
3554 	return 0;
3555 }
3556 
3557 int __init
3558 xfs_extfree_intent_init_cache(void)
3559 {
3560 	xfs_extfree_item_cache = kmem_cache_create("xfs_extfree_intent",
3561 			sizeof(struct xfs_extent_free_item),
3562 			0, 0, NULL);
3563 
3564 	return xfs_extfree_item_cache != NULL ? 0 : -ENOMEM;
3565 }
3566 
3567 void
3568 xfs_extfree_intent_destroy_cache(void)
3569 {
3570 	kmem_cache_destroy(xfs_extfree_item_cache);
3571 	xfs_extfree_item_cache = NULL;
3572 }
3573