Lines Matching +full:compute +full:-
1 // SPDX-License-Identifier: GPL-2.0
3 * Copyright (c) 2000-2005 Silicon Graphics, Inc.
67 ip = issum ? mp->m_rsumip : mp->m_rbmip; in xfs_rtbuf_get()
74 return -EFSCORRUPTED; in xfs_rtbuf_get()
77 error = xfs_trans_read_buf(mp, tp, mp->m_ddev_targp, in xfs_rtbuf_get()
79 mp->m_bsize, 0, &bp, &xfs_rtbuf_ops); in xfs_rtbuf_get()
116 * Compute and read in starting bitmap block for starting block. in xfs_rtfind_back()
123 bufp = bp->b_addr; in xfs_rtfind_back()
129 bit = (int)(start & (XFS_NBWORD - 1)); in xfs_rtfind_back()
130 len = start - limit + 1; in xfs_rtfind_back()
132 * Compute match value, based on the bit at start: if 1 (free) in xfs_rtfind_back()
133 * then all-ones, else all-zeroes. in xfs_rtfind_back()
135 want = (*b & ((xfs_rtword_t)1 << bit)) ? -1 : 0; in xfs_rtfind_back()
137 * If the starting position is not word-aligned, deal with the in xfs_rtfind_back()
140 if (bit < XFS_NBWORD - 1) { in xfs_rtfind_back()
145 firstbit = XFS_RTMAX((xfs_srtblock_t)(bit - len + 1), 0); in xfs_rtfind_back()
146 mask = (((xfs_rtword_t)1 << (bit - firstbit + 1)) - 1) << in xfs_rtfind_back()
157 i = bit - XFS_RTHIBIT(wdiff); in xfs_rtfind_back()
158 *rtblock = start - i + 1; in xfs_rtfind_back()
161 i = bit - firstbit + 1; in xfs_rtfind_back()
166 if (--word == -1 && i < len) { in xfs_rtfind_back()
171 error = xfs_rtbuf_get(mp, tp, --block, 0, &bp); in xfs_rtfind_back()
175 bufp = bp->b_addr; in xfs_rtfind_back()
182 b--; in xfs_rtfind_back()
194 while (len - i >= XFS_NBWORD) { in xfs_rtfind_back()
196 * Compute difference between actual and desired value. in xfs_rtfind_back()
203 i += XFS_NBWORD - 1 - XFS_RTHIBIT(wdiff); in xfs_rtfind_back()
204 *rtblock = start - i + 1; in xfs_rtfind_back()
212 if (--word == -1 && i < len) { in xfs_rtfind_back()
217 error = xfs_rtbuf_get(mp, tp, --block, 0, &bp); in xfs_rtfind_back()
221 bufp = bp->b_addr; in xfs_rtfind_back()
228 b--; in xfs_rtfind_back()
235 if (len - i) { in xfs_rtfind_back()
240 firstbit = XFS_NBWORD - (len - i); in xfs_rtfind_back()
241 mask = (((xfs_rtword_t)1 << (len - i)) - 1) << firstbit; in xfs_rtfind_back()
243 * Compute difference between actual and desired value. in xfs_rtfind_back()
250 i += XFS_NBWORD - 1 - XFS_RTHIBIT(wdiff); in xfs_rtfind_back()
251 *rtblock = start - i + 1; in xfs_rtfind_back()
260 *rtblock = start - i + 1; in xfs_rtfind_back()
291 * Compute and read in starting bitmap block for starting block. in xfs_rtfind_forw()
298 bufp = bp->b_addr; in xfs_rtfind_forw()
304 bit = (int)(start & (XFS_NBWORD - 1)); in xfs_rtfind_forw()
305 len = limit - start + 1; in xfs_rtfind_forw()
307 * Compute match value, based on the bit at start: if 1 (free) in xfs_rtfind_forw()
308 * then all-ones, else all-zeroes. in xfs_rtfind_forw()
310 want = (*b & ((xfs_rtword_t)1 << bit)) ? -1 : 0; in xfs_rtfind_forw()
312 * If the starting position is not word-aligned, deal with the in xfs_rtfind_forw()
321 mask = (((xfs_rtword_t)1 << (lastbit - bit)) - 1) << bit; in xfs_rtfind_forw()
331 i = XFS_RTLOBIT(wdiff) - bit; in xfs_rtfind_forw()
332 *rtblock = start + i - 1; in xfs_rtfind_forw()
335 i = lastbit - bit; in xfs_rtfind_forw()
349 b = bufp = bp->b_addr; in xfs_rtfind_forw()
367 while (len - i >= XFS_NBWORD) { in xfs_rtfind_forw()
369 * Compute difference between actual and desired value. in xfs_rtfind_forw()
377 *rtblock = start + i - 1; in xfs_rtfind_forw()
394 b = bufp = bp->b_addr; in xfs_rtfind_forw()
407 if ((lastbit = len - i)) { in xfs_rtfind_forw()
411 mask = ((xfs_rtword_t)1 << lastbit) - 1; in xfs_rtfind_forw()
413 * Compute difference between actual and desired value. in xfs_rtfind_forw()
421 *rtblock = start + i - 1; in xfs_rtfind_forw()
430 *rtblock = start + i - 1; in xfs_rtfind_forw()
461 * Compute entry number in the summary file. in xfs_rtmodify_summary_int()
465 * Compute the block number in the summary file. in xfs_rtmodify_summary_int()
497 uint first = (uint)((char *)sp - (char *)bp->b_addr); in xfs_rtmodify_summary_int()
500 if (mp->m_rsum_cache) { in xfs_rtmodify_summary_int()
501 if (*sp == 0 && log == mp->m_rsum_cache[bbno]) in xfs_rtmodify_summary_int()
502 mp->m_rsum_cache[bbno]++; in xfs_rtmodify_summary_int()
503 if (*sp != 0 && log < mp->m_rsum_cache[bbno]) in xfs_rtmodify_summary_int()
504 mp->m_rsum_cache[bbno] = log; in xfs_rtmodify_summary_int()
506 xfs_trans_log_buf(tp, bp, first, first + sizeof(*sp) - 1); in xfs_rtmodify_summary_int()
552 * Compute starting bitmap block number. in xfs_rtmodify_range()
562 bufp = bp->b_addr; in xfs_rtmodify_range()
564 * Compute the starting word's address, and starting bit. in xfs_rtmodify_range()
568 bit = (int)(start & (XFS_NBWORD - 1)); in xfs_rtmodify_range()
572 val = -val; in xfs_rtmodify_range()
579 * Compute first bit not changed and mask of relevant bits. in xfs_rtmodify_range()
582 mask = (((xfs_rtword_t)1 << (lastbit - bit)) - 1) << bit; in xfs_rtmodify_range()
590 i = lastbit - bit; in xfs_rtmodify_range()
601 (uint)((char *)first - (char *)bufp), in xfs_rtmodify_range()
602 (uint)((char *)b - (char *)bufp)); in xfs_rtmodify_range()
607 first = b = bufp = bp->b_addr; in xfs_rtmodify_range()
625 while (len - i >= XFS_NBWORD) { in xfs_rtmodify_range()
641 (uint)((char *)first - (char *)bufp), in xfs_rtmodify_range()
642 (uint)((char *)b - (char *)bufp)); in xfs_rtmodify_range()
647 first = b = bufp = bp->b_addr; in xfs_rtmodify_range()
660 if ((lastbit = len - i)) { in xfs_rtmodify_range()
662 * Compute a mask of relevant bits. in xfs_rtmodify_range()
664 mask = ((xfs_rtword_t)1 << lastbit) - 1; in xfs_rtmodify_range()
678 xfs_trans_log_buf(tp, bp, (uint)((char *)first - (char *)bufp), in xfs_rtmodify_range()
679 (uint)((char *)b - (char *)bufp - 1)); in xfs_rtmodify_range()
701 end = start + len - 1; in xfs_rtfree_range()
721 error = xfs_rtfind_forw(mp, tp, end, mp->m_sb.sb_rextents - 1, in xfs_rtfree_range()
731 XFS_RTBLOCKLOG(start - preblock), in xfs_rtfree_range()
732 XFS_BITTOBLOCK(mp, preblock), -1, rbpp, rsb); in xfs_rtfree_range()
743 XFS_RTBLOCKLOG(postblock - end), in xfs_rtfree_range()
744 XFS_BITTOBLOCK(mp, end + 1), -1, rbpp, rsb); in xfs_rtfree_range()
754 XFS_RTBLOCKLOG(postblock + 1 - preblock), in xfs_rtfree_range()
786 * Compute starting bitmap block number in xfs_rtcheck_range()
796 bufp = bp->b_addr; in xfs_rtcheck_range()
798 * Compute the starting word's address, and starting bit. in xfs_rtcheck_range()
802 bit = (int)(start & (XFS_NBWORD - 1)); in xfs_rtcheck_range()
806 val = -val; in xfs_rtcheck_range()
813 * Compute first bit not examined. in xfs_rtcheck_range()
819 mask = (((xfs_rtword_t)1 << (lastbit - bit)) - 1) << bit; in xfs_rtcheck_range()
821 * Compute difference between actual and desired value. in xfs_rtcheck_range()
825 * Different, compute first wrong bit and return. in xfs_rtcheck_range()
828 i = XFS_RTLOBIT(wdiff) - bit; in xfs_rtcheck_range()
833 i = lastbit - bit; in xfs_rtcheck_range()
847 b = bufp = bp->b_addr; in xfs_rtcheck_range()
865 while (len - i >= XFS_NBWORD) { in xfs_rtcheck_range()
867 * Compute difference between actual and desired value. in xfs_rtcheck_range()
871 * Different, compute first wrong bit and return. in xfs_rtcheck_range()
893 b = bufp = bp->b_addr; in xfs_rtcheck_range()
906 if ((lastbit = len - i)) { in xfs_rtcheck_range()
910 mask = ((xfs_rtword_t)1 << lastbit) - 1; in xfs_rtcheck_range()
912 * Compute difference between actual and desired value. in xfs_rtcheck_range()
916 * Different, compute first wrong bit and return. in xfs_rtcheck_range()
974 mp = tp->t_mountp; in xfs_rtfree_extent()
976 ASSERT(mp->m_rbmip->i_itemp != NULL); in xfs_rtfree_extent()
977 ASSERT(xfs_isilocked(mp->m_rbmip, XFS_ILOCK_EXCL)); in xfs_rtfree_extent()
998 if (tp->t_frextents_delta + mp->m_sb.sb_frextents == in xfs_rtfree_extent()
999 mp->m_sb.sb_rextents) { in xfs_rtfree_extent()
1000 if (!(mp->m_rbmip->i_diflags & XFS_DIFLAG_NEWRTBM)) in xfs_rtfree_extent()
1001 mp->m_rbmip->i_diflags |= XFS_DIFLAG_NEWRTBM; in xfs_rtfree_extent()
1002 *(uint64_t *)&VFS_I(mp->m_rbmip)->i_atime = 0; in xfs_rtfree_extent()
1003 xfs_trans_log_inode(tp, mp->m_rbmip, XFS_ILOG_CORE); in xfs_rtfree_extent()
1025 if (low_rec->ar_startext > high_rec->ar_startext) in xfs_rtalloc_query_range()
1026 return -EINVAL; in xfs_rtalloc_query_range()
1027 if (low_rec->ar_startext >= mp->m_sb.sb_rextents || in xfs_rtalloc_query_range()
1028 low_rec->ar_startext == high_rec->ar_startext) in xfs_rtalloc_query_range()
1031 high_key = min(high_rec->ar_startext, mp->m_sb.sb_rextents - 1); in xfs_rtalloc_query_range()
1034 rtstart = low_rec->ar_startext; in xfs_rtalloc_query_range()
1049 rec.ar_extcount = rtend - rtstart + 1; in xfs_rtalloc_query_range()
1073 keys[1].ar_startext = mp->m_sb.sb_rextents - 1; in xfs_rtalloc_query_all()