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