Lines Matching +full:block +full:- +full:fetch
4 /*-
5 * SPDX-License-Identifier: BSD-3-Clause
60 * the inode and the logical block number in a file.
68 if (ip->i_fs->fs_magic == FS_UFS2_MAGIC) in ffs_balloc()
82 struct fs *fs = ip->i_fs; in ffs_balloc_ufs1()
97 assert(size <= fs->fs_bsize); in ffs_balloc_ufs1()
102 * If the next write will extend the file into a new block, in ffs_balloc_ufs1()
104 * this fragment has to be extended to be a full block. in ffs_balloc_ufs1()
107 lastlbn = lblkno(fs, ip->i_ffs1_size); in ffs_balloc_ufs1()
111 if (osize < fs->fs_bsize && osize > 0) { in ffs_balloc_ufs1()
122 nb = ufs_rw32(ip->i_ffs1_db[lbn], needswap); in ffs_balloc_ufs1()
123 if (nb != 0 && ip->i_ffs1_size >= in ffs_balloc_ufs1()
127 * The block is an already-allocated direct block in ffs_balloc_ufs1()
128 * and the file already extends past this block, in ffs_balloc_ufs1()
129 * thus this must be a whole block. in ffs_balloc_ufs1()
130 * Just read the block (if requested). in ffs_balloc_ufs1()
134 error = bread((void *)ip->i_devvp, lbn, in ffs_balloc_ufs1()
135 fs->fs_bsize, NULL, bpp); in ffs_balloc_ufs1()
149 osize = fragroundup(fs, blkoff(fs, ip->i_ffs1_size)); in ffs_balloc_ufs1()
154 * The existing block is already in ffs_balloc_ufs1()
156 * Just read the block (if requested). in ffs_balloc_ufs1()
160 error = bread((void *)ip->i_devvp, lbn, in ffs_balloc_ufs1()
175 * the block was not previously allocated, in ffs_balloc_ufs1()
176 * allocate a new block or fragment. in ffs_balloc_ufs1()
179 if (ip->i_ffs1_size < (uint64_t)lblktosize(fs, lbn + 1)) in ffs_balloc_ufs1()
182 nsize = fs->fs_bsize; in ffs_balloc_ufs1()
185 &ip->i_ffs1_db[0]), in ffs_balloc_ufs1()
190 bp = getblk((void *)ip->i_devvp, lbn, nsize, in ffs_balloc_ufs1()
192 bp->b_blkno = fsbtodb(fs, newb); in ffs_balloc_ufs1()
197 ip->i_ffs1_db[lbn] = ufs_rw32((int32_t)newb, needswap); in ffs_balloc_ufs1()
210 warnx("ffs_balloc: ufs_getlbns returned indirect block"); in ffs_balloc_ufs1()
215 * Fetch the first indirect block allocating if necessary. in ffs_balloc_ufs1()
218 --num; in ffs_balloc_ufs1()
219 nb = ufs_rw32(ip->i_ffs1_ib[indirs[0].in_off], needswap); in ffs_balloc_ufs1()
224 error = ffs_alloc(ip, lbn, pref, (int)fs->fs_bsize, &newb); in ffs_balloc_ufs1()
229 bp = getblk((void *)ip->i_devvp, indirs[1].in_lbn, in ffs_balloc_ufs1()
230 fs->fs_bsize, 0, 0, 0); in ffs_balloc_ufs1()
231 bp->b_blkno = fsbtodb(fs, nb); in ffs_balloc_ufs1()
239 allocib = &ip->i_ffs1_ib[indirs[0].in_off]; in ffs_balloc_ufs1()
244 * Fetch through the indirect blocks, allocating as necessary. in ffs_balloc_ufs1()
248 error = bread((void *)ip->i_devvp, indirs[i].in_lbn, in ffs_balloc_ufs1()
249 fs->fs_bsize, NULL, &bp); in ffs_balloc_ufs1()
254 bap = (int32_t *)bp->b_data; in ffs_balloc_ufs1()
265 error = ffs_alloc(ip, lbn, pref, (int)fs->fs_bsize, &newb); in ffs_balloc_ufs1()
272 nbp = getblk((void *)ip->i_devvp, indirs[i].in_lbn, in ffs_balloc_ufs1()
273 fs->fs_bsize, 0, 0, 0); in ffs_balloc_ufs1()
274 nbp->b_blkno = fsbtodb(fs, nb); in ffs_balloc_ufs1()
285 bap[indirs[i - 1].in_off] = ufs_rw32(nb, needswap); in ffs_balloc_ufs1()
291 * Get the data block, allocating if necessary. in ffs_balloc_ufs1()
296 error = ffs_alloc(ip, lbn, pref, (int)fs->fs_bsize, &newb); in ffs_balloc_ufs1()
304 nbp = getblk((void *)ip->i_devvp, lbn, fs->fs_bsize, in ffs_balloc_ufs1()
306 nbp->b_blkno = fsbtodb(fs, nb); in ffs_balloc_ufs1()
321 error = bread((void *)ip->i_devvp, lbn, (int)fs->fs_bsize, in ffs_balloc_ufs1()
339 struct fs *fs = ip->i_fs; in ffs_balloc_ufs2()
354 assert(size <= fs->fs_bsize); in ffs_balloc_ufs2()
359 * If the next write will extend the file into a new block, in ffs_balloc_ufs2()
361 * this fragment has to be extended to be a full block. in ffs_balloc_ufs2()
364 lastlbn = lblkno(fs, ip->i_ffs2_size); in ffs_balloc_ufs2()
368 if (osize < fs->fs_bsize && osize > 0) { in ffs_balloc_ufs2()
379 nb = ufs_rw64(ip->i_ffs2_db[lbn], needswap); in ffs_balloc_ufs2()
380 if (nb != 0 && ip->i_ffs2_size >= in ffs_balloc_ufs2()
384 * The block is an already-allocated direct block in ffs_balloc_ufs2()
385 * and the file already extends past this block, in ffs_balloc_ufs2()
386 * thus this must be a whole block. in ffs_balloc_ufs2()
387 * Just read the block (if requested). in ffs_balloc_ufs2()
391 error = bread((void *)ip->i_devvp, lbn, in ffs_balloc_ufs2()
392 fs->fs_bsize, NULL, bpp); in ffs_balloc_ufs2()
406 osize = fragroundup(fs, blkoff(fs, ip->i_ffs2_size)); in ffs_balloc_ufs2()
411 * The existing block is already in ffs_balloc_ufs2()
413 * Just read the block (if requested). in ffs_balloc_ufs2()
417 error = bread((void *)ip->i_devvp, lbn, in ffs_balloc_ufs2()
432 * the block was not previously allocated, in ffs_balloc_ufs2()
433 * allocate a new block or fragment. in ffs_balloc_ufs2()
436 if (ip->i_ffs2_size < (uint64_t)lblktosize(fs, lbn + 1)) in ffs_balloc_ufs2()
439 nsize = fs->fs_bsize; in ffs_balloc_ufs2()
442 &ip->i_ffs2_db[0]), in ffs_balloc_ufs2()
447 bp = getblk((void *)ip->i_devvp, lbn, nsize, in ffs_balloc_ufs2()
449 bp->b_blkno = fsbtodb(fs, newb); in ffs_balloc_ufs2()
454 ip->i_ffs2_db[lbn] = ufs_rw64(newb, needswap); in ffs_balloc_ufs2()
467 warnx("ffs_balloc: ufs_getlbns returned indirect block"); in ffs_balloc_ufs2()
472 * Fetch the first indirect block allocating if necessary. in ffs_balloc_ufs2()
475 --num; in ffs_balloc_ufs2()
476 nb = ufs_rw64(ip->i_ffs2_ib[indirs[0].in_off], needswap); in ffs_balloc_ufs2()
481 error = ffs_alloc(ip, lbn, pref, (int)fs->fs_bsize, &newb); in ffs_balloc_ufs2()
486 bp = getblk((void *)ip->i_devvp, indirs[1].in_lbn, in ffs_balloc_ufs2()
487 fs->fs_bsize, 0, 0, 0); in ffs_balloc_ufs2()
488 bp->b_blkno = fsbtodb(fs, nb); in ffs_balloc_ufs2()
496 allocib = &ip->i_ffs2_ib[indirs[0].in_off]; in ffs_balloc_ufs2()
501 * Fetch through the indirect blocks, allocating as necessary. in ffs_balloc_ufs2()
505 error = bread((void *)ip->i_devvp, indirs[i].in_lbn, in ffs_balloc_ufs2()
506 fs->fs_bsize, NULL, &bp); in ffs_balloc_ufs2()
511 bap = (int64_t *)bp->b_data; in ffs_balloc_ufs2()
522 error = ffs_alloc(ip, lbn, pref, (int)fs->fs_bsize, &newb); in ffs_balloc_ufs2()
529 nbp = getblk((void *)ip->i_devvp, indirs[i].in_lbn, in ffs_balloc_ufs2()
530 fs->fs_bsize, 0, 0, 0); in ffs_balloc_ufs2()
531 nbp->b_blkno = fsbtodb(fs, nb); in ffs_balloc_ufs2()
542 bap[indirs[i - 1].in_off] = ufs_rw64(nb, needswap); in ffs_balloc_ufs2()
548 * Get the data block, allocating if necessary. in ffs_balloc_ufs2()
553 error = ffs_alloc(ip, lbn, pref, (int)fs->fs_bsize, &newb); in ffs_balloc_ufs2()
561 nbp = getblk((void *)ip->i_devvp, lbn, fs->fs_bsize, in ffs_balloc_ufs2()
563 nbp->b_blkno = fsbtodb(fs, nb); in ffs_balloc_ufs2()
578 error = bread((void *)ip->i_devvp, lbn, (int)fs->fs_bsize, in ffs_balloc_ufs2()