Lines Matching +full:compute +full:-
1 // SPDX-License-Identifier: GPL-2.0
3 * Copyright (c) 2000-2005 Silicon Graphics, Inc.
55 if (args->rbmbp) { in xfs_rtbuf_cache_relse()
56 xfs_trans_brelse(args->tp, args->rbmbp); in xfs_rtbuf_cache_relse()
57 args->rbmbp = NULL; in xfs_rtbuf_cache_relse()
58 args->rbmoff = NULLFILEOFF; in xfs_rtbuf_cache_relse()
60 if (args->sumbp) { in xfs_rtbuf_cache_relse()
61 xfs_trans_brelse(args->tp, args->sumbp); in xfs_rtbuf_cache_relse()
62 args->sumbp = NULL; in xfs_rtbuf_cache_relse()
63 args->sumoff = NULLFILEOFF; in xfs_rtbuf_cache_relse()
77 struct xfs_mount *mp = args->mp; in xfs_rtbuf_get()
88 cbpp = &args->sumbp; in xfs_rtbuf_get()
89 coffp = &args->sumoff; in xfs_rtbuf_get()
90 ip = mp->m_rsumip; in xfs_rtbuf_get()
93 cbpp = &args->rbmbp; in xfs_rtbuf_get()
94 coffp = &args->rbmoff; in xfs_rtbuf_get()
95 ip = mp->m_rbmip; in xfs_rtbuf_get()
110 xfs_trans_brelse(args->tp, *cbpp); in xfs_rtbuf_get()
119 return -EFSCORRUPTED; in xfs_rtbuf_get()
122 error = xfs_trans_read_buf(mp, args->tp, mp->m_ddev_targp, in xfs_rtbuf_get()
124 mp->m_bsize, 0, &bp, &xfs_rtbuf_ops); in xfs_rtbuf_get()
128 xfs_trans_buf_set_type(args->tp, bp, type); in xfs_rtbuf_get()
145 struct xfs_mount *mp = args->mp; in xfs_rtfind_back()
159 * Compute and read in starting bitmap block for starting block. in xfs_rtfind_back()
170 bit = (int)(start & (XFS_NBWORD - 1)); in xfs_rtfind_back()
171 len = start - limit + 1; in xfs_rtfind_back()
173 * Compute match value, based on the bit at start: if 1 (free) in xfs_rtfind_back()
174 * then all-ones, else all-zeroes. in xfs_rtfind_back()
177 want = (incore & ((xfs_rtword_t)1 << bit)) ? -1 : 0; in xfs_rtfind_back()
179 * If the starting position is not word-aligned, deal with the in xfs_rtfind_back()
182 if (bit < XFS_NBWORD - 1) { in xfs_rtfind_back()
187 firstbit = max_t(xfs_srtblock_t, bit - len + 1, 0); in xfs_rtfind_back()
188 mask = (((xfs_rtword_t)1 << (bit - firstbit + 1)) - 1) << in xfs_rtfind_back()
198 i = bit - xfs_highbit32(wdiff); in xfs_rtfind_back()
199 *rtx = start - i + 1; in xfs_rtfind_back()
202 i = bit - firstbit + 1; in xfs_rtfind_back()
207 if (--word == -1 && i < len) { in xfs_rtfind_back()
211 error = xfs_rtbitmap_read_buf(args, --block); in xfs_rtfind_back()
215 word = mp->m_blockwsize - 1; in xfs_rtfind_back()
227 while (len - i >= XFS_NBWORD) { in xfs_rtfind_back()
229 * Compute difference between actual and desired value. in xfs_rtfind_back()
236 i += XFS_NBWORD - 1 - xfs_highbit32(wdiff); in xfs_rtfind_back()
237 *rtx = start - i + 1; in xfs_rtfind_back()
245 if (--word == -1 && i < len) { in xfs_rtfind_back()
249 error = xfs_rtbitmap_read_buf(args, --block); in xfs_rtfind_back()
253 word = mp->m_blockwsize - 1; in xfs_rtfind_back()
260 if (len - i) { in xfs_rtfind_back()
265 firstbit = XFS_NBWORD - (len - i); in xfs_rtfind_back()
266 mask = (((xfs_rtword_t)1 << (len - i)) - 1) << firstbit; in xfs_rtfind_back()
268 * Compute difference between actual and desired value. in xfs_rtfind_back()
275 i += XFS_NBWORD - 1 - xfs_highbit32(wdiff); in xfs_rtfind_back()
276 *rtx = start - i + 1; in xfs_rtfind_back()
284 *rtx = start - i + 1; in xfs_rtfind_back()
299 struct xfs_mount *mp = args->mp; in xfs_rtfind_forw()
313 * Compute and read in starting bitmap block for starting block. in xfs_rtfind_forw()
324 bit = (int)(start & (XFS_NBWORD - 1)); in xfs_rtfind_forw()
325 len = limit - start + 1; in xfs_rtfind_forw()
327 * Compute match value, based on the bit at start: if 1 (free) in xfs_rtfind_forw()
328 * then all-ones, else all-zeroes. in xfs_rtfind_forw()
331 want = (incore & ((xfs_rtword_t)1 << bit)) ? -1 : 0; in xfs_rtfind_forw()
333 * If the starting position is not word-aligned, deal with the in xfs_rtfind_forw()
342 mask = (((xfs_rtword_t)1 << (lastbit - bit)) - 1) << bit; in xfs_rtfind_forw()
351 i = xfs_lowbit32(wdiff) - bit; in xfs_rtfind_forw()
352 *rtx = start + i - 1; in xfs_rtfind_forw()
355 i = lastbit - bit; in xfs_rtfind_forw()
360 if (++word == mp->m_blockwsize && i < len) { in xfs_rtfind_forw()
380 while (len - i >= XFS_NBWORD) { in xfs_rtfind_forw()
382 * Compute difference between actual and desired value. in xfs_rtfind_forw()
390 *rtx = start + i - 1; in xfs_rtfind_forw()
398 if (++word == mp->m_blockwsize && i < len) { in xfs_rtfind_forw()
413 if ((lastbit = len - i)) { in xfs_rtfind_forw()
417 mask = ((xfs_rtword_t)1 << lastbit) - 1; in xfs_rtfind_forw()
419 * Compute difference between actual and desired value. in xfs_rtfind_forw()
427 *rtx = start + i - 1; in xfs_rtfind_forw()
435 *rtx = start + i - 1; in xfs_rtfind_forw()
445 struct xfs_buf *bp = args->sumbp; in xfs_trans_log_rtsummary()
448 first = (void *)xfs_rsumblock_infoptr(args, infoword) - bp->b_addr; in xfs_trans_log_rtsummary()
449 last = first + sizeof(xfs_suminfo_t) - 1; in xfs_trans_log_rtsummary()
451 xfs_trans_log_buf(args->tp, bp, first, last); in xfs_trans_log_rtsummary()
465 struct xfs_mount *mp = args->mp; in xfs_rtmodify_summary()
478 if (mp->m_rsum_cache) { in xfs_rtmodify_summary()
479 if (val == 0 && log + 1 == mp->m_rsum_cache[bbno]) in xfs_rtmodify_summary()
480 mp->m_rsum_cache[bbno] = log; in xfs_rtmodify_summary()
481 if (val != 0 && log >= mp->m_rsum_cache[bbno]) in xfs_rtmodify_summary()
482 mp->m_rsum_cache[bbno] = log + 1; in xfs_rtmodify_summary()
500 struct xfs_mount *mp = args->mp; in xfs_rtget_summary()
517 struct xfs_buf *bp = args->rbmbp; in xfs_trans_log_rtbitmap()
520 first = (void *)xfs_rbmblock_wordptr(args, from) - bp->b_addr; in xfs_trans_log_rtbitmap()
521 last = ((void *)xfs_rbmblock_wordptr(args, next) - 1) - bp->b_addr; in xfs_trans_log_rtbitmap()
523 xfs_trans_log_buf(args->tp, bp, first, last); in xfs_trans_log_rtbitmap()
537 struct xfs_mount *mp = args->mp; in xfs_rtmodify_range()
549 * Compute starting bitmap block number. in xfs_rtmodify_range()
560 * Compute the starting word's address, and starting bit. in xfs_rtmodify_range()
563 bit = (int)(start & (XFS_NBWORD - 1)); in xfs_rtmodify_range()
567 val = -val; in xfs_rtmodify_range()
574 * Compute first bit not changed and mask of relevant bits. in xfs_rtmodify_range()
577 mask = (((xfs_rtword_t)1 << (lastbit - bit)) - 1) << bit; in xfs_rtmodify_range()
587 i = lastbit - bit; in xfs_rtmodify_range()
592 if (++word == mp->m_blockwsize && i < len) { in xfs_rtmodify_range()
614 while (len - i >= XFS_NBWORD) { in xfs_rtmodify_range()
624 if (++word == mp->m_blockwsize && i < len) { in xfs_rtmodify_range()
641 if ((lastbit = len - i)) { in xfs_rtmodify_range()
643 * Compute a mask of relevant bits. in xfs_rtmodify_range()
645 mask = ((xfs_rtword_t)1 << lastbit) - 1; in xfs_rtmodify_range()
675 struct xfs_mount *mp = args->mp; in xfs_rtfree_range()
681 end = start + len - 1; in xfs_rtfree_range()
701 error = xfs_rtfind_forw(args, end, mp->m_sb.sb_rextents - 1, in xfs_rtfree_range()
711 xfs_highbit64(start - preblock), in xfs_rtfree_range()
712 xfs_rtx_to_rbmblock(mp, preblock), -1); in xfs_rtfree_range()
723 xfs_highbit64(postblock - end), in xfs_rtfree_range()
724 xfs_rtx_to_rbmblock(mp, end + 1), -1); in xfs_rtfree_range()
734 xfs_highbit64(postblock + 1 - preblock), in xfs_rtfree_range()
751 struct xfs_mount *mp = args->mp; in xfs_rtcheck_range()
763 * Compute starting bitmap block number in xfs_rtcheck_range()
774 * Compute the starting word's address, and starting bit. in xfs_rtcheck_range()
777 bit = (int)(start & (XFS_NBWORD - 1)); in xfs_rtcheck_range()
781 val = -val; in xfs_rtcheck_range()
788 * Compute first bit not examined. in xfs_rtcheck_range()
794 mask = (((xfs_rtword_t)1 << (lastbit - bit)) - 1) << bit; in xfs_rtcheck_range()
796 * Compute difference between actual and desired value. in xfs_rtcheck_range()
801 * Different, compute first wrong bit and return. in xfs_rtcheck_range()
803 i = xfs_lowbit32(wdiff) - bit; in xfs_rtcheck_range()
808 i = lastbit - bit; in xfs_rtcheck_range()
813 if (++word == mp->m_blockwsize && i < len) { in xfs_rtcheck_range()
833 while (len - i >= XFS_NBWORD) { in xfs_rtcheck_range()
835 * Compute difference between actual and desired value. in xfs_rtcheck_range()
840 * Different, compute first wrong bit and return. in xfs_rtcheck_range()
852 if (++word == mp->m_blockwsize && i < len) { in xfs_rtcheck_range()
867 if ((lastbit = len - i)) { in xfs_rtcheck_range()
871 mask = ((xfs_rtword_t)1 << lastbit) - 1; in xfs_rtcheck_range()
873 * Compute difference between actual and desired value. in xfs_rtcheck_range()
878 * Different, compute first wrong bit and return. in xfs_rtcheck_range()
928 struct xfs_mount *mp = tp->t_mountp; in xfs_rtfree_extent()
936 ASSERT(mp->m_rbmip->i_itemp != NULL); in xfs_rtfree_extent()
937 ASSERT(xfs_isilocked(mp->m_rbmip, XFS_ILOCK_EXCL)); in xfs_rtfree_extent()
958 if (tp->t_frextents_delta + mp->m_sb.sb_frextents == in xfs_rtfree_extent()
959 mp->m_sb.sb_rextents) { in xfs_rtfree_extent()
960 if (!(mp->m_rbmip->i_diflags & XFS_DIFLAG_NEWRTBM)) in xfs_rtfree_extent()
961 mp->m_rbmip->i_diflags |= XFS_DIFLAG_NEWRTBM; in xfs_rtfree_extent()
963 atime = inode_get_atime(VFS_I(mp->m_rbmip)); in xfs_rtfree_extent()
965 inode_set_atime_to_ts(VFS_I(mp->m_rbmip), atime); in xfs_rtfree_extent()
966 xfs_trans_log_inode(tp, mp->m_rbmip, XFS_ILOG_CORE); in xfs_rtfree_extent()
985 struct xfs_mount *mp = tp->t_mountp; in xfs_rtfree_blocks()
995 return -EIO; in xfs_rtfree_blocks()
1001 return -EIO; in xfs_rtfree_blocks()
1028 if (low_rec->ar_startext > high_rec->ar_startext) in xfs_rtalloc_query_range()
1029 return -EINVAL; in xfs_rtalloc_query_range()
1030 if (low_rec->ar_startext >= mp->m_sb.sb_rextents || in xfs_rtalloc_query_range()
1031 low_rec->ar_startext == high_rec->ar_startext) in xfs_rtalloc_query_range()
1034 high_key = min(high_rec->ar_startext, mp->m_sb.sb_rextents - 1); in xfs_rtalloc_query_range()
1037 rtstart = low_rec->ar_startext; in xfs_rtalloc_query_range()
1052 rec.ar_extcount = rtend - rtstart + 1; in xfs_rtalloc_query_range()
1077 keys[1].ar_startext = mp->m_sb.sb_rextents - 1; in xfs_rtalloc_query_all()
1110 * Compute the number of rtbitmap blocks needed to track the given number of rt
1118 return howmany_64(rtextents, NBBY * mp->m_sb.sb_blocksize); in xfs_rtbitmap_blockcount()
1122 * Compute the number of rtbitmap words needed to populate every block of a
1136 /* Compute the number of rtsummary blocks needed to track the given rt space. */
1150 * Compute the number of rtsummary info words needed to populate every block of