Lines Matching +full:block +full:- +full:number
1 /* SPDX-License-Identifier: GPL-2.0 */
6 * Adrian Rodriguez (adrian@franklins-tower.rutgers.edu)
12 * 64-bit clean thanks to Maciej W. Rozycki <macro@ds2.pg.gda.pl>
16 * on code by Martin von Loewis <martin@mira.isdn.cs.tu-berlin.de>.
59 * Each disk drive contains some number of filesystems.
60 * A filesystem consists of a number of cylinder groups.
63 * A filesystem is described by its super-block, which in turn
64 * describes the cylinder groups. The super-block is critical
67 * super-block data does not change, so the copies need not be
71 * are given in the super block as:
72 * [fs->fs_sblkno] Super-block
73 * [fs->fs_cblkno] Cylinder group block
74 * [fs->fs_iblkno] Inode blocks
75 * [fs->fs_dblkno] Data blocks
80 * reside in any one of four places. For tiny media where every block
87 * given in byte-offset form, so they do not imply a sector size. The
96 { SBLOCK_UFS2, SBLOCK_UFS1, SBLOCK_FLOPPY, SBLOCK_PIGGY, -1 }
134 #define UFS_NDIR_FRAGMENT (UFS_NDADDR << uspi->s_fpbshift)
135 #define UFS_IND_FRAGMENT (UFS_IND_BLOCK << uspi->s_fpbshift)
136 #define UFS_DIND_FRAGMENT (UFS_DIND_BLOCK << uspi->s_fpbshift)
137 #define UFS_TIND_FRAGMENT (UFS_TIND_BLOCK << uspi->s_fpbshift)
152 /* Solaris-specific fs_clean values */
186 #define UFS_42INODEFMT -1
205 * Turn file system block numbers into disk block addresses.
208 #define ufs_fsbtodb(uspi, b) ((b) << (uspi)->s_fsbtodb)
209 #define ufs_dbtofsb(uspi, b) ((b) >> (uspi)->s_fsbtodb)
215 #define ufs_cgbase(c) (uspi->s_fpg * (c))
216 #define ufs_cgstart(c) ((uspi)->fs_magic == UFS2_MAGIC ? ufs_cgbase(c) : \
217 (ufs_cgbase(c) + uspi->s_cgoffset * ((c) & ~uspi->s_cgmask)))
218 #define ufs_cgsblock(c) (ufs_cgstart(c) + uspi->s_sblkno) /* super blk */
219 #define ufs_cgcmin(c) (ufs_cgstart(c) + uspi->s_cblkno) /* cg block */
220 #define ufs_cgimin(c) (ufs_cgstart(c) + uspi->s_iblkno) /* inode blk */
221 #define ufs_cgdmin(c) (ufs_cgstart(c) + uspi->s_dblkno) /* 1st data */
225 * inode number to file system block offset.
226 * inode number to cylinder group number.
227 * inode number to file system block address.
229 #define ufs_inotocg(x) ((x) / uspi->s_ipg)
230 #define ufs_inotocgoff(x) ((x) % uspi->s_ipg)
231 #define ufs_inotofsba(x) (((u64)ufs_cgimin(ufs_inotocg(x))) + ufs_inotocgoff(x) / uspi->s_inopf)
232 #define ufs_inotofsbo(x) ((x) % uspi->s_inopf)
235 * Compute the cylinder and rotational position of a cyl block addr.
238 ((bno) * uspi->s_nspf / uspi->s_spc)
240 ((UFS_SB(sb)->s_flags & UFS_CG_SUN) ? \
241 (((((bno) * uspi->s_nspf % uspi->s_spc) % \
242 uspi->s_nsect) * \
243 uspi->s_nrpos) / uspi->s_nsect) \
245 ((((bno) * uspi->s_nspf % uspi->s_spc / uspi->s_nsect \
246 * uspi->s_trackskew + (bno) * uspi->s_nspf % uspi->s_spc \
247 % uspi->s_nsect * uspi->s_interleave) % uspi->s_nsect \
248 * uspi->s_nrpos) / uspi->s_npsect))
255 #define ufs_blkoff(loc) ((loc) & uspi->s_qbmask)
256 #define ufs_fragoff(loc) ((loc) & uspi->s_qfmask)
257 #define ufs_lblktosize(blk) ((blk) << uspi->s_bshift)
258 #define ufs_lblkno(loc) ((loc) >> uspi->s_bshift)
259 #define ufs_numfrags(loc) ((loc) >> uspi->s_fshift)
260 #define ufs_blkroundup(size) (((size) + uspi->s_qbmask) & uspi->s_bmask)
261 #define ufs_fragroundup(size) (((size) + uspi->s_qfmask) & uspi->s_fmask)
262 #define ufs_fragstoblks(frags) ((frags) >> uspi->s_fpbshift)
263 #define ufs_blkstofrags(blks) ((blks) << uspi->s_fpbshift)
264 #define ufs_fragnum(fsb) ((fsb) & uspi->s_fpbmask)
265 #define ufs_blknum(fsb) ((fsb) & ~uspi->s_fpbmask)
274 #define UFS2_NOCSPTRS ((128 / sizeof(void *)) - 4)
283 #define UFS_DIR_ROUND (UFS_DIR_PAD - 1)
292 __fs32 d_ino; /* inode number of this entry */
305 __fs32 cs_ndir; /* number of directories */
306 __fs32 cs_nbfree; /* number of free blocks */
307 __fs32 cs_nifree; /* number of free inodes */
308 __fs32 cs_nffree; /* number of free frags */
311 __fs64 cs_ndir; /* number of directories */
312 __fs64 cs_nbfree; /* number of free blocks */
313 __fs64 cs_nifree; /* number of free inodes */
314 __fs64 cs_nffree; /* number of free frags */
315 __fs64 cs_numclusters; /* number of free clusters */
320 __u64 cs_ndir; /* number of directories */
321 __u64 cs_nbfree; /* number of free blocks */
322 __u64 cs_nifree; /* number of free inodes */
323 __u64 cs_nffree; /* number of free frags */
324 __u64 cs_numclusters; /* number of free clusters */
335 #define UFS_MULTILABEL 0x20 /* file system is MAC multi-label */
355 __fs32 fs_sblkno; /* addr of super-block in filesys */
356 __fs32 fs_cblkno; /* offset of cyl-block in filesys */
357 __fs32 fs_iblkno; /* offset of inode-blocks in filesys */
361 __fs32 fs_time; /* last time written -- time_t */
362 __fs32 fs_size; /* number of blocks in fs */
363 __fs32 fs_dsize; /* number of data blocks in fs */
364 __fs32 fs_ncg; /* number of cylinder groups */
367 __fs32 fs_frag; /* number of frags in a block in fs */
370 __fs32 fs_rotdelay; /* num of ms for optimal next block */
376 __fs32 fs_fshift; /* ``numfrags'' calc number of frags */
378 __fs32 fs_maxcontig; /* max number of contiguous blks */
379 __fs32 fs_maxbpg; /* max number of blks per cyl group */
381 __fs32 fs_fragshift; /* block to frag shift */
383 __fs32 fs_sbsize; /* actual size of super block */
384 __fs32 fs_csmask; /* csum block offset */
385 __fs32 fs_csshift; /* csum block number */
407 /* sizes determined by number of cylinder groups and their sizes */
421 /* this data must be re-computed after crashes */
424 __s8 fs_fmod; /* super block modified flag */
426 __s8 fs_ronly; /* mounted read-only flag */
435 __fs16 fs_opostbl[16][8]; /* old rotation block list head */
440 __fs64 fs_swuid; /* system-wide uid */
450 __fs64 fs_sparecon64[17];/*old rotation block list head */
454 __fs64 fs_size; /* number of blocks in fs */
455 __fs64 fs_dsize; /* number of data blocks in fs */
482 __fs32 fs_inodefmt; /* format of on-disk inodes */
490 __fs32 fs_nrpos; /* number of rotational positions */
491 __fs32 fs_postbloff; /* (__s16) rotation block list head */
493 __fs32 fs_magic; /* magic number */
507 #define UFS_42POSTBLFMT -1 /* 4.2BSD rotational table format */
516 * Cylinder group block for a file system.
519 * super block lock fs->fs_lock.
523 (fs32_to_cpu((sb), (ucg)->cg_magic) == CG_MAGIC)
527 #define ufs_ocg_blktot(sb, ucg) fs32_to_cpu((sb), ((struct ufs_old_cylinder_group *)(ucg))->cg…
528 #define ufs_ocg_blks(sb, ucg, cylno) fs32_to_cpu((sb), ((struct ufs_old_cylinder_group *)(ucg))->cg…
529 #define ufs_ocg_inosused(sb, ucg) fs32_to_cpu((sb), ((struct ufs_old_cylinder_group *)(ucg))->cg…
530 #define ufs_ocg_blksfree(sb, ucg) fs32_to_cpu((sb), ((struct ufs_old_cylinder_group *)(ucg))->cg…
532 (fs32_to_cpu((sb), ((struct ufs_old_cylinder_group *)(ucg))->cg_magic) == CG_MAGIC)
539 __fs32 cg_magic; /* magic number */
542 __fs16 cg_ncyl; /* number of cyl's this cg */
543 __fs16 cg_niblk; /* number of inode blocks this cg */
544 __fs32 cg_ndblk; /* number of data blocks this cg */
546 __fs32 cg_rotor; /* position of last used block */
550 __fs32 cg_btotoff; /* (__u32) block totals per cylinder */
551 __fs32 cg_boff; /* (short) free block positions */
553 __fs32 cg_freeoff; /* (u_char) free block map */
559 __fs32 cg_nclusterblks; /* number of clusters this cg */
565 __fs32 cg_nclusterblks;/* number of clusters this cg */
566 __fs32 cg_niblk; /* number of inode blocks this cg */
584 __fs16 cg_ncyl; /* number of cyl's this cg */
585 __fs16 cg_niblk; /* number of inode blocks this cg */
586 __fs32 cg_ndblk; /* number of data blocks this cg */
588 __fs32 cg_rotor; /* position of last used block */
592 __fs32 cg_btot[32]; /* block totals per cylinder */
595 __fs32 cg_magic; /* magic number */
596 __u8 cg_free[1]; /* free block map */
601 * structure of an on-disk inode
611 __fs32 ui_inumber; /* 0x4 lsf: inode number */
625 __fs32 ui_flags; /* 0x64 immutable, append-only... */
667 __fs32 ui_gen; /* 80: Generation number. */
670 __fs32 ui_extsize; /* 92: External attributes block. */
671 __fs64 ui_extb[UFS_NXADDR];/* 96: External attributes block. */
688 #define UFS_UF_APPEND 0x00000004 /* append-only */
695 #define UFS_SF_APPEND 0x00040000 /* append-only */
704 __u64 count; /* number of fragments */
710 __u32 c_cgx; /* number of cylidner group */
711 __u16 c_ncyl; /* number of cyl's this cg */
712 __u16 c_niblk; /* number of inode blocks this cg */
713 __u32 c_ndblk; /* number of data blocks this cg */
714 __u32 c_rotor; /* position of last used block */
717 __u32 c_btotoff; /* (__u32) block totals per cylinder */
718 __u32 c_boff; /* (short) free block positions */
720 __u32 c_freeoff; /* (u_char) free block map */
724 __u32 c_nclusterblks; /* number of clusters this cg */
729 struct ufs_buffer_head s_ubh; /* buffer containing super block */
731 __u32 s_sblkno; /* offset of super-blocks in filesys */
732 __u32 s_cblkno; /* offset of cg-block in filesys */
733 __u32 s_iblkno; /* offset of inode-blocks in filesys */
737 __u64 s_size; /* number of blocks (fragments) in fs */
738 __u64 s_dsize; /* number of data blocks in fs */
739 __u32 s_ncg; /* number of cylinder groups */
742 __u32 s_fpb; /* fragments per block */
748 __u32 s_fpbshift; /* fragments per block shift */
750 __u32 s_sbsize; /* actual size of super block */
751 __u32 s_csmask; /* csum block offset */
752 __u32 s_csshift; /* csum block number */
772 __s32 s_nrpos; /* number of rotational positions */
773 __s32 s_postbloff; /* (__s16) rotation block list head */
776 __u32 s_fpbmask; /* fragments per block mask */
777 __u32 s_apb; /* address per block */
778 __u32 s_apbmask; /* address per block mask */
779 __u32 s_apbshift; /* address per block shift */
780 __u32 s_nspfshift; /* number of sector per fragment shift */
781 __u32 s_nspb; /* number of sector per block */
869 __s8 fs_fsmnt[UFS_MAXMNTLEN - 212];
884 __s8 fs_fsmnt[UFS2_MAXMNTLEN - UFS_MAXMNTLEN + 212];
910 __fs64 cs_nifree; /* number of free inodes */
911 __fs64 cs_nffree; /* number of free frags */
912 __fs64 cs_numclusters; /* number of free clusters */
915 __fs64 fs_size; /* number of blocks in fs */
916 __fs64 fs_dsize; /* number of data blocks in fs */
943 __fs32 fs_inodefmt; /* format of on-disk inodes */