Skip site navigation (1)Skip section navigation (2)
Date:      Wed, 20 Jan 2010 22:18:57 +0000 (UTC)
From:      Jeff Roberson <jeff@FreeBSD.org>
To:        src-committers@freebsd.org, svn-src-projects@freebsd.org
Subject:   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...
Message-ID:  <201001202218.o0KMIv16034191@svn.freebsd.org>

next in thread | raw e-mail | index | archive | help
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 *)&block;
+		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@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 ***



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201001202218.o0KMIv16034191>