svn commit: r202720 - in projects/suj/6: . etc games/fortune
games/fortune/datfiles gnu/usr.bin/groff/tmac lib/libufs
release/scripts sbin/fsck_ffs sbin/fsdb sbin/mount
sbin/routed sbin/tunefs shar...
Jeff Roberson
jeff at FreeBSD.org
Wed Jan 20 22:18:57 UTC 2010
Author: jeff
Date: Wed Jan 20 22:18:57 2010
New Revision: 202720
URL: http://svn.freebsd.org/changeset/base/202720
Log:
- Merge suj from 7 to 6.
Added:
projects/suj/6/sbin/fsck_ffs/suj.c
- copied unchanged from r202690, projects/suj/7/sbin/fsck_ffs/suj.c
Modified:
projects/suj/6/lib/libufs/Makefile
projects/suj/6/lib/libufs/cgroup.c
projects/suj/6/lib/libufs/inode.c
projects/suj/6/lib/libufs/libufs.h
projects/suj/6/lib/libufs/sblock.c
projects/suj/6/lib/libufs/type.c
projects/suj/6/sbin/fsck_ffs/Makefile
projects/suj/6/sbin/fsck_ffs/fsck.h
projects/suj/6/sbin/fsck_ffs/fsck_ffs.8
projects/suj/6/sbin/fsck_ffs/fsutil.c
projects/suj/6/sbin/fsck_ffs/inode.c
projects/suj/6/sbin/fsck_ffs/main.c
projects/suj/6/sbin/fsck_ffs/pass4.c
projects/suj/6/sbin/fsck_ffs/pass5.c
projects/suj/6/sbin/fsck_ffs/setup.c
projects/suj/6/sbin/fsdb/fsdbutil.c
projects/suj/6/sbin/mount/mount.c
projects/suj/6/sbin/tunefs/tunefs.c
projects/suj/6/sys/kern/vfs_bio.c
projects/suj/6/sys/sys/buf.h
projects/suj/6/sys/sys/mount.h
projects/suj/6/sys/sys/queue.h
projects/suj/6/sys/ufs/ffs/ffs_alloc.c
projects/suj/6/sys/ufs/ffs/ffs_balloc.c
projects/suj/6/sys/ufs/ffs/ffs_extern.h
projects/suj/6/sys/ufs/ffs/ffs_inode.c
projects/suj/6/sys/ufs/ffs/ffs_snapshot.c
projects/suj/6/sys/ufs/ffs/ffs_softdep.c
projects/suj/6/sys/ufs/ffs/ffs_subr.c
projects/suj/6/sys/ufs/ffs/ffs_vfsops.c
projects/suj/6/sys/ufs/ffs/ffs_vnops.c
projects/suj/6/sys/ufs/ffs/fs.h
projects/suj/6/sys/ufs/ffs/softdep.h
projects/suj/6/sys/ufs/ufs/dinode.h
projects/suj/6/sys/ufs/ufs/inode.h
projects/suj/6/sys/ufs/ufs/ufs_dirhash.c
projects/suj/6/sys/ufs/ufs/ufs_extern.h
projects/suj/6/sys/ufs/ufs/ufs_lookup.c
projects/suj/6/sys/ufs/ufs/ufs_vnops.c
projects/suj/6/sys/ufs/ufs/ufsmount.h
Directory Properties:
projects/suj/6/ (props changed)
projects/suj/6/COPYRIGHT (props changed)
projects/suj/6/Makefile (props changed)
projects/suj/6/Makefile.inc1 (props changed)
projects/suj/6/ObsoleteFiles.inc (props changed)
projects/suj/6/UPDATING (props changed)
projects/suj/6/bin/ (props changed)
projects/suj/6/bin/chflags/ (props changed)
projects/suj/6/bin/chio/ (props changed)
projects/suj/6/bin/cp/ (props changed)
projects/suj/6/bin/csh/ (props changed)
projects/suj/6/bin/dd/ (props changed)
projects/suj/6/bin/df/ (props changed)
projects/suj/6/bin/ln/ (props changed)
projects/suj/6/bin/pax/ (props changed)
projects/suj/6/bin/ps/ (props changed)
projects/suj/6/bin/rm/ (props changed)
projects/suj/6/bin/sh/ (props changed)
projects/suj/6/contrib/ (props changed)
projects/suj/6/contrib/bind9/ (props changed)
projects/suj/6/contrib/bsnmp/ (props changed)
projects/suj/6/contrib/bzip2/ (props changed)
projects/suj/6/contrib/cpio/ (props changed)
projects/suj/6/contrib/csup/ (props changed)
projects/suj/6/contrib/expat/ (props changed)
projects/suj/6/contrib/file/ (props changed)
projects/suj/6/contrib/gcc/ (props changed)
projects/suj/6/contrib/gdb/ (props changed)
projects/suj/6/contrib/gdtoa/ (props changed)
projects/suj/6/contrib/groff/ (props changed)
projects/suj/6/contrib/ipfilter/ (props changed)
projects/suj/6/contrib/less/ (props changed)
projects/suj/6/contrib/libpcap/ (props changed)
projects/suj/6/contrib/ncurses/ (props changed)
projects/suj/6/contrib/netcat/ (props changed)
projects/suj/6/contrib/ntp/ (props changed)
projects/suj/6/contrib/one-true-awk/ (props changed)
projects/suj/6/contrib/openbsm/ (props changed)
projects/suj/6/contrib/openpam/ (props changed)
projects/suj/6/contrib/pf/ (props changed)
projects/suj/6/contrib/sendmail/ (props changed)
projects/suj/6/contrib/smbfs/ (props changed)
projects/suj/6/contrib/tcpdump/ (props changed)
projects/suj/6/contrib/tcsh/ (props changed)
projects/suj/6/contrib/telnet/ (props changed)
projects/suj/6/contrib/top/ (props changed)
projects/suj/6/contrib/traceroute/ (props changed)
projects/suj/6/crypto/openssh/ (props changed)
projects/suj/6/etc/ (props changed)
projects/suj/6/etc/Makefile (props changed)
projects/suj/6/etc/amd.map (props changed)
projects/suj/6/etc/apmd.conf (props changed)
projects/suj/6/etc/auth.conf (props changed)
projects/suj/6/etc/bluetooth/ (props changed)
projects/suj/6/etc/crontab (props changed)
projects/suj/6/etc/csh.cshrc (props changed)
projects/suj/6/etc/csh.login (props changed)
projects/suj/6/etc/csh.logout (props changed)
projects/suj/6/etc/defaults/ (props changed)
projects/suj/6/etc/devd.conf (props changed)
projects/suj/6/etc/devfs.conf (props changed)
projects/suj/6/etc/dhclient.conf (props changed)
projects/suj/6/etc/disktab (props changed)
projects/suj/6/etc/etc.alpha/ (props changed)
projects/suj/6/etc/etc.amd64/ (props changed)
projects/suj/6/etc/etc.arm/ (props changed)
projects/suj/6/etc/etc.i386/ (props changed)
projects/suj/6/etc/etc.ia64/ (props changed)
projects/suj/6/etc/etc.powerpc/ (props changed)
projects/suj/6/etc/etc.sparc64/ (props changed)
projects/suj/6/etc/fbtab (props changed)
projects/suj/6/etc/freebsd-update.conf (props changed)
projects/suj/6/etc/ftpusers (props changed)
projects/suj/6/etc/gettytab (props changed)
projects/suj/6/etc/group (props changed)
projects/suj/6/etc/hosts (props changed)
projects/suj/6/etc/hosts.allow (props changed)
projects/suj/6/etc/hosts.equiv (props changed)
projects/suj/6/etc/hosts.lpd (props changed)
projects/suj/6/etc/inetd.conf (props changed)
projects/suj/6/etc/isdn/ (props changed)
projects/suj/6/etc/login.access (props changed)
projects/suj/6/etc/login.conf (props changed)
projects/suj/6/etc/mac.conf (props changed)
projects/suj/6/etc/mail/ (props changed)
projects/suj/6/etc/man.alias (props changed)
projects/suj/6/etc/master.passwd (props changed)
projects/suj/6/etc/minfree (props changed)
projects/suj/6/etc/motd (props changed)
projects/suj/6/etc/mtree/ (props changed)
projects/suj/6/etc/namedb/ (props changed)
projects/suj/6/etc/netconfig (props changed)
projects/suj/6/etc/netstart (props changed)
projects/suj/6/etc/network.subr (props changed)
projects/suj/6/etc/networks (props changed)
projects/suj/6/etc/newsyslog.conf (props changed)
projects/suj/6/etc/nls.alias (props changed)
projects/suj/6/etc/nsmb.conf (props changed)
projects/suj/6/etc/opieaccess (props changed)
projects/suj/6/etc/pam.d/ (props changed)
projects/suj/6/etc/pccard_ether (props changed)
projects/suj/6/etc/periodic/ (props changed)
projects/suj/6/etc/pf.conf (props changed)
projects/suj/6/etc/pf.os (props changed)
projects/suj/6/etc/phones (props changed)
projects/suj/6/etc/portsnap.conf (props changed)
projects/suj/6/etc/ppp/ (props changed)
projects/suj/6/etc/printcap (props changed)
projects/suj/6/etc/profile (props changed)
projects/suj/6/etc/protocols (props changed)
projects/suj/6/etc/rc (props changed)
projects/suj/6/etc/rc.bsdextended (props changed)
projects/suj/6/etc/rc.d/ (props changed)
projects/suj/6/etc/rc.firewall (props changed)
projects/suj/6/etc/rc.firewall6 (props changed)
projects/suj/6/etc/rc.initdiskless (props changed)
projects/suj/6/etc/rc.resume (props changed)
projects/suj/6/etc/rc.sendmail (props changed)
projects/suj/6/etc/rc.shutdown (props changed)
projects/suj/6/etc/rc.subr (props changed)
projects/suj/6/etc/rc.suspend (props changed)
projects/suj/6/etc/remote (props changed)
projects/suj/6/etc/root/ (props changed)
projects/suj/6/etc/rpc (props changed)
projects/suj/6/etc/sendmail/ (props changed)
projects/suj/6/etc/services (props changed)
projects/suj/6/etc/shells (props changed)
projects/suj/6/etc/snmpd.config (props changed)
projects/suj/6/etc/sysctl.conf (props changed)
projects/suj/6/etc/syslog.conf (props changed)
projects/suj/6/etc/termcap.small (props changed)
projects/suj/6/etc/usbd.conf (props changed)
projects/suj/6/games/factor/ (props changed)
projects/suj/6/games/fortune/ (props changed)
projects/suj/6/games/fortune/Makefile (props changed)
projects/suj/6/games/fortune/Makefile.inc (props changed)
projects/suj/6/games/fortune/Notes (props changed)
projects/suj/6/games/fortune/README (props changed)
projects/suj/6/games/fortune/datfiles/ (props changed)
projects/suj/6/games/fortune/datfiles/freebsd-tips (props changed)
projects/suj/6/games/fortune/fortune/ (props changed)
projects/suj/6/games/fortune/strfile/ (props changed)
projects/suj/6/games/fortune/tools/ (props changed)
projects/suj/6/games/fortune/unstr/ (props changed)
projects/suj/6/gnu/ (props changed)
projects/suj/6/gnu/usr.bin/cc/ (props changed)
projects/suj/6/gnu/usr.bin/cvs/ (props changed)
projects/suj/6/gnu/usr.bin/gdb/kgdb/ (props changed)
projects/suj/6/gnu/usr.bin/grep/ (props changed)
projects/suj/6/gnu/usr.bin/groff/ (props changed)
projects/suj/6/gnu/usr.bin/groff/tmac/mdoc.local (props changed)
projects/suj/6/gnu/usr.bin/man/ (props changed)
projects/suj/6/gnu/usr.bin/patch/ (props changed)
projects/suj/6/gnu/usr.bin/sort/ (props changed)
projects/suj/6/include/ (props changed)
projects/suj/6/kerberos5/ (props changed)
projects/suj/6/lib/ (props changed)
projects/suj/6/lib/bind/ (props changed)
projects/suj/6/lib/csu/ (props changed)
projects/suj/6/lib/libarchive/ (props changed)
projects/suj/6/lib/libbluetooth/ (props changed)
projects/suj/6/lib/libc/ (props changed)
projects/suj/6/lib/libc/stdtime/ (props changed)
projects/suj/6/lib/libc_r/ (props changed)
projects/suj/6/lib/libcam/ (props changed)
projects/suj/6/lib/libdevinfo/ (props changed)
projects/suj/6/lib/libdisk/ (props changed)
projects/suj/6/lib/libexpat/ (props changed)
projects/suj/6/lib/libfetch/ (props changed)
projects/suj/6/lib/libftpio/ (props changed)
projects/suj/6/lib/libgeom/ (props changed)
projects/suj/6/lib/libkvm/ (props changed)
projects/suj/6/lib/libmagic/ (props changed)
projects/suj/6/lib/libmemstat/ (props changed)
projects/suj/6/lib/libpam/ (props changed)
projects/suj/6/lib/libpmc/ (props changed)
projects/suj/6/lib/libradius/ (props changed)
projects/suj/6/lib/libstand/ (props changed)
projects/suj/6/lib/libtacplus/ (props changed)
projects/suj/6/lib/libthr/ (props changed)
projects/suj/6/lib/libthread_db/ (props changed)
projects/suj/6/lib/libufs/ (props changed)
projects/suj/6/lib/libutil/ (props changed)
projects/suj/6/lib/msun/ (props changed)
projects/suj/6/libexec/ (props changed)
projects/suj/6/libexec/rpc.rquotad/ (props changed)
projects/suj/6/libexec/rpc.rstatd/ (props changed)
projects/suj/6/libexec/rtld-elf/ (props changed)
projects/suj/6/release/ (props changed)
projects/suj/6/release/doc/ (props changed)
projects/suj/6/release/doc/en_US.ISO8859-1/hardware/ (props changed)
projects/suj/6/release/scripts/src-install.sh (props changed)
projects/suj/6/rescue/ (props changed)
projects/suj/6/sbin/ (props changed)
projects/suj/6/sbin/atacontrol/ (props changed)
projects/suj/6/sbin/bsdlabel/ (props changed)
projects/suj/6/sbin/camcontrol/ (props changed)
projects/suj/6/sbin/clri/ (props changed)
projects/suj/6/sbin/devd/ (props changed)
projects/suj/6/sbin/devfs/ (props changed)
projects/suj/6/sbin/dhclient/ (props changed)
projects/suj/6/sbin/dumpfs/ (props changed)
projects/suj/6/sbin/fdisk/ (props changed)
projects/suj/6/sbin/fdisk_pc98/ (props changed)
projects/suj/6/sbin/fsck/ (props changed)
projects/suj/6/sbin/fsck_ffs/ (props changed)
projects/suj/6/sbin/fsck_msdosfs/ (props changed)
projects/suj/6/sbin/geom/ (props changed)
projects/suj/6/sbin/geom/class/label/ (props changed)
projects/suj/6/sbin/geom/class/stripe/ (props changed)
projects/suj/6/sbin/geom/misc/ (props changed)
projects/suj/6/sbin/ifconfig/ (props changed)
projects/suj/6/sbin/init/ (props changed)
projects/suj/6/sbin/ipf/ (props changed)
projects/suj/6/sbin/ipfw/ (props changed)
projects/suj/6/sbin/md5/ (props changed)
projects/suj/6/sbin/mdconfig/ (props changed)
projects/suj/6/sbin/mksnap_ffs/ (props changed)
projects/suj/6/sbin/mount/ (props changed)
projects/suj/6/sbin/mount_cd9660/ (props changed)
projects/suj/6/sbin/mount_msdosfs/ (props changed)
projects/suj/6/sbin/mount_nfs/ (props changed)
projects/suj/6/sbin/natd/ (props changed)
projects/suj/6/sbin/newfs_msdos/ (props changed)
projects/suj/6/sbin/ping6/ (props changed)
projects/suj/6/sbin/restore/ (props changed)
projects/suj/6/sbin/route/ (props changed)
projects/suj/6/sbin/routed/main.c (props changed)
projects/suj/6/sbin/savecore/ (props changed)
projects/suj/6/sbin/sconfig/ (props changed)
projects/suj/6/sbin/shutdown/ (props changed)
projects/suj/6/sbin/umount/ (props changed)
projects/suj/6/secure/lib/libssh/ (props changed)
projects/suj/6/secure/libexec/sftp-server/ (props changed)
projects/suj/6/secure/usr.bin/bdes/ (props changed)
projects/suj/6/secure/usr.bin/ssh/ (props changed)
projects/suj/6/secure/usr.sbin/sshd/ (props changed)
projects/suj/6/share/ (props changed)
projects/suj/6/share/colldef/ (props changed)
projects/suj/6/share/doc/bind9/ (props changed)
projects/suj/6/share/examples/ (props changed)
projects/suj/6/share/man/ (props changed)
projects/suj/6/share/man/man3/ (props changed)
projects/suj/6/share/man/man4/ (props changed)
projects/suj/6/share/man/man5/ (props changed)
projects/suj/6/share/man/man5/rc.conf.5 (props changed)
projects/suj/6/share/man/man7/ (props changed)
projects/suj/6/share/man/man7/ports.7 (props changed)
projects/suj/6/share/man/man8/ (props changed)
projects/suj/6/share/man/man9/ (props changed)
projects/suj/6/share/misc/ (props changed)
projects/suj/6/share/misc/iso639 (props changed)
projects/suj/6/share/misc/pci_vendors (props changed)
projects/suj/6/share/mk/ (props changed)
projects/suj/6/share/mklocale/ (props changed)
projects/suj/6/share/monetdef/ (props changed)
projects/suj/6/share/msgdef/ (props changed)
projects/suj/6/share/numericdef/ (props changed)
projects/suj/6/share/sendmail/ (props changed)
projects/suj/6/share/syscons/ (props changed)
projects/suj/6/share/syscons/keymaps/ (props changed)
projects/suj/6/share/termcap/ (props changed)
projects/suj/6/share/timedef/ (props changed)
projects/suj/6/share/zoneinfo/ (props changed)
projects/suj/6/sys/ (props changed)
projects/suj/6/sys/contrib/dev/acpica/ (props changed)
projects/suj/6/sys/contrib/pf/ (props changed)
projects/suj/6/sys/dev/cxgb/ (props changed)
projects/suj/6/tools/build/ (props changed)
projects/suj/6/tools/regression/atm/ (props changed)
projects/suj/6/tools/regression/file/ (props changed)
projects/suj/6/tools/regression/file/flock/ (props changed)
projects/suj/6/tools/regression/usr.bin/ (props changed)
projects/suj/6/tools/regression/usr.bin/calendar/ (props changed)
projects/suj/6/tools/regression/usr.bin/jot/ (props changed)
projects/suj/6/tools/regression/usr.bin/tr/ (props changed)
projects/suj/6/tools/sched/ (props changed)
projects/suj/6/tools/tools/crypto/ (props changed)
projects/suj/6/tools/tools/editing/ (props changed)
projects/suj/6/tools/tools/nanobsd/ (props changed)
projects/suj/6/tools/tools/nanobsd/FlashDevice.sub (props changed)
projects/suj/6/tools/tools/nanobsd/nanobsd.sh (props changed)
projects/suj/6/tools/tools/usb/ (props changed)
projects/suj/6/usr.bin/ (props changed)
projects/suj/6/usr.bin/awk/ (props changed)
projects/suj/6/usr.bin/basename/ (props changed)
projects/suj/6/usr.bin/bluetooth/rfcomm_sppd/ (props changed)
projects/suj/6/usr.bin/calendar/ (props changed)
projects/suj/6/usr.bin/calendar/calendars/ (props changed)
projects/suj/6/usr.bin/calendar/calendars/calendar.freebsd (props changed)
projects/suj/6/usr.bin/catman/ (props changed)
projects/suj/6/usr.bin/cksum/ (props changed)
projects/suj/6/usr.bin/comm/ (props changed)
projects/suj/6/usr.bin/csup/ (props changed)
projects/suj/6/usr.bin/dirname/ (props changed)
projects/suj/6/usr.bin/du/ (props changed)
projects/suj/6/usr.bin/fetch/ (props changed)
projects/suj/6/usr.bin/file/ (props changed)
projects/suj/6/usr.bin/find/ (props changed)
projects/suj/6/usr.bin/finger/ (props changed)
projects/suj/6/usr.bin/fstat/ (props changed)
projects/suj/6/usr.bin/gcore/ (props changed)
projects/suj/6/usr.bin/gprof/ (props changed)
projects/suj/6/usr.bin/gzip/ (props changed)
projects/suj/6/usr.bin/id/ (props changed)
projects/suj/6/usr.bin/ipcrm/ (props changed)
projects/suj/6/usr.bin/ipcs/ (props changed)
projects/suj/6/usr.bin/jot/ (props changed)
projects/suj/6/usr.bin/kdump/ (props changed)
projects/suj/6/usr.bin/ktrace/ (props changed)
projects/suj/6/usr.bin/ldd/ (props changed)
projects/suj/6/usr.bin/locale/ (props changed)
projects/suj/6/usr.bin/locate/ (props changed)
projects/suj/6/usr.bin/lockf/ (props changed)
projects/suj/6/usr.bin/logger/ (props changed)
projects/suj/6/usr.bin/look/ (props changed)
projects/suj/6/usr.bin/make/ (props changed)
projects/suj/6/usr.bin/ncal/ (props changed)
projects/suj/6/usr.bin/netstat/ (props changed)
projects/suj/6/usr.bin/newgrp/ (props changed)
projects/suj/6/usr.bin/nsupdate/ (props changed)
projects/suj/6/usr.bin/quota/ (props changed)
projects/suj/6/usr.bin/rpcgen/ (props changed)
projects/suj/6/usr.bin/sed/ (props changed)
projects/suj/6/usr.bin/shar/ (props changed)
projects/suj/6/usr.bin/sockstat/ (props changed)
projects/suj/6/usr.bin/stat/ (props changed)
projects/suj/6/usr.bin/su/ (props changed)
projects/suj/6/usr.bin/systat/ (props changed)
projects/suj/6/usr.bin/tail/ (props changed)
projects/suj/6/usr.bin/tar/ (props changed)
projects/suj/6/usr.bin/tftp/ (props changed)
projects/suj/6/usr.bin/tip/ (props changed)
projects/suj/6/usr.bin/top/ (props changed)
projects/suj/6/usr.bin/truncate/ (props changed)
projects/suj/6/usr.bin/truss/ (props changed)
projects/suj/6/usr.bin/unifdef/ (props changed)
projects/suj/6/usr.bin/units/ (props changed)
projects/suj/6/usr.bin/vmstat/ (props changed)
projects/suj/6/usr.bin/w/ (props changed)
projects/suj/6/usr.bin/wc/ (props changed)
projects/suj/6/usr.bin/whereis/ (props changed)
projects/suj/6/usr.bin/whois/ (props changed)
projects/suj/6/usr.bin/window/ (props changed)
projects/suj/6/usr.bin/xargs/ (props changed)
projects/suj/6/usr.bin/ypcat/ (props changed)
projects/suj/6/usr.bin/ypmatch/ (props changed)
projects/suj/6/usr.bin/ypwhich/ (props changed)
projects/suj/6/usr.sbin/ (props changed)
projects/suj/6/usr.sbin/IPXrouted/ (props changed)
projects/suj/6/usr.sbin/Makefile (props changed)
projects/suj/6/usr.sbin/Makefile.inc (props changed)
projects/suj/6/usr.sbin/ac/ (props changed)
projects/suj/6/usr.sbin/accton/ (props changed)
projects/suj/6/usr.sbin/acpi/ (props changed)
projects/suj/6/usr.sbin/adduser/ (props changed)
projects/suj/6/usr.sbin/amd/ (props changed)
projects/suj/6/usr.sbin/ancontrol/ (props changed)
projects/suj/6/usr.sbin/apm/ (props changed)
projects/suj/6/usr.sbin/apmd/ (props changed)
projects/suj/6/usr.sbin/arlcontrol/ (props changed)
projects/suj/6/usr.sbin/arp/ (props changed)
projects/suj/6/usr.sbin/asf/ (props changed)
projects/suj/6/usr.sbin/audit/ (props changed)
projects/suj/6/usr.sbin/auditd/ (props changed)
projects/suj/6/usr.sbin/auditreduce/ (props changed)
projects/suj/6/usr.sbin/authpf/ (props changed)
projects/suj/6/usr.sbin/bluetooth/ (props changed)
projects/suj/6/usr.sbin/bluetooth/hcsecd/ (props changed)
projects/suj/6/usr.sbin/bluetooth/hcseriald/ (props changed)
projects/suj/6/usr.sbin/bluetooth/rfcomm_pppd/ (props changed)
projects/suj/6/usr.sbin/bluetooth/sdpd/ (props changed)
projects/suj/6/usr.sbin/boot0cfg/ (props changed)
projects/suj/6/usr.sbin/boot98cfg/ (props changed)
projects/suj/6/usr.sbin/bootparamd/ (props changed)
projects/suj/6/usr.sbin/bsnmpd/ (props changed)
projects/suj/6/usr.sbin/bsnmpd/modules/snmp_pf/ (props changed)
projects/suj/6/usr.sbin/btxld/ (props changed)
projects/suj/6/usr.sbin/burncd/ (props changed)
projects/suj/6/usr.sbin/cdcontrol/ (props changed)
projects/suj/6/usr.sbin/chkgrp/ (props changed)
projects/suj/6/usr.sbin/chown/ (props changed)
projects/suj/6/usr.sbin/chroot/ (props changed)
projects/suj/6/usr.sbin/ckdist/ (props changed)
projects/suj/6/usr.sbin/clear_locks/ (props changed)
projects/suj/6/usr.sbin/config/ (props changed)
projects/suj/6/usr.sbin/crashinfo/ (props changed)
projects/suj/6/usr.sbin/cron/ (props changed)
projects/suj/6/usr.sbin/cron/cron/ (props changed)
projects/suj/6/usr.sbin/crunch/ (props changed)
projects/suj/6/usr.sbin/ctm/ (props changed)
projects/suj/6/usr.sbin/cxgbtool/ (props changed)
projects/suj/6/usr.sbin/daemon/ (props changed)
projects/suj/6/usr.sbin/dconschat/ (props changed)
projects/suj/6/usr.sbin/devinfo/ (props changed)
projects/suj/6/usr.sbin/digictl/ (props changed)
projects/suj/6/usr.sbin/diskinfo/ (props changed)
projects/suj/6/usr.sbin/dnssec-keygen/ (props changed)
projects/suj/6/usr.sbin/dnssec-signzone/ (props changed)
projects/suj/6/usr.sbin/editmap/ (props changed)
projects/suj/6/usr.sbin/edquota/ (props changed)
projects/suj/6/usr.sbin/eeprom/ (props changed)
projects/suj/6/usr.sbin/extattr/ (props changed)
projects/suj/6/usr.sbin/extattrctl/ (props changed)
projects/suj/6/usr.sbin/faithd/ (props changed)
projects/suj/6/usr.sbin/fdcontrol/ (props changed)
projects/suj/6/usr.sbin/fdformat/ (props changed)
projects/suj/6/usr.sbin/fdread/ (props changed)
projects/suj/6/usr.sbin/fdwrite/ (props changed)
projects/suj/6/usr.sbin/flowctl/ (props changed)
projects/suj/6/usr.sbin/freebsd-update/ (props changed)
projects/suj/6/usr.sbin/fwcontrol/ (props changed)
projects/suj/6/usr.sbin/getfmac/ (props changed)
projects/suj/6/usr.sbin/getpmac/ (props changed)
projects/suj/6/usr.sbin/gstat/ (props changed)
projects/suj/6/usr.sbin/i4b/ (props changed)
projects/suj/6/usr.sbin/ifmcstat/ (props changed)
projects/suj/6/usr.sbin/inetd/ (props changed)
projects/suj/6/usr.sbin/iostat/ (props changed)
projects/suj/6/usr.sbin/ip6addrctl/ (props changed)
projects/suj/6/usr.sbin/ipfwpcap/ (props changed)
projects/suj/6/usr.sbin/jail/ (props changed)
projects/suj/6/usr.sbin/jexec/ (props changed)
projects/suj/6/usr.sbin/jls/ (props changed)
projects/suj/6/usr.sbin/kbdcontrol/ (props changed)
projects/suj/6/usr.sbin/kbdmap/ (props changed)
projects/suj/6/usr.sbin/kernbb/ (props changed)
projects/suj/6/usr.sbin/keyserv/ (props changed)
projects/suj/6/usr.sbin/kgmon/ (props changed)
projects/suj/6/usr.sbin/kgzip/ (props changed)
projects/suj/6/usr.sbin/kldxref/ (props changed)
projects/suj/6/usr.sbin/lastlogin/ (props changed)
projects/suj/6/usr.sbin/lpr/ (props changed)
projects/suj/6/usr.sbin/lptcontrol/ (props changed)
projects/suj/6/usr.sbin/mailstats/ (props changed)
projects/suj/6/usr.sbin/mailwrapper/ (props changed)
projects/suj/6/usr.sbin/makemap/ (props changed)
projects/suj/6/usr.sbin/manctl/ (props changed)
projects/suj/6/usr.sbin/memcontrol/ (props changed)
projects/suj/6/usr.sbin/mergemaster/ (props changed)
projects/suj/6/usr.sbin/mixer/ (props changed)
projects/suj/6/usr.sbin/mld6query/ (props changed)
projects/suj/6/usr.sbin/mlxcontrol/ (props changed)
projects/suj/6/usr.sbin/mount_nwfs/ (props changed)
projects/suj/6/usr.sbin/mount_portalfs/ (props changed)
projects/suj/6/usr.sbin/mount_smbfs/ (props changed)
projects/suj/6/usr.sbin/mountd/ (props changed)
projects/suj/6/usr.sbin/moused/ (props changed)
projects/suj/6/usr.sbin/mptable/ (props changed)
projects/suj/6/usr.sbin/mtest/ (props changed)
projects/suj/6/usr.sbin/mtree/ (props changed)
projects/suj/6/usr.sbin/named/ (props changed)
projects/suj/6/usr.sbin/named-checkconf/ (props changed)
projects/suj/6/usr.sbin/named-checkzone/ (props changed)
projects/suj/6/usr.sbin/named.reload/ (props changed)
projects/suj/6/usr.sbin/ndiscvt/ (props changed)
projects/suj/6/usr.sbin/ndp/ (props changed)
projects/suj/6/usr.sbin/newsyslog/ (props changed)
projects/suj/6/usr.sbin/newsyslog/newsyslog.conf.5 (props changed)
projects/suj/6/usr.sbin/nfsd/ (props changed)
projects/suj/6/usr.sbin/ngctl/ (props changed)
projects/suj/6/usr.sbin/nghook/ (props changed)
projects/suj/6/usr.sbin/nologin/ (props changed)
projects/suj/6/usr.sbin/ntp/ (props changed)
projects/suj/6/usr.sbin/ntp/doc/ (props changed)
projects/suj/6/usr.sbin/ofwdump/ (props changed)
projects/suj/6/usr.sbin/pccard/ (props changed)
projects/suj/6/usr.sbin/pciconf/ (props changed)
projects/suj/6/usr.sbin/periodic/ (props changed)
projects/suj/6/usr.sbin/pkg_install/ (props changed)
projects/suj/6/usr.sbin/pmccontrol/ (props changed)
projects/suj/6/usr.sbin/pmcstat/ (props changed)
projects/suj/6/usr.sbin/pnpinfo/ (props changed)
projects/suj/6/usr.sbin/portsnap/ (props changed)
projects/suj/6/usr.sbin/powerd/ (props changed)
projects/suj/6/usr.sbin/ppp/ (props changed)
projects/suj/6/usr.sbin/pppctl/ (props changed)
projects/suj/6/usr.sbin/pppd/ (props changed)
projects/suj/6/usr.sbin/pppstats/ (props changed)
projects/suj/6/usr.sbin/praliases/ (props changed)
projects/suj/6/usr.sbin/praudit/ (props changed)
projects/suj/6/usr.sbin/procctl/ (props changed)
projects/suj/6/usr.sbin/pstat/ (props changed)
projects/suj/6/usr.sbin/pw/ (props changed)
projects/suj/6/usr.sbin/pwd_mkdb/ (props changed)
projects/suj/6/usr.sbin/quot/ (props changed)
projects/suj/6/usr.sbin/quotaon/ (props changed)
projects/suj/6/usr.sbin/rarpd/ (props changed)
projects/suj/6/usr.sbin/raycontrol/ (props changed)
projects/suj/6/usr.sbin/repquota/ (props changed)
projects/suj/6/usr.sbin/rip6query/ (props changed)
projects/suj/6/usr.sbin/rmt/ (props changed)
projects/suj/6/usr.sbin/rndc/ (props changed)
projects/suj/6/usr.sbin/rndc-confgen/ (props changed)
projects/suj/6/usr.sbin/route6d/ (props changed)
projects/suj/6/usr.sbin/rpc.lockd/ (props changed)
projects/suj/6/usr.sbin/rpc.statd/ (props changed)
projects/suj/6/usr.sbin/rpc.umntall/ (props changed)
projects/suj/6/usr.sbin/rpc.yppasswdd/ (props changed)
projects/suj/6/usr.sbin/rpc.ypupdated/ (props changed)
projects/suj/6/usr.sbin/rpc.ypxfrd/ (props changed)
projects/suj/6/usr.sbin/rpcbind/ (props changed)
projects/suj/6/usr.sbin/rrenumd/ (props changed)
projects/suj/6/usr.sbin/rtadvd/ (props changed)
projects/suj/6/usr.sbin/rtprio/ (props changed)
projects/suj/6/usr.sbin/rtsold/ (props changed)
projects/suj/6/usr.sbin/rwhod/ (props changed)
projects/suj/6/usr.sbin/sa/ (props changed)
projects/suj/6/usr.sbin/sade/ (props changed)
projects/suj/6/usr.sbin/sendmail/ (props changed)
projects/suj/6/usr.sbin/setfmac/ (props changed)
projects/suj/6/usr.sbin/setpmac/ (props changed)
projects/suj/6/usr.sbin/sicontrol/ (props changed)
projects/suj/6/usr.sbin/sliplogin/ (props changed)
projects/suj/6/usr.sbin/slstat/ (props changed)
projects/suj/6/usr.sbin/smbmsg/ (props changed)
projects/suj/6/usr.sbin/snapinfo/ (props changed)
projects/suj/6/usr.sbin/spkrtest/ (props changed)
projects/suj/6/usr.sbin/spray/ (props changed)
projects/suj/6/usr.sbin/sysinstall/ (props changed)
projects/suj/6/usr.sbin/syslogd/ (props changed)
projects/suj/6/usr.sbin/tcpdchk/ (props changed)
projects/suj/6/usr.sbin/tcpdmatch/ (props changed)
projects/suj/6/usr.sbin/tcpdrop/ (props changed)
projects/suj/6/usr.sbin/tcpdump/ (props changed)
projects/suj/6/usr.sbin/timed/ (props changed)
projects/suj/6/usr.sbin/traceroute/ (props changed)
projects/suj/6/usr.sbin/traceroute6/ (props changed)
projects/suj/6/usr.sbin/trpt/ (props changed)
projects/suj/6/usr.sbin/tzsetup/ (props changed)
projects/suj/6/usr.sbin/ugidfw/ (props changed)
projects/suj/6/usr.sbin/usbdevs/ (props changed)
projects/suj/6/usr.sbin/vidcontrol/ (props changed)
projects/suj/6/usr.sbin/vipw/ (props changed)
projects/suj/6/usr.sbin/watch/ (props changed)
projects/suj/6/usr.sbin/watchdogd/ (props changed)
projects/suj/6/usr.sbin/wlconfig/ (props changed)
projects/suj/6/usr.sbin/wpa/ (props changed)
projects/suj/6/usr.sbin/wpa/wpa_supplicant/ (props changed)
projects/suj/6/usr.sbin/yp_mkdb/ (props changed)
projects/suj/6/usr.sbin/ypbind/ (props changed)
projects/suj/6/usr.sbin/yppoll/ (props changed)
projects/suj/6/usr.sbin/yppush/ (props changed)
projects/suj/6/usr.sbin/ypserv/ (props changed)
projects/suj/6/usr.sbin/ypset/ (props changed)
projects/suj/6/usr.sbin/zic/ (props changed)
projects/suj/6/usr.sbin/zzz/ (props changed)
Modified: projects/suj/6/lib/libufs/Makefile
==============================================================================
--- projects/suj/6/lib/libufs/Makefile Wed Jan 20 21:30:52 2010 (r202719)
+++ projects/suj/6/lib/libufs/Makefile Wed Jan 20 22:18:57 2010 (r202720)
@@ -2,7 +2,7 @@
LIB= ufs
SHLIBDIR?= /lib
-SRCS= block.c cgroup.c inode.c sblock.c type.c
+SRCS= block.c cgroup.c inode.c sblock.c type.c ffs_subr.c ffs_tables.c
INCS= libufs.h
MAN= bread.3 cgread.3 libufs.3 sbread.3 ufs_disk_close.3
MLINKS+= bread.3 bwrite.3
@@ -11,7 +11,13 @@ MLINKS+= sbread.3 sbwrite.3
MLINKS+= ufs_disk_close.3 ufs_disk_fillout.3
MLINKS+= ufs_disk_close.3 ufs_disk_fillout_blank.3
MLINKS+= ufs_disk_close.3 ufs_disk_write.3
-CFLAGS+= -I${.CURDIR} -D_LIBUFS
+
+WARNS?= 2
+
+.PATH: ${.CURDIR}/../../sys/ufs/ffs
+
+DEBUG_FLAGS = -g
+CFLAGS+= -D_LIBUFS
.if defined(LIBUFS_DEBUG)
CFLAGS+= -D_LIBUFS_DEBUGGING
.endif
Modified: projects/suj/6/lib/libufs/cgroup.c
==============================================================================
--- projects/suj/6/lib/libufs/cgroup.c Wed Jan 20 21:30:52 2010 (r202719)
+++ projects/suj/6/lib/libufs/cgroup.c Wed Jan 20 22:18:57 2010 (r202720)
@@ -40,11 +40,82 @@ __FBSDID("$FreeBSD$");
#include <errno.h>
#include <fcntl.h>
#include <stdio.h>
+#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <libufs.h>
+ufs2_daddr_t
+cgballoc(struct uufsd *disk)
+{
+ u_int8_t *blksfree;
+ struct cg *cgp;
+ struct fs *fs;
+ long bno;
+
+ fs = &disk->d_fs;
+ cgp = &disk->d_cg;
+ blksfree = cg_blksfree(cgp);
+ for (bno = 0; bno < fs->fs_fpg / fs->fs_frag; bno++)
+ if (ffs_isblock(fs, blksfree, bno))
+ goto gotit;
+ return (0);
+gotit:
+ fs->fs_cs(fs, cgp->cg_cgx).cs_nbfree--;
+ ffs_clrblock(fs, blksfree, (long)bno);
+ ffs_clusteracct(fs, cgp, bno, -1);
+ cgp->cg_cs.cs_nbfree--;
+ fs->fs_cstotal.cs_nbfree--;
+ fs->fs_fmod = 1;
+ return (cgbase(fs, cgp->cg_cgx) + blkstofrags(fs, bno));
+}
+
+ino_t
+cgialloc(struct uufsd *disk)
+{
+ struct ufs2_dinode *dp2;
+ u_int8_t *inosused;
+ struct cg *cgp;
+ struct fs *fs;
+ ino_t ino;
+ int i;
+
+ fs = &disk->d_fs;
+ cgp = &disk->d_cg;
+ inosused = cg_inosused(cgp);
+ for (ino = 0; ino < fs->fs_ipg / NBBY; ino++)
+ if (isclr(inosused, ino))
+ goto gotit;
+ return (0);
+gotit:
+ if (fs->fs_magic == FS_UFS2_MAGIC &&
+ ino + INOPB(fs) > cgp->cg_initediblk &&
+ cgp->cg_initediblk < cgp->cg_niblk) {
+ char block[MAXBSIZE];
+ bzero(block, (int)fs->fs_bsize);
+ dp2 = (struct ufs2_dinode *)█
+ for (i = 0; i < INOPB(fs); i++) {
+ dp2->di_gen = arc4random() / 2 + 1;
+ dp2++;
+ }
+ if (bwrite(disk, ino_to_fsba(fs,
+ cgp->cg_cgx * fs->fs_ipg + cgp->cg_initediblk),
+ block, fs->fs_bsize))
+ return (0);
+ cgp->cg_initediblk += INOPB(fs);
+ }
+
+ setbit(inosused, ino);
+ cgp->cg_irotor = ino;
+ cgp->cg_cs.cs_nifree--;
+ fs->fs_cstotal.cs_nifree--;
+ fs->fs_cs(fs, cgp->cg_cgx).cs_nifree--;
+ fs->fs_fmod = 1;
+
+ return (ino + (cgp->cg_cgx * fs->fs_ipg));
+}
+
int
cgread(struct uufsd *disk)
{
@@ -55,14 +126,12 @@ int
cgread1(struct uufsd *disk, int c)
{
struct fs *fs;
- off_t ccg;
fs = &disk->d_fs;
if (c >= fs->fs_ncg) {
return (0);
}
- ccg = fsbtodb(fs, cgtod(fs, c)) * disk->d_bsize;
if (bread(disk, fsbtodb(fs, cgtod(fs, c)), disk->d_cgunion.d_buf,
fs->fs_bsize) == -1) {
ERROR(disk, "unable to read cylinder group");
@@ -71,3 +140,23 @@ cgread1(struct uufsd *disk, int c)
disk->d_lcg = c;
return (1);
}
+
+int
+cgwrite(struct uufsd *disk)
+{
+ return (cgwrite1(disk, disk->d_lcg));
+}
+
+int
+cgwrite1(struct uufsd *disk, int c)
+{
+ struct fs *fs;
+
+ fs = &disk->d_fs;
+ if (bwrite(disk, fsbtodb(fs, cgtod(fs, c)),
+ disk->d_cgunion.d_buf, fs->fs_bsize) == -1) {
+ ERROR(disk, "unable to write cylinder group");
+ return (-1);
+ }
+ return (0);
+}
Modified: projects/suj/6/lib/libufs/inode.c
==============================================================================
--- projects/suj/6/lib/libufs/inode.c Wed Jan 20 21:30:52 2010 (r202719)
+++ projects/suj/6/lib/libufs/inode.c Wed Jan 20 22:18:57 2010 (r202720)
@@ -93,3 +93,19 @@ gotit: switch (disk->d_ufs) {
ERROR(disk, "unknown UFS filesystem type");
return (-1);
}
+
+int
+putino(struct uufsd *disk)
+{
+ struct fs *fs;
+
+ fs = &disk->d_fs;
+ if (disk->d_inoblock == NULL) {
+ ERROR(disk, "No inode block allocated");
+ return (-1);
+ }
+ if (bwrite(disk, fsbtodb(fs, ino_to_fsba(&disk->d_fs, disk->d_inomin)),
+ disk->d_inoblock, disk->d_fs.fs_bsize) <= 0)
+ return (-1);
+ return (0);
+}
Modified: projects/suj/6/lib/libufs/libufs.h
==============================================================================
--- projects/suj/6/lib/libufs/libufs.h Wed Jan 20 21:30:52 2010 (r202719)
+++ projects/suj/6/lib/libufs/libufs.h Wed Jan 20 22:18:57 2010 (r202720)
@@ -71,6 +71,7 @@ struct uufsd {
int d_fd; /* raw device file descriptor */
long d_bsize; /* device bsize */
ufs2_daddr_t d_sblock; /* superblock location */
+ struct csum *d_sbcsum; /* Superblock summary info */
caddr_t d_inoblock; /* inode block */
ino_t d_inomin; /* low inode */
ino_t d_inomax; /* high inode */
@@ -108,13 +109,18 @@ ssize_t bwrite(struct uufsd *, ufs2_dadd
/*
* cgroup.c
*/
+ufs2_daddr_t cgballoc(struct uufsd *);
+ino_t cgialloc(struct uufsd *);
int cgread(struct uufsd *);
int cgread1(struct uufsd *, int);
+int cgwrite(struct uufsd *);
+int cgwrite1(struct uufsd *, int);
/*
* inode.c
*/
int getino(struct uufsd *, void **, ino_t, int *);
+int putino(struct uufsd *);
/*
* sblock.c
@@ -130,6 +136,16 @@ int ufs_disk_fillout(struct uufsd *, con
int ufs_disk_fillout_blank(struct uufsd *, const char *);
int ufs_disk_write(struct uufsd *);
+/*
+ * ffs_subr.c
+ */
+void ffs_clrblock(struct fs *, u_char *, ufs1_daddr_t);
+void ffs_clusteracct(struct fs *, struct cg *, ufs1_daddr_t, int);
+void ffs_fragacct(struct fs *, int, int32_t [], int);
+int ffs_isblock(struct fs *, u_char *, ufs1_daddr_t);
+int ffs_isfreeblock(struct fs *, u_char *, ufs1_daddr_t);
+void ffs_setblock(struct fs *, u_char *, ufs1_daddr_t);
+
__END_DECLS
#endif /* __LIBUFS_H__ */
Modified: projects/suj/6/lib/libufs/sblock.c
==============================================================================
--- projects/suj/6/lib/libufs/sblock.c Wed Jan 20 21:30:52 2010 (r202719)
+++ projects/suj/6/lib/libufs/sblock.c Wed Jan 20 22:18:57 2010 (r202720)
@@ -40,6 +40,7 @@ __FBSDID("$FreeBSD$");
#include <errno.h>
#include <stdio.h>
#include <string.h>
+#include <stdlib.h>
#include <unistd.h>
#include <libufs.h>
@@ -49,8 +50,11 @@ static int superblocks[] = SBLOCKSEARCH;
int
sbread(struct uufsd *disk)
{
+ uint8_t block[MAXBSIZE];
struct fs *fs;
int sb, superblock;
+ int i, size, blks;
+ uint8_t *space;
ERROR(disk, NULL);
@@ -86,6 +90,34 @@ sbread(struct uufsd *disk)
}
disk->d_bsize = fs->fs_fsize / fsbtodb(fs, 1);
disk->d_sblock = superblock / disk->d_bsize;
+ /*
+ * Read in the superblock summary information.
+ */
+ size = fs->fs_cssize;
+ blks = howmany(size, fs->fs_fsize);
+ size += fs->fs_ncg * sizeof(int32_t);
+ space = malloc(size);
+ if (space == NULL) {
+ ERROR(disk, "failed to allocate space for summary information");
+ return (-1);
+ }
+ fs->fs_csp = (struct csum *)space;
+ for (i = 0; i < blks; i += fs->fs_frag) {
+ size = fs->fs_bsize;
+ if (i + fs->fs_frag > blks)
+ size = (blks - i) * fs->fs_fsize;
+ if (bread(disk, fsbtodb(fs, fs->fs_csaddr + i), block, size)
+ == -1) {
+ ERROR(disk, "Failed to read sb summary information");
+ free(fs->fs_csp);
+ return (-1);
+ }
+ bcopy(block, space, size);
+ space += size;
+ }
+ fs->fs_maxcluster = (uint32_t *)space;
+ disk->d_sbcsum = fs->fs_csp;
+
return (0);
}
@@ -93,7 +125,8 @@ int
sbwrite(struct uufsd *disk, int all)
{
struct fs *fs;
- int i;
+ int i, blks, size;
+ uint8_t *space;
ERROR(disk, NULL);
@@ -107,6 +140,22 @@ sbwrite(struct uufsd *disk, int all)
ERROR(disk, "failed to write superblock");
return (-1);
}
+ /*
+ * Write superblock summary information.
+ */
+ blks = howmany(fs->fs_cssize, fs->fs_fsize);
+ space = (uint8_t *)disk->d_sbcsum;
+ for (i = 0; i < blks; i += fs->fs_frag) {
+ size = fs->fs_bsize;
+ if (i + fs->fs_frag > blks)
+ size = (blks - i) * fs->fs_fsize;
+ if (bwrite(disk, fsbtodb(fs, fs->fs_csaddr + i), space, size)
+ == -1) {
+ ERROR(disk, "Failed to write sb summary information");
+ return (-1);
+ }
+ space += size;
+ }
if (all) {
for (i = 0; i < fs->fs_ncg; i++)
if (bwrite(disk, fsbtodb(fs, cgsblock(fs, i)),
Modified: projects/suj/6/lib/libufs/type.c
==============================================================================
--- projects/suj/6/lib/libufs/type.c Wed Jan 20 21:30:52 2010 (r202719)
+++ projects/suj/6/lib/libufs/type.c Wed Jan 20 22:18:57 2010 (r202720)
@@ -66,6 +66,10 @@ ufs_disk_close(struct uufsd *disk)
free((char *)(uintptr_t)disk->d_name);
disk->d_name = NULL;
}
+ if (disk->d_sbcsum != NULL) {
+ free(disk->d_sbcsum);
+ disk->d_sbcsum = NULL;
+ }
return (0);
}
@@ -124,6 +128,7 @@ again: if (stat(name, &st) < 0) {
disk->d_mine = 0;
disk->d_ufs = 0;
disk->d_error = NULL;
+ disk->d_sbcsum = NULL;
if (oname != name) {
name = strdup(name);
Modified: projects/suj/6/sbin/fsck_ffs/Makefile
==============================================================================
--- projects/suj/6/sbin/fsck_ffs/Makefile Wed Jan 20 21:30:52 2010 (r202719)
+++ projects/suj/6/sbin/fsck_ffs/Makefile Wed Jan 20 22:18:57 2010 (r202720)
@@ -7,7 +7,9 @@ LINKS+= ${BINDIR}/fsck_ffs ${BINDIR}/fsc
MAN= fsck_ffs.8
MLINKS= fsck_ffs.8 fsck_ufs.8 fsck_ffs.8 fsck_4.2bsd.8
SRCS= dir.c ea.c fsutil.c inode.c main.c pass1.c pass1b.c pass2.c pass3.c \
- pass4.c pass5.c setup.c utilities.c ffs_subr.c ffs_tables.c
+ pass4.c pass5.c setup.c suj.c utilities.c
+DPADD= ${LIBUFS}
+LDADD= -lufs
WARNS?= 2
CFLAGS+= -I${.CURDIR}
Modified: projects/suj/6/sbin/fsck_ffs/fsck.h
==============================================================================
--- projects/suj/6/sbin/fsck_ffs/fsck.h Wed Jan 20 21:30:52 2010 (r202719)
+++ projects/suj/6/sbin/fsck_ffs/fsck.h Wed Jan 20 22:18:57 2010 (r202720)
@@ -275,6 +275,7 @@ int bkgrdcheck; /* determine if backgro
int bkgrdsumadj; /* whether the kernel have ability to adjust superblock summary */
char usedsoftdep; /* just fix soft dependency inconsistencies */
char preen; /* just fix normal inconsistencies */
+char ckclean; /* only do work if not cleanly unmounted */
char rerun; /* rerun fsck. Only used in non-preen mode */
int returntosingle; /* 1 => return to single user mode on exit */
char resolved; /* cleared if unresolved changes => not clean */
@@ -328,9 +329,9 @@ ino_t allocdir(ino_t parent, ino_t requ
ino_t allocino(ino_t request, int type);
void blkerror(ino_t ino, const char *type, ufs2_daddr_t blk);
char *blockcheck(char *name);
-int bread(int fd, char *buf, ufs2_daddr_t blk, long size);
+int blread(int fd, char *buf, ufs2_daddr_t blk, long size);
void bufinit(void);
-void bwrite(int fd, char *buf, ufs2_daddr_t blk, long size);
+void blwrite(int fd, char *buf, ufs2_daddr_t blk, long size);
void cacheino(union dinode *dp, ino_t inumber);
void catch(int);
void catchquit(int);
@@ -344,10 +345,6 @@ void direrror(ino_t ino, const char *er
int dirscan(struct inodesc *);
int dofix(struct inodesc *, const char *msg);
int eascan(struct inodesc *, struct ufs2_dinode *dp);
-void ffs_clrblock(struct fs *, u_char *, ufs1_daddr_t);
-void ffs_fragacct(struct fs *, int, int32_t [], int);
-int ffs_isblock(struct fs *, u_char *, ufs1_daddr_t);
-void ffs_setblock(struct fs *, u_char *, ufs1_daddr_t);
void fileerror(ino_t cwd, ino_t ino, const char *errmesg);
int findino(struct inodesc *);
int findname(struct inodesc *);
@@ -388,3 +385,4 @@ void rwerror(const char *mesg, ufs2_dad
void sblock_init(void);
void setinodebuf(ino_t);
int setup(char *dev);
+void suj_check(const char *filesys);
Modified: projects/suj/6/sbin/fsck_ffs/fsck_ffs.8
==============================================================================
--- projects/suj/6/sbin/fsck_ffs/fsck_ffs.8 Wed Jan 20 21:30:52 2010 (r202719)
+++ projects/suj/6/sbin/fsck_ffs/fsck_ffs.8 Wed Jan 20 22:18:57 2010 (r202720)
@@ -46,9 +46,9 @@
.Ar ...
.Sh DESCRIPTION
The specified disk partitions and/or file systems are checked.
-In "preen" mode the clean flag of each file system's superblock is examined
-and only those file systems that
-are not marked clean are checked.
+In "preen" or "check clean" mode the clean flag of each file system's
+superblock is examined and only those file systems that are not marked clean
+are checked.
File systems are marked clean when they are unmounted,
when they have been mounted read-only, or when
.Nm
@@ -175,6 +175,14 @@ Use the block specified immediately afte
the super block for the file system.
An alternate super block is usually located at block 32 for UFS1,
and block 160 for UFS2.
+.It Fl C
+Check if file system was dismouted cleanly.
+If so, skip file system checks (like "preen").
+However, if the file system was not cleanly dismounted, do full checks,
+is if
+.Nm
+was invoked without
+.Fl C .
.It Fl c
Convert the file system to the specified level.
Note that the level of a file system can only be raised.
Modified: projects/suj/6/sbin/fsck_ffs/fsutil.c
==============================================================================
--- projects/suj/6/sbin/fsck_ffs/fsutil.c Wed Jan 20 21:30:52 2010 (r202719)
+++ projects/suj/6/sbin/fsck_ffs/fsutil.c Wed Jan 20 22:18:57 2010 (r202720)
@@ -221,7 +221,7 @@ getblk(struct bufarea *bp, ufs2_daddr_t
if (bp->b_bno != dblk) {
flush(fswritefd, bp);
diskreads++;
- bp->b_errs = bread(fsreadfd, bp->b_un.b_buf, dblk, size);
+ bp->b_errs = blread(fsreadfd, bp->b_un.b_buf, dblk, size);
bp->b_bno = dblk;
bp->b_size = size;
}
@@ -244,11 +244,11 @@ flush(int fd, struct bufarea *bp)
(bp->b_errs == bp->b_size / dev_bsize) ? "" : "PARTIALLY ",
(long long)bp->b_bno);
bp->b_errs = 0;
- bwrite(fd, bp->b_un.b_buf, bp->b_bno, (long)bp->b_size);
+ blwrite(fd, bp->b_un.b_buf, bp->b_bno, (long)bp->b_size);
if (bp != &sblk)
return;
for (i = 0, j = 0; i < sblock.fs_cssize; i += sblock.fs_bsize, j++) {
- bwrite(fswritefd, (char *)sblock.fs_csp + i,
+ blwrite(fswritefd, (char *)sblock.fs_csp + i,
fsbtodb(&sblock, sblock.fs_csaddr + j * sblock.fs_frag),
sblock.fs_cssize - i < sblock.fs_bsize ?
sblock.fs_cssize - i : sblock.fs_bsize);
@@ -345,7 +345,7 @@ ckfini(int markclean)
}
int
-bread(int fd, char *buf, ufs2_daddr_t blk, long size)
+blread(int fd, char *buf, ufs2_daddr_t blk, long size)
{
char *cp;
int i, errs;
@@ -387,7 +387,7 @@ bread(int fd, char *buf, ufs2_daddr_t bl
}
void
-bwrite(int fd, char *buf, ufs2_daddr_t blk, long size)
+blwrite(int fd, char *buf, ufs2_daddr_t blk, long size)
{
int i;
char *cp;
Modified: projects/suj/6/sbin/fsck_ffs/inode.c
==============================================================================
--- projects/suj/6/sbin/fsck_ffs/inode.c Wed Jan 20 21:30:52 2010 (r202719)
+++ projects/suj/6/sbin/fsck_ffs/inode.c Wed Jan 20 22:18:57 2010 (r202720)
@@ -332,7 +332,7 @@ getnextinode(ino_t inumber)
* If bread returns an error, it will already have zeroed
* out the buffer, so we do not need to do so here.
*/
- (void)bread(fsreadfd, inodebuf, dblk, size);
+ (void)blread(fsreadfd, inodebuf, dblk, size);
nextinop = inodebuf;
}
dp = (union dinode *)nextinop;
Modified: projects/suj/6/sbin/fsck_ffs/main.c
==============================================================================
--- projects/suj/6/sbin/fsck_ffs/main.c Wed Jan 20 21:30:52 2010 (r202719)
+++ projects/suj/6/sbin/fsck_ffs/main.c Wed Jan 20 22:18:57 2010 (r202720)
@@ -79,7 +79,7 @@ main(int argc, char *argv[])
sync();
skipclean = 1;
- while ((ch = getopt(argc, argv, "b:Bc:dfFm:npy")) != -1) {
+ while ((ch = getopt(argc, argv, "b:Bc:CdfFm:npy")) != -1) {
switch (ch) {
case 'b':
skipclean = 0;
@@ -125,6 +125,10 @@ main(int argc, char *argv[])
case 'p':
preen++;
+ /*FALLTHROUGH*/
+
+ case 'C':
+ ckclean++;
break;
case 'y':
@@ -144,7 +148,7 @@ main(int argc, char *argv[])
if (signal(SIGINT, SIG_IGN) != SIG_IGN)
(void)signal(SIGINT, catch);
- if (preen)
+ if (ckclean)
(void)signal(SIGQUIT, catchquit);
signal(SIGINFO, infohandler);
if (bkgrdflag) {
@@ -202,7 +206,7 @@ checkfilesys(char *filesys)
size_t size;
cdevname = filesys;
- if (debug && preen)
+ if (debug && ckclean)
pwarn("starting\n");
/*
* Make best effort to get the disk name. Check first to see
@@ -237,6 +241,26 @@ checkfilesys(char *filesys)
exit(7); /* Filesystem clean, report it now */
exit(0);
}
+ if (ckclean && skipclean) {
+ /*
+ * If file system is su+j, check it here.
+ */
+ if ((fsreadfd = open(filesys, O_RDONLY)) < 0 || readsb(0) == 0)
+ exit(3); /* Cannot read superblock */
+ close(fsreadfd);
+#if 0
+ if ((sblock.fs_flags & FS_SUJ) != 0) {
+ if (sblock.fs_clean == 1) {
+ pwarn("FILE SYSTEM CLEAN; SKIPPING CHECKS\n");
+ exit(0);
+ }
+ suj_check(filesys);
+ if (chkdoreload(mntp) == 0)
+ exit(0);
+ exit(4);
+ }
+#endif
+ }
/*
* If we are to do a background check:
* Get the mount point information of the file system
@@ -257,13 +281,13 @@ checkfilesys(char *filesys)
pfatal("MOUNTED READ-ONLY, CANNOT RUN IN BACKGROUND\n");
} else if ((fsreadfd = open(filesys, O_RDONLY)) >= 0) {
if (readsb(0) != 0) {
- if (sblock.fs_flags & FS_NEEDSFSCK) {
+ if (sblock.fs_flags & (FS_NEEDSFSCK | FS_SUJ)) {
bkgrdflag = 0;
pfatal("UNEXPECTED INCONSISTENCY, %s\n",
"CANNOT RUN IN BACKGROUND\n");
}
if ((sblock.fs_flags & FS_UNCLEAN) == 0 &&
- skipclean && preen) {
+ skipclean && ckclean) {
/*
* file system is clean;
* skip snapshot and report it clean
@@ -430,6 +454,7 @@ checkfilesys(char *filesys)
inocleanup();
if (fsmodified) {
sblock.fs_time = time(NULL);
+ sblock.fs_mtime = time(NULL);
sbdirty();
}
if (cvtlevel && sblk.b_dirty) {
@@ -437,7 +462,7 @@ checkfilesys(char *filesys)
* Write out the duplicate super blocks
*/
for (cylno = 0; cylno < sblock.fs_ncg; cylno++)
- bwrite(fswritefd, (char *)&sblock,
+ blwrite(fswritefd, (char *)&sblock,
fsbtodb(&sblock, cgsblock(&sblock, cylno)),
SBLOCKSIZE);
}
Modified: projects/suj/6/sbin/fsck_ffs/pass4.c
==============================================================================
--- projects/suj/6/sbin/fsck_ffs/pass4.c Wed Jan 20 21:30:52 2010 (r202719)
+++ projects/suj/6/sbin/fsck_ffs/pass4.c Wed Jan 20 22:18:57 2010 (r202720)
@@ -72,6 +72,9 @@ pass4(void)
for (i = 0; i < inostathead[cg].il_numalloced; i++, inumber++) {
if (inumber < ROOTINO)
continue;
+ if (sblock.fs_flags & FS_SUJ &&
+ inumber == sblock.fs_sujournal)
+ continue;
idesc.id_number = inumber;
switch (inoinfo(inumber)->ino_state) {
Modified: projects/suj/6/sbin/fsck_ffs/pass5.c
==============================================================================
--- projects/suj/6/sbin/fsck_ffs/pass5.c Wed Jan 20 21:30:52 2010 (r202719)
+++ projects/suj/6/sbin/fsck_ffs/pass5.c Wed Jan 20 22:18:57 2010 (r202720)
@@ -45,6 +45,7 @@ __FBSDID("$FreeBSD$");
#include <inttypes.h>
#include <limits.h>
#include <string.h>
+#include <libufs.h>
#include "fsck.h"
Modified: projects/suj/6/sbin/fsck_ffs/setup.c
==============================================================================
--- projects/suj/6/sbin/fsck_ffs/setup.c Wed Jan 20 21:30:52 2010 (r202719)
+++ projects/suj/6/sbin/fsck_ffs/setup.c Wed Jan 20 22:18:57 2010 (r202720)
@@ -65,7 +65,7 @@ static struct disklabel *getdisklabel(ch
/*
* Read in a superblock finding an alternate if necessary.
* Return 1 if successful, 0 if unsuccessful, -1 if file system
- * is already clean (preen mode only).
+ * is already clean (ckclean and preen mode only).
*/
int
setup(char *dev)
@@ -201,7 +201,7 @@ setup(char *dev)
pwarn("USING ALTERNATE SUPERBLOCK AT %d\n", bflag);
bflag = 0;
}
- if (skipclean && preen && sblock.fs_clean) {
+ if (skipclean && ckclean && sblock.fs_clean) {
pwarn("FILE SYSTEM CLEAN; SKIPPING CHECKS\n");
return (-1);
}
@@ -249,7 +249,7 @@ setup(char *dev)
for (i = 0, j = 0; i < sblock.fs_cssize; i += sblock.fs_bsize, j++) {
size = sblock.fs_cssize - i < sblock.fs_bsize ?
sblock.fs_cssize - i : sblock.fs_bsize;
- if (bread(fsreadfd, (char *)sblock.fs_csp + i,
+ if (blread(fsreadfd, (char *)sblock.fs_csp + i,
fsbtodb(&sblock, sblock.fs_csaddr + j * sblock.fs_frag),
size) != 0 && !asked) {
pfatal("BAD SUMMARY INFORMATION");
@@ -322,7 +322,7 @@ readsb(int listerr)
if (bflag) {
super = bflag;
- if ((bread(fsreadfd, (char *)&sblock, super, (long)SBLOCKSIZE)))
+ if ((blread(fsreadfd, (char *)&sblock, super, (long)SBLOCKSIZE)))
return (0);
if (sblock.fs_magic == FS_BAD_MAGIC) {
fprintf(stderr, BAD_MAGIC_MSG);
@@ -337,7 +337,7 @@ readsb(int listerr)
} else {
for (i = 0; sblock_try[i] != -1; i++) {
super = sblock_try[i] / dev_bsize;
- if ((bread(fsreadfd, (char *)&sblock, super,
+ if ((blread(fsreadfd, (char *)&sblock, super,
(long)SBLOCKSIZE)))
return (0);
if (sblock.fs_magic == FS_BAD_MAGIC) {
Copied: projects/suj/6/sbin/fsck_ffs/suj.c (from r202690, projects/suj/7/sbin/fsck_ffs/suj.c)
==============================================================================
--- /dev/null 00:00:00 1970 (empty, because file is newly added)
+++ projects/suj/6/sbin/fsck_ffs/suj.c Wed Jan 20 22:18:57 2010 (r202720, copy of r202690, projects/suj/7/sbin/fsck_ffs/suj.c)
@@ -0,0 +1,2065 @@
+/*-
+ * Copyright (c) 2009 Jeffrey W. Roberson <jeff at FreeBSD.org>
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHORS AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHORS OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ */
+
+#include <sys/cdefs.h>
+__FBSDID("$FreeBSD$");
+
+#include <sys/param.h>
+#include <sys/disklabel.h>
+#include <sys/mount.h>
+#include <sys/stat.h>
+
+#include <ufs/ufs/ufsmount.h>
+#include <ufs/ufs/dinode.h>
+#include <ufs/ufs/dir.h>
+#include <ufs/ffs/fs.h>
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <stdint.h>
+#include <libufs.h>
+#include <strings.h>
+#include <err.h>
+#include <assert.h>
+
+#include "fsck.h"
+
+static void ino_decr(ino_t);
+
+#define SUJ_HASHSIZE 128
+#define SUJ_HASHMASK (SUJ_HASHSIZE - 1)
+#define SUJ_HASH(x) ((x * 2654435761) & SUJ_HASHMASK)
+
+struct suj_seg {
+ TAILQ_ENTRY(suj_seg) ss_next;
+ struct jsegrec ss_rec;
+ uint8_t *ss_blk;
+};
+
+struct suj_rec {
+ TAILQ_ENTRY(suj_rec) sr_next;
+ union jrec *sr_rec;
+};
+TAILQ_HEAD(srechd, suj_rec);
+
+struct suj_ino {
+ LIST_ENTRY(suj_ino) si_next;
+ struct srechd si_recs;
+ struct srechd si_movs;
+ ino_t si_ino;
+ int si_nlinkadj;
+ int si_skipparent;
+ int si_linkadj;
+ int si_hasrecs;
+ int si_blkadj;
+};
+LIST_HEAD(inohd, suj_ino);
+
+struct suj_blk {
+ LIST_ENTRY(suj_blk) sb_next;
+ struct srechd sb_recs;
+ ufs2_daddr_t sb_blk;
+};
+LIST_HEAD(blkhd, suj_blk);
+
+struct data_blk {
+ LIST_ENTRY(data_blk) db_next;
+ uint8_t *db_buf;
+ ufs2_daddr_t db_blk;
+ int db_size;
+};
+
+struct ino_blk {
+ LIST_ENTRY(ino_blk) ib_next;
+ uint8_t *ib_buf;
+ int ib_dirty;
+ ufs2_daddr_t ib_blk;
+};
+LIST_HEAD(iblkhd, ino_blk);
+
+struct suj_cg {
+ LIST_ENTRY(suj_cg) sc_next;
+ struct blkhd sc_blkhash[SUJ_HASHSIZE];
+ struct inohd sc_inohash[SUJ_HASHSIZE];
+ struct iblkhd sc_iblkhash[SUJ_HASHSIZE];
+ struct ino_blk *sc_lastiblk;
+ uint8_t *sc_cgbuf;
+ struct cg *sc_cgp;
+ int sc_dirty;
+ int sc_cgx;
+};
+
+LIST_HEAD(cghd, suj_cg) cghash[SUJ_HASHSIZE];
+LIST_HEAD(dblkhd, data_blk) dbhash[SUJ_HASHSIZE];
+
+TAILQ_HEAD(seghd, suj_seg) allsegs;
+uint64_t oldseq;
+static struct uufsd *disk = NULL;
+static struct fs *fs = NULL;
+
+/*
+ * Summary statistics.
+ */
+uint64_t freefrags;
+uint64_t freeblocks;
+uint64_t freeinos;
+uint64_t freedir;
+uint64_t jbytes;
+uint64_t jrecs;
+
+typedef void (*ino_visitor)(ino_t, ufs_lbn_t, ufs2_daddr_t, int);
+
+static void *
+errmalloc(size_t n)
+{
+ void *a;
+
+ a = malloc(n);
+ if (a == NULL)
+ errx(1, "malloc(%zu)", n);
+ return (a);
+}
+
+/*
+ * Open the given provider, load superblock.
+ */
+static void
+opendisk(const char *devnam)
+{
+ if (disk != NULL)
+ return;
+ disk = malloc(sizeof(*disk));
+ if (disk == NULL)
+ errx(1, "malloc(%zu)", sizeof(*disk));
+ if (ufs_disk_fillout(disk, devnam) == -1) {
+ err(1, "ufs_disk_fillout(%s) failed: %s", devnam,
+ disk->d_error);
+ }
+ fs = &disk->d_fs;
+ /*
+ * Setup a few things so reply() can work.
+ */
+ bcopy(fs, &sblock, sizeof(sblock));
+ fsreadfd = disk->d_fd;
+ fswritefd = disk->d_fd;
+}
+
+/*
+ * Mark file system as clean, write the super-block back, close the disk.
+ */
+static void
+closedisk(const char *devnam)
+{
+ struct csum *cgsum;
+ int i;
+
+ /*
+ * Recompute the fs summary info from correct cs summaries.
+ */
+ bzero(&fs->fs_cstotal, sizeof(struct csum_total));
+ for (i = 0; i < fs->fs_ncg; i++) {
+ cgsum = &fs->fs_cs(fs, i);
+ fs->fs_cstotal.cs_nffree += cgsum->cs_nffree;
+ fs->fs_cstotal.cs_nbfree += cgsum->cs_nbfree;
+ fs->fs_cstotal.cs_nifree += cgsum->cs_nifree;
+ fs->fs_cstotal.cs_ndir += cgsum->cs_ndir;
+ }
+ /* XXX Don't set clean for now, we don't trust the journal. */
+ /* fs->fs_clean = 1; */
+ fs->fs_time = time(NULL);
+ fs->fs_mtime = time(NULL);
+ if (sbwrite(disk, 0) == -1)
+ err(1, "sbwrite(%s)", devnam);
+ if (ufs_disk_close(disk) == -1)
+ err(1, "ufs_disk_close(%s)", devnam);
+ free(disk);
+ disk = NULL;
+ fs = NULL;
+ fsreadfd = -1;
+ fswritefd = -1;
+}
+
+/*
+ * Lookup a cg by number in the hash so we can keep track of which cgs
+ * need stats rebuilt.
+ */
+static struct suj_cg *
+cg_lookup(int cgx)
+{
+ struct cghd *hd;
+ struct suj_cg *sc;
+
+ if (cgx < 0 || cgx >= fs->fs_ncg) {
+ abort();
+ errx(1, "Bad cg number %d", cgx);
+ }
+ hd = &cghash[SUJ_HASH(cgx)];
+ LIST_FOREACH(sc, hd, sc_next)
+ if (sc->sc_cgx == cgx)
+ return (sc);
+ sc = errmalloc(sizeof(*sc));
+ bzero(sc, sizeof(*sc));
+ sc->sc_cgbuf = errmalloc(fs->fs_bsize);
+ sc->sc_cgp = (struct cg *)sc->sc_cgbuf;
+ sc->sc_cgx = cgx;
+ LIST_INSERT_HEAD(hd, sc, sc_next);
+ if (bread(disk, fsbtodb(fs, cgtod(fs, sc->sc_cgx)), sc->sc_cgbuf,
+ fs->fs_bsize) == -1)
+ err(1, "Unable to read cylinder group %d", sc->sc_cgx);
+
+ return (sc);
+}
+
+/*
+ * Lookup an inode number in the hash and allocate a suj_ino if it does
+ * not exist.
+ */
+static struct suj_ino *
+ino_lookup(ino_t ino, int creat)
+{
+ struct suj_ino *sino;
+ struct inohd *hd;
+ struct suj_cg *sc;
+
+ sc = cg_lookup(ino_to_cg(fs, ino));
+ hd = &sc->sc_inohash[SUJ_HASH(ino)];
+ LIST_FOREACH(sino, hd, si_next)
+ if (sino->si_ino == ino)
+ return (sino);
+ if (creat == 0)
+ return (NULL);
+ sino = errmalloc(sizeof(*sino));
+ bzero(sino, sizeof(*sino));
+ sino->si_ino = ino;
+ sino->si_nlinkadj = 0;
+ TAILQ_INIT(&sino->si_recs);
+ TAILQ_INIT(&sino->si_movs);
+ LIST_INSERT_HEAD(hd, sino, si_next);
+
+ return (sino);
+}
+
+/*
+ * Lookup a block number in the hash and allocate a suj_blk if it does
+ * not exist.
+ */
+static struct suj_blk *
+blk_lookup(ufs2_daddr_t blk, int creat)
+{
+ struct suj_blk *sblk;
+ struct suj_cg *sc;
+ struct blkhd *hd;
+
+ sc = cg_lookup(dtog(fs, blk));
+ hd = &sc->sc_blkhash[SUJ_HASH(blk)];
+ LIST_FOREACH(sblk, hd, sb_next)
+ if (sblk->sb_blk == blk)
+ return (sblk);
+ if (creat == 0)
+ return (NULL);
+ sblk = errmalloc(sizeof(*sblk));
+ bzero(sblk, sizeof(*sblk));
+ sblk->sb_blk = blk;
+ TAILQ_INIT(&sblk->sb_recs);
+ LIST_INSERT_HEAD(hd, sblk, sb_next);
+
+ return (sblk);
+}
+
+static uint8_t *
+dblk_read(ufs2_daddr_t blk, int size)
+{
+ struct data_blk *dblk;
+ struct dblkhd *hd;
+
+ hd = &dbhash[SUJ_HASH(blk)];
+ LIST_FOREACH(dblk, hd, db_next)
+ if (dblk->db_blk == blk)
+ goto found;
+ /*
+ * The inode block wasn't located, allocate a new one.
+ */
+ dblk = errmalloc(sizeof(*dblk));
+ bzero(dblk, sizeof(*dblk));
+ LIST_INSERT_HEAD(hd, dblk, db_next);
+ dblk->db_blk = blk;
+found:
+ /*
+ * I doubt size mismatches can happen in practice but it is trivial
+ * to handle.
+ */
+ if (size != dblk->db_size) {
+ if (dblk->db_buf)
+ free(dblk->db_buf);
+ dblk->db_buf = errmalloc(size);
+ dblk->db_size = size;
+ if (bread(disk, fsbtodb(fs, blk), dblk->db_buf, size) == -1)
+ err(1, "Failed to read data block %jd", blk);
+ }
+ return (dblk->db_buf);
+}
+
+static union dinode *
+ino_read(ino_t ino)
+{
+ struct ino_blk *iblk;
+ struct iblkhd *hd;
+ struct suj_cg *sc;
+ ufs2_daddr_t blk;
+ int off;
+
+ blk = ino_to_fsba(fs, ino);
+ sc = cg_lookup(ino_to_cg(fs, ino));
+ hd = &sc->sc_iblkhash[SUJ_HASH(blk)];
+ LIST_FOREACH(iblk, hd, ib_next)
+ if (iblk->ib_blk == blk)
+ goto found;
+ /*
+ * The inode block wasn't located, allocate a new one.
+ */
+ iblk = errmalloc(sizeof(*iblk));
+ bzero(iblk, sizeof(*iblk));
+ iblk->ib_buf = errmalloc(fs->fs_bsize);
+ iblk->ib_blk = blk;
+ LIST_INSERT_HEAD(hd, iblk, ib_next);
+ if (bread(disk, fsbtodb(fs, blk), iblk->ib_buf, fs->fs_bsize) == -1)
+ err(1, "Failed to read inode block %jd", blk);
+found:
+ sc->sc_lastiblk = iblk;
+ off = ino_to_fsbo(fs, ino);
+ if (fs->fs_magic == FS_UFS1_MAGIC)
+ return (union dinode *)&((struct ufs1_dinode *)iblk->ib_buf)[off];
+ else
+ return (union dinode *)&((struct ufs2_dinode *)iblk->ib_buf)[off];
+}
+
+static void
+ino_dirty(ino_t ino)
+{
+ struct ino_blk *iblk;
+ struct iblkhd *hd;
+ struct suj_cg *sc;
*** DIFF OUTPUT TRUNCATED AT 1000 LINES ***
More information about the svn-src-projects
mailing list