PERFORCE change 119596 for review
Ulf Lilleengen
lulf at FreeBSD.org
Wed May 9 21:23:36 UTC 2007
http://perforce.freebsd.org/chv.cgi?CH=119596
Change 119596 by lulf at lulf_vimes on 2007/05/09 21:22:40
- Integrate fixup changes into main branch.
- Integrate from lukas.
Affected files ...
.. //depot/projects/soc2007/lulf/gvinum_fixup/sys/conf/NOTES#3 integrate
.. //depot/projects/soc2007/lulf/gvinum_fixup/sys/conf/files#4 integrate
.. //depot/projects/soc2007/lulf/gvinum_fixup/sys/conf/kern.pre.mk#2 integrate
.. //depot/projects/soc2007/lulf/gvinum_fixup/sys/conf/options#2 integrate
.. //depot/projects/soc2007/lulf/gvinum_fixup/sys/geom/eli/g_eli_ctl.c#2 integrate
.. //depot/projects/soc2007/lulf/gvinum_fixup/sys/geom/geom.h#2 integrate
.. //depot/projects/soc2007/lulf/gvinum_fixup/sys/geom/geom_dev.c#2 integrate
.. //depot/projects/soc2007/lulf/gvinum_fixup/sys/geom/geom_disk.c#2 integrate
.. //depot/projects/soc2007/lulf/gvinum_fixup/sys/geom/geom_disk.h#2 integrate
.. //depot/projects/soc2007/lulf/gvinum_fixup/sys/geom/geom_io.c#2 integrate
.. //depot/projects/soc2007/lulf/gvinum_fixup/sys/geom/geom_slice.c#2 integrate
.. //depot/projects/soc2007/lulf/gvinum_fixup/sys/geom/geom_subr.c#2 integrate
.. //depot/projects/soc2007/lulf/gvinum_fixup/sys/geom/part/g_part.c#3 integrate
.. //depot/projects/soc2007/lulf/gvinum_fixup/sys/geom/part/g_part.h#2 integrate
.. //depot/projects/soc2007/lulf/gvinum_fixup/sys/geom/part/g_part_apm.c#2 integrate
.. //depot/projects/soc2007/lulf/gvinum_fixup/sys/geom/part/g_part_gpt.c#2 integrate
.. //depot/projects/soc2007/lulf/gvinum_fixup/sys/geom/vinum/geom_vinum_state.c#9 integrate
.. //depot/projects/soc2007/lulf/gvinum_fixup/sys/geom/vinum/geom_vinum_var.h#7 integrate
.. //depot/projects/soc2007/lulf/gvinum_fixup/sys/i386/acpica/madt.c#2 integrate
.. //depot/projects/soc2007/lulf/gvinum_fixup/sys/i386/conf/GENERIC#2 integrate
.. //depot/projects/soc2007/lulf/gvinum_fixup/sys/i386/conf/NOTES#2 integrate
.. //depot/projects/soc2007/lulf/gvinum_fixup/sys/i386/conf/PAE#2 integrate
.. //depot/projects/soc2007/lulf/gvinum_fixup/sys/i386/i386/intr_machdep.c#2 integrate
.. //depot/projects/soc2007/lulf/gvinum_fixup/sys/i386/i386/io_apic.c#2 integrate
.. //depot/projects/soc2007/lulf/gvinum_fixup/sys/i386/i386/local_apic.c#3 integrate
.. //depot/projects/soc2007/lulf/gvinum_fixup/sys/i386/i386/mp_machdep.c#2 integrate
.. //depot/projects/soc2007/lulf/gvinum_fixup/sys/i386/i386/mptable.c#2 integrate
.. //depot/projects/soc2007/lulf/gvinum_fixup/sys/i386/i386/mptable_pci.c#2 integrate
.. //depot/projects/soc2007/lulf/gvinum_fixup/sys/i386/i386/msi.c#2 integrate
.. //depot/projects/soc2007/lulf/gvinum_fixup/sys/i386/i386/nexus.c#2 integrate
.. //depot/projects/soc2007/lulf/gvinum_fixup/sys/i386/include/apicvar.h#2 integrate
.. //depot/projects/soc2007/lulf/gvinum_fixup/sys/i386/include/intr_machdep.h#2 integrate
.. //depot/projects/soc2007/lulf/gvinum_fixup/sys/i386/include/vmparam.h#3 integrate
.. //depot/projects/soc2007/lulf/gvinum_fixup/sys/i386/isa/atpic.c#2 integrate
.. //depot/projects/soc2007/lulf/gvinum_fixup/sys/i386/pci/pci_bus.c#2 integrate
.. //depot/projects/soc2007/lulf/gvinum_fixup/sys/kern/kern_condvar.c#2 integrate
.. //depot/projects/soc2007/lulf/gvinum_fixup/sys/kern/kern_descrip.c#3 integrate
.. //depot/projects/soc2007/lulf/gvinum_fixup/sys/kern/kern_intr.c#3 integrate
.. //depot/projects/soc2007/lulf/gvinum_fixup/sys/kern/kern_mutex.c#2 integrate
.. //depot/projects/soc2007/lulf/gvinum_fixup/sys/kern/kern_rwlock.c#2 integrate
.. //depot/projects/soc2007/lulf/gvinum_fixup/sys/kern/kern_sx.c#2 integrate
.. //depot/projects/soc2007/lulf/gvinum_fixup/sys/kern/kern_synch.c#2 integrate
.. //depot/projects/soc2007/lulf/gvinum_fixup/sys/kern/sys_generic.c#2 integrate
.. //depot/projects/soc2007/lulf/gvinum_fixup/sys/kern/uipc_debug.c#2 integrate
.. //depot/projects/soc2007/lulf/gvinum_fixup/sys/kern/uipc_sockbuf.c#2 integrate
.. //depot/projects/soc2007/lulf/gvinum_fixup/sys/kern/uipc_socket.c#2 integrate
.. //depot/projects/soc2007/lulf/gvinum_fixup/sys/kern/uipc_syscalls.c#3 integrate
.. //depot/projects/soc2007/lulf/gvinum_fixup/sys/kern/uipc_usrreq.c#2 integrate
.. //depot/projects/soc2007/lulf/gvinum_fixup/sys/kern/vfs_syscalls.c#2 integrate
.. //depot/projects/soc2007/lulf/gvinum_fixup/sys/modules/Makefile#3 integrate
.. //depot/projects/soc2007/lulf/gvinum_fixup/sys/sys/disk.h#2 integrate
.. //depot/projects/soc2007/lulf/gvinum_fixup/sys/sys/filedesc.h#2 integrate
.. //depot/projects/soc2007/lulf/gvinum_fixup/sys/sys/interrupt.h#3 integrate
.. //depot/projects/soc2007/lulf/gvinum_fixup/sys/sys/param.h#2 integrate
.. //depot/projects/soc2007/lulf/gvinum_fixup/sys/sys/rwlock.h#2 integrate
.. //depot/projects/soc2007/lulf/gvinum_fixup/sys/sys/socketvar.h#2 integrate
.. //depot/projects/soc2007/lulf/gvinum_fixup/sys/sys/sx.h#2 integrate
.. //depot/projects/soc2007/lulf/gvinum_fixup/sys/vm/vm_page.c#2 integrate
.. //depot/projects/soc2007/lulf/gvinum_fixup/sys/vm/vm_page.h#2 integrate
.. //depot/projects/soc2007/lulf/gvinum_main/Makefile.inc1#2 integrate
.. //depot/projects/soc2007/lulf/gvinum_main/sys/conf/NOTES#2 integrate
.. //depot/projects/soc2007/lulf/gvinum_main/sys/conf/files#2 integrate
.. //depot/projects/soc2007/lulf/gvinum_main/sys/geom/part/g_part.c#2 integrate
.. //depot/projects/soc2007/lulf/gvinum_main/sys/geom/uzip/g_uzip.c#2 integrate
.. //depot/projects/soc2007/lulf/gvinum_main/sys/geom/vinum/geom_vinum.c#3 integrate
.. //depot/projects/soc2007/lulf/gvinum_main/sys/geom/vinum/geom_vinum.h#3 integrate
.. //depot/projects/soc2007/lulf/gvinum_main/sys/geom/vinum/geom_vinum_init.c#2 integrate
.. //depot/projects/soc2007/lulf/gvinum_main/sys/geom/vinum/geom_vinum_plex.c#3 integrate
.. //depot/projects/soc2007/lulf/gvinum_main/sys/geom/vinum/geom_vinum_raid5.c#2 integrate
.. //depot/projects/soc2007/lulf/gvinum_main/sys/geom/vinum/geom_vinum_raid5.h#3 integrate
.. //depot/projects/soc2007/lulf/gvinum_main/sys/geom/vinum/geom_vinum_rm.c#3 integrate
.. //depot/projects/soc2007/lulf/gvinum_main/sys/geom/vinum/geom_vinum_state.c#3 integrate
.. //depot/projects/soc2007/lulf/gvinum_main/sys/geom/vinum/geom_vinum_subr.c#2 integrate
.. //depot/projects/soc2007/lulf/gvinum_main/sys/geom/vinum/geom_vinum_var.h#3 integrate
.. //depot/projects/soc2007/lulf/gvinum_main/sys/i386/i386/bios.c#2 integrate
.. //depot/projects/soc2007/lulf/gvinum_main/sys/i386/i386/busdma_machdep.c#2 integrate
.. //depot/projects/soc2007/lulf/gvinum_main/sys/i386/i386/identcpu.c#2 integrate
.. //depot/projects/soc2007/lulf/gvinum_main/sys/i386/i386/local_apic.c#2 integrate
.. //depot/projects/soc2007/lulf/gvinum_main/sys/i386/i386/pmap.c#2 integrate
.. //depot/projects/soc2007/lulf/gvinum_main/sys/i386/i386/sys_machdep.c#2 integrate
.. //depot/projects/soc2007/lulf/gvinum_main/sys/i386/i386/vm_machdep.c#2 integrate
.. //depot/projects/soc2007/lulf/gvinum_main/sys/i386/include/vmparam.h#2 integrate
.. //depot/projects/soc2007/lulf/gvinum_main/sys/kern/kern_descrip.c#2 integrate
.. //depot/projects/soc2007/lulf/gvinum_main/sys/kern/kern_intr.c#2 integrate
.. //depot/projects/soc2007/lulf/gvinum_main/sys/kern/kern_linker.c#2 integrate
.. //depot/projects/soc2007/lulf/gvinum_main/sys/kern/kern_malloc.c#2 integrate
.. //depot/projects/soc2007/lulf/gvinum_main/sys/kern/kern_time.c#2 integrate
.. //depot/projects/soc2007/lulf/gvinum_main/sys/kern/kern_uuid.c#2 integrate
.. //depot/projects/soc2007/lulf/gvinum_main/sys/kern/sched_ule.c#2 integrate
.. //depot/projects/soc2007/lulf/gvinum_main/sys/kern/subr_rman.c#2 integrate
.. //depot/projects/soc2007/lulf/gvinum_main/sys/kern/subr_witness.c#2 integrate
.. //depot/projects/soc2007/lulf/gvinum_main/sys/kern/uipc_syscalls.c#2 integrate
.. //depot/projects/soc2007/lulf/gvinum_main/sys/kern/vfs_bio.c#2 integrate
.. //depot/projects/soc2007/lulf/gvinum_main/sys/kern/vfs_mount.c#2 integrate
.. //depot/projects/soc2007/lulf/gvinum_main/sys/modules/Makefile#2 integrate
.. //depot/projects/soc2007/lulf/gvinum_main/sys/sys/interrupt.h#2 integrate
.. //depot/projects/soc2007/lulf/gvinum_main/sys/sys/ioctl_compat.h#2 integrate
.. //depot/projects/soc2007/lulf/gvinum_main/sys/sys/mount.h#2 integrate
.. //depot/projects/soc2007/lulf/gvinum_main/sys/sys/priv.h#2 integrate
.. //depot/projects/soc2007/lulf/gvinum_main/sys/sys/proc.h#2 integrate
.. //depot/projects/soc2007/lulf/gvinum_main/sys/sys/socket.h#2 integrate
.. //depot/projects/soc2007/lulf/gvinum_main/sys/vm/swap_pager.c#2 integrate
.. //depot/projects/soc2007/lulf/gvinum_main/sys/vm/vm_contig.c#2 integrate
.. //depot/projects/soc2007/lulf/gvinum_main/sys/vm/vm_map.c#2 integrate
.. //depot/projects/soc2007/lulf/gvinum_main/sys/vm/vm_param.h#2 integrate
Differences ...
==== //depot/projects/soc2007/lulf/gvinum_fixup/sys/conf/NOTES#3 (text+ko) ====
@@ -1,4 +1,4 @@
-# $FreeBSD: src/sys/conf/NOTES,v 1.1422 2007/04/17 00:35:10 thompsa Exp $
+# $FreeBSD: src/sys/conf/NOTES,v 1.1424 2007/05/09 15:55:45 scottl Exp $
#
# NOTES -- Lines that can be cut/pasted into kernel and hints configs.
#
==== //depot/projects/soc2007/lulf/gvinum_fixup/sys/conf/files#4 (text+ko) ====
@@ -1,4 +1,4 @@
-# $FreeBSD: src/sys/conf/files,v 1.1198 2007/04/25 15:30:17 mav Exp $
+# $FreeBSD: src/sys/conf/files,v 1.1204 2007/05/09 07:07:24 scottl Exp $
#
# The long compile-with and dependency lines are required because of
# limitations in config: backslash-newline doesn't work in strings, and
@@ -600,8 +600,34 @@
dev/ed/if_ed_pci.c optional ed pci
dev/eisa/eisa_if.m standard
dev/eisa/eisaconf.c optional eisa
-dev/em/if_em.c optional em
-dev/em/if_em_hw.c optional em
+dev/em/if_em.c optional em \
+ compile-with "${NORMAL_C} -I$S/dev/em"
+dev/em/e1000_80003es2lan.c optional em \
+ compile-with "${NORMAL_C} -I$S/dev/em"
+dev/em/e1000_82540.c optional em \
+ compile-with "${NORMAL_C} -I$S/dev/em"
+dev/em/e1000_82541.c optional em \
+ compile-with "${NORMAL_C} -I$S/dev/em"
+dev/em/e1000_82542.c optional em \
+ compile-with "${NORMAL_C} -I$S/dev/em"
+dev/em/e1000_82543.c optional em \
+ compile-with "${NORMAL_C} -I$S/dev/em"
+dev/em/e1000_82571.c optional em \
+ compile-with "${NORMAL_C} -I$S/dev/em"
+dev/em/e1000_82575.c optional em \
+ compile-with "${NORMAL_C} -I$S/dev/em"
+dev/em/e1000_api.c optional em \
+ compile-with "${NORMAL_C} -I$S/dev/em"
+dev/em/e1000_ich8lan.c optional em \
+ compile-with "${NORMAL_C} -I$S/dev/em"
+dev/em/e1000_mac.c optional em \
+ compile-with "${NORMAL_C} -I$S/dev/em"
+dev/em/e1000_manage.c optional em \
+ compile-with "${NORMAL_C} -I$S/dev/em"
+dev/em/e1000_nvm.c optional em \
+ compile-with "${NORMAL_C} -I$S/dev/em"
+dev/em/e1000_phy.c optional em \
+ compile-with "${NORMAL_C} -I$S/dev/em"
dev/en/if_en_pci.c optional en pci
dev/en/midway.c optional en
dev/ep/if_ep.c optional ep
@@ -659,6 +685,7 @@
dev/hme/if_hme.c optional hme
dev/hme/if_hme_pci.c optional hme pci
dev/hme/if_hme_sbus.c optional hme sbus
+dev/hptiop/hptiop.c optional hptiop cam
dev/hwpmc/hwpmc_logging.c optional hwpmc
dev/hwpmc/hwpmc_mod.c optional hwpmc
dev/ichsmb/ichsmb.c optional ichsmb
@@ -996,8 +1023,6 @@
dev/tdfx/tdfx_pci.c optional tdfx pci
dev/ti/if_ti.c optional ti pci
dev/trm/trm.c optional trm
-dev/twa/tw_cl_fwimg.c optional twa \
- compile-with "${NORMAL_C} -I$S/dev/twa"
dev/twa/tw_cl_init.c optional twa \
compile-with "${NORMAL_C} -I$S/dev/twa"
dev/twa/tw_cl_intr.c optional twa \
@@ -1045,6 +1070,7 @@
dev/usb/if_kue.c optional kue
dev/usb/if_ural.c optional ural
dev/usb/if_rue.c optional rue
+dev/usb/if_rum.c optional rum
dev/usb/if_udav.c optional udav
dev/usb/ohci.c optional ohci
dev/usb/ohci_pci.c optional ohci pci
==== //depot/projects/soc2007/lulf/gvinum_fixup/sys/conf/kern.pre.mk#2 (text+ko) ====
@@ -1,4 +1,4 @@
-# $FreeBSD: src/sys/conf/kern.pre.mk,v 1.81 2006/10/26 15:16:43 bde Exp $
+# $FreeBSD: src/sys/conf/kern.pre.mk,v 1.82 2007/05/04 00:00:10 jfv Exp $
# Part of a unified Makefile for building kernels. This part contains all
# of the definitions that need to be before %BEFORE_DEPEND.
@@ -76,6 +76,9 @@
# .. and the same for twa
INCLUDES+= -I$S/dev/twa
+# .. and the same for em
+INCLUDES+= -I$S/dev/em
+
# ... and XFS
INCLUDES+= -I$S/gnu/fs/xfs/FreeBSD -I$S/gnu/fs/xfs/FreeBSD/support -I$S/gnu/fs/xfs
==== //depot/projects/soc2007/lulf/gvinum_fixup/sys/conf/options#2 (text+ko) ====
@@ -1,4 +1,4 @@
-# $FreeBSD: src/sys/conf/options,v 1.586 2007/04/14 20:16:03 kmacy Exp $
+# $FreeBSD: src/sys/conf/options,v 1.587 2007/05/06 17:04:34 piso Exp $
#
# On the handling of kernel options
#
@@ -764,3 +764,6 @@
# snd_emu10kx sound driver options
SND_EMU10KX_MULTICHANNEL opt_emu10kx.h
+
+# Interrupt filtering
+INTR_FILTER opt_global.h
==== //depot/projects/soc2007/lulf/gvinum_fixup/sys/geom/eli/g_eli_ctl.c#2 (text+ko) ====
@@ -25,7 +25,7 @@
*/
#include <sys/cdefs.h>
-__FBSDID("$FreeBSD: src/sys/geom/eli/g_eli_ctl.c,v 1.12 2007/03/05 12:41:44 pjd Exp $");
+__FBSDID("$FreeBSD: src/sys/geom/eli/g_eli_ctl.c,v 1.13 2007/05/06 14:56:03 pjd Exp $");
#include <sys/param.h>
#include <sys/systm.h>
@@ -684,6 +684,11 @@
G_ELI_DEBUG(0, "Cannot store metadata on %s "
"(error=%d).", pp->name, error);
}
+ /*
+ * Flush write cache so we don't overwrite data N times in cache
+ * and only once on disk.
+ */
+ g_io_flush(cp);
}
bzero(&md, sizeof(md));
bzero(sector, sizeof(sector));
==== //depot/projects/soc2007/lulf/gvinum_fixup/sys/geom/geom.h#2 (text+ko) ====
@@ -32,7 +32,7 @@
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
*
- * $FreeBSD: src/sys/geom/geom.h,v 1.98 2006/10/31 21:11:20 pjd Exp $
+ * $FreeBSD: src/sys/geom/geom.h,v 1.100 2007/05/05 16:35:22 pjd Exp $
*/
#ifndef _GEOM_GEOM_H_
@@ -230,6 +230,7 @@
int g_handleattr(struct bio *bp, const char *attribute, void *val, int len);
int g_handleattr_int(struct bio *bp, const char *attribute, int val);
int g_handleattr_off_t(struct bio *bp, const char *attribute, off_t val);
+int g_handleattr_str(struct bio *bp, const char *attribute, char *str);
struct g_consumer * g_new_consumer(struct g_geom *gp);
struct g_geom * g_new_geomf(struct g_class *mp, const char *fmt, ...);
struct g_provider * g_new_providerf(struct g_geom *gp, const char *fmt, ...);
@@ -274,6 +275,7 @@
struct bio *g_alloc_bio(void);
void * g_read_data(struct g_consumer *cp, off_t offset, off_t length, int *error);
int g_write_data(struct g_consumer *cp, off_t offset, void *ptr, off_t length);
+int g_delete_data(struct g_consumer *cp, off_t offset, off_t length);
void g_print_bio(struct bio *bp);
/* geom_kern.c / geom_kernsim.c */
==== //depot/projects/soc2007/lulf/gvinum_fixup/sys/geom/geom_dev.c#2 (text+ko) ====
@@ -34,7 +34,7 @@
*/
#include <sys/cdefs.h>
-__FBSDID("$FreeBSD: src/sys/geom/geom_dev.c,v 1.93 2007/03/26 21:47:03 kris Exp $");
+__FBSDID("$FreeBSD: src/sys/geom/geom_dev.c,v 1.94 2007/05/05 17:02:19 pjd Exp $");
#include <sys/param.h>
#include <sys/systm.h>
@@ -245,6 +245,7 @@
struct g_geom *gp;
struct g_consumer *cp;
struct g_kerneldump kd;
+ off_t offset, length;
int i, error;
u_int u;
@@ -294,6 +295,25 @@
if (!error)
dev->si_flags |= SI_DUMPDEV;
break;
+ case DIOCGFLUSH:
+ error = g_io_flush(cp);
+ break;
+ case DIOCGDELETE:
+ offset = ((off_t *)data)[0];
+ length = ((off_t *)data)[1];
+ if ((offset % cp->provider->sectorsize) != 0 ||
+ (length % cp->provider->sectorsize) != 0 ||
+ length <= 0 || length > MAXPHYS) {
+ printf("%s: offset=%jd length=%jd\n", __func__, offset,
+ length);
+ error = EINVAL;
+ break;
+ }
+ error = g_delete_data(cp, offset, length);
+ break;
+ case DIOCGIDENT:
+ error = g_io_getattr("GEOM::ident", cp, &i, data);
+ break;
default:
if (cp->provider->geom->ioctl != NULL) {
==== //depot/projects/soc2007/lulf/gvinum_fixup/sys/geom/geom_disk.c#2 (text+ko) ====
@@ -34,7 +34,7 @@
*/
#include <sys/cdefs.h>
-__FBSDID("$FreeBSD: src/sys/geom/geom_disk.c,v 1.101 2007/02/21 07:45:02 n_hibma Exp $");
+__FBSDID("$FreeBSD: src/sys/geom/geom_disk.c,v 1.104 2007/05/05 18:09:17 pjd Exp $");
#include "opt_geom.h"
@@ -301,6 +301,8 @@
break;
else if (g_handleattr_off_t(bp, "GEOM::frontstuff", 0))
break;
+ else if (g_handleattr_str(bp, "GEOM::ident", dp->d_ident))
+ break;
else if (!strcmp(bp->bio_attribute, "GEOM::kerneldump"))
g_disk_kerneldump(bp, dp);
else
@@ -396,6 +398,45 @@
g_free(dp);
}
+/*
+ * We only allow [a-zA-Z0-9-_@#%.:] characters, the rest is converted to 'x<HH>'.
+ */
+static void
+g_disk_ident_adjust(char *ident, size_t size)
+{
+ char newid[DISK_IDENT_SIZE], tmp[4];
+ size_t len;
+ char *p;
+
+ bzero(newid, sizeof(newid));
+ len = 0;
+ for (p = ident; *p != '\0' && len < sizeof(newid) - 1; p++) {
+ switch (*p) {
+ default:
+ if ((*p < 'a' || *p > 'z') &&
+ (*p < 'A' || *p > 'Z') &&
+ (*p < '0' || *p > '9')) {
+ snprintf(tmp, sizeof(tmp), "x%02hhx", *p);
+ strlcat(newid, tmp, sizeof(newid));
+ len += 3;
+ break;
+ }
+ /* FALLTHROUGH */
+ case '-':
+ case '_':
+ case '@':
+ case '#':
+ case '%':
+ case '.':
+ case ':':
+ newid[len++] = *p;
+ break;
+ }
+ }
+ bzero(ident, size);
+ strlcpy(ident, newid, size);
+}
+
struct disk *
disk_alloc()
{
@@ -408,7 +449,7 @@
void
disk_create(struct disk *dp, int version)
{
- if (version != DISK_VERSION_00) {
+ if (version != DISK_VERSION_00 && version != DISK_VERSION_01) {
printf("WARNING: Attempt to add disk %s%d %s",
dp->d_name, dp->d_unit,
" using incompatible ABI version of disk(9)\n");
@@ -425,6 +466,7 @@
dp->d_sectorsize, DEVSTAT_ALL_SUPPORTED,
DEVSTAT_TYPE_DIRECT, DEVSTAT_PRIORITY_MAX);
dp->d_geom = NULL;
+ g_disk_ident_adjust(dp->d_ident, sizeof(dp->d_ident));
g_post_event(g_disk_create, dp, M_WAITOK, dp, NULL);
}
==== //depot/projects/soc2007/lulf/gvinum_fixup/sys/geom/geom_disk.h#2 (text+ko) ====
@@ -31,7 +31,7 @@
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
*
- * $FreeBSD: src/sys/geom/geom_disk.h,v 1.6 2006/10/31 21:12:43 pjd Exp $
+ * $FreeBSD: src/sys/geom/geom_disk.h,v 1.7 2007/05/05 17:12:15 pjd Exp $
*/
#ifndef _GEOM_GEOM_DISK_H_
@@ -42,6 +42,7 @@
#include <sys/queue.h>
#include <sys/_lock.h>
#include <sys/_mutex.h>
+#include <sys/disk.h>
struct disk;
@@ -83,6 +84,7 @@
u_int d_maxsize;
u_int d_stripeoffset;
u_int d_stripesize;
+ char d_ident[DISK_IDENT_SIZE];
/* Fields private to the driver */
void *d_drv1;
@@ -99,7 +101,8 @@
void disk_gone(struct disk *disk);
#define DISK_VERSION_00 0x58561059
-#define DISK_VERSION DISK_VERSION_00
+#define DISK_VERSION_01 0x5856105a
+#define DISK_VERSION DISK_VERSION_01
#endif /* _KERNEL */
#endif /* _GEOM_GEOM_DISK_H_ */
==== //depot/projects/soc2007/lulf/gvinum_fixup/sys/geom/geom_io.c#2 (text+ko) ====
@@ -34,7 +34,7 @@
*/
#include <sys/cdefs.h>
-__FBSDID("$FreeBSD: src/sys/geom/geom_io.c,v 1.74 2007/02/27 17:23:29 jhb Exp $");
+__FBSDID("$FreeBSD: src/sys/geom/geom_io.c,v 1.75 2007/05/05 16:35:22 pjd Exp $");
#include <sys/param.h>
#include <sys/systm.h>
@@ -646,6 +646,28 @@
return (error);
}
+int
+g_delete_data(struct g_consumer *cp, off_t offset, off_t length)
+{
+ struct bio *bp;
+ int error;
+
+ KASSERT(length > 0 && length >= cp->provider->sectorsize &&
+ length <= MAXPHYS, ("g_delete_data(): invalid length %jd",
+ (intmax_t)length));
+
+ bp = g_alloc_bio();
+ bp->bio_cmd = BIO_DELETE;
+ bp->bio_done = NULL;
+ bp->bio_offset = offset;
+ bp->bio_length = length;
+ bp->bio_data = NULL;
+ g_io_request(bp, cp);
+ error = biowait(bp, "gdelete");
+ g_destroy_bio(bp);
+ return (error);
+}
+
void
g_print_bio(struct bio *bp)
{
==== //depot/projects/soc2007/lulf/gvinum_fixup/sys/geom/geom_slice.c#2 (text+ko) ====
@@ -34,7 +34,7 @@
*/
#include <sys/cdefs.h>
-__FBSDID("$FreeBSD: src/sys/geom/geom_slice.c,v 1.61 2006/10/31 21:23:50 pjd Exp $");
+__FBSDID("$FreeBSD: src/sys/geom/geom_slice.c,v 1.62 2007/05/05 17:52:22 pjd Exp $");
#include <sys/param.h>
#include <sys/systm.h>
@@ -172,6 +172,28 @@
}
static void
+g_slice_done(struct bio *bp)
+{
+
+ KASSERT(bp->bio_cmd == BIO_GETATTR &&
+ strcmp(bp->bio_attribute, "GEOM::ident") == 0,
+ ("bio_cmd=0x%x bio_attribute=%s", bp->bio_cmd, bp->bio_attribute));
+
+ if (bp->bio_error == 0 && bp->bio_data[0] != '\0') {
+ char idx[8];
+
+ /* Add index to the ident received. */
+ snprintf(idx, sizeof(idx), "s%d",
+ bp->bio_parent->bio_to->index);
+ if (strlcat(bp->bio_data, idx, bp->bio_length) >=
+ bp->bio_length) {
+ bp->bio_error = EFAULT;
+ }
+ }
+ g_std_done(bp);
+}
+
+static void
g_slice_start(struct bio *bp)
{
struct bio *bp2;
@@ -251,6 +273,16 @@
/* Give the real method a chance to override */
if (gsp->start != NULL && gsp->start(bp))
return;
+ if (!strcmp("GEOM::ident", bp->bio_attribute)) {
+ bp2 = g_clone_bio(bp);
+ if (bp2 == NULL) {
+ g_io_deliver(bp, ENOMEM);
+ return;
+ }
+ bp2->bio_done = g_slice_done;
+ g_io_request(bp2, cp);
+ return;
+ }
if (!strcmp("GEOM::kerneldump", bp->bio_attribute)) {
struct g_kerneldump *gkd;
==== //depot/projects/soc2007/lulf/gvinum_fixup/sys/geom/geom_subr.c#2 (text+ko) ====
@@ -34,7 +34,7 @@
*/
#include <sys/cdefs.h>
-__FBSDID("$FreeBSD: src/sys/geom/geom_subr.c,v 1.90 2006/09/15 16:36:45 pjd Exp $");
+__FBSDID("$FreeBSD: src/sys/geom/geom_subr.c,v 1.91 2007/05/05 16:33:44 pjd Exp $");
#include "opt_ddb.h"
@@ -790,20 +790,35 @@
}
int
+g_handleattr_str(struct bio *bp, const char *attribute, char *str)
+{
+
+ return (g_handleattr(bp, attribute, str, 0));
+}
+
+int
g_handleattr(struct bio *bp, const char *attribute, void *val, int len)
{
- int error;
+ int error = 0;
if (strcmp(bp->bio_attribute, attribute))
return (0);
- if (bp->bio_length != len) {
- printf("bio_length %jd len %d -> EFAULT\n",
- (intmax_t)bp->bio_length, len);
- error = EFAULT;
- } else {
- error = 0;
+ if (len == 0) {
+ bzero(bp->bio_data, bp->bio_length);
+ if (strlcpy(bp->bio_data, val, bp->bio_length) >=
+ bp->bio_length) {
+ printf("%s: %s bio_length %jd len %zu -> EFAULT\n",
+ __func__, bp->bio_to->name,
+ (intmax_t)bp->bio_length, strlen(val));
+ error = EFAULT;
+ }
+ } else if (bp->bio_length == len) {
bcopy(val, bp->bio_data, len);
bp->bio_completed = len;
+ } else {
+ printf("%s: %s bio_length %jd len %d -> EFAULT\n", __func__,
+ bp->bio_to->name, (intmax_t)bp->bio_length, len);
+ error = EFAULT;
}
g_io_deliver(bp, error);
return (1);
==== //depot/projects/soc2007/lulf/gvinum_fixup/sys/geom/part/g_part.c#3 (text+ko) ====
@@ -25,7 +25,7 @@
*/
#include <sys/cdefs.h>
-__FBSDID("$FreeBSD: src/sys/geom/part/g_part.c,v 1.2 2007/04/27 05:58:10 marcel Exp $");
+__FBSDID("$FreeBSD: src/sys/geom/part/g_part.c,v 1.5 2007/05/09 05:37:53 marcel Exp $");
#include <sys/param.h>
#include <sys/bio.h>
@@ -64,12 +64,12 @@
const char *lexeme;
enum g_part_alias alias;
} g_part_alias_list[G_PART_ALIAS_COUNT] = {
- { "@efi", G_PART_ALIAS_EFI },
- { "@freebsd", G_PART_ALIAS_FREEBSD },
- { "@freebsd-swap", G_PART_ALIAS_FREEBSD_SWAP },
- { "@freebsd-ufs", G_PART_ALIAS_FREEBSD_UFS },
- { "@freebsd-vinum", G_PART_ALIAS_FREEBSD_VINUM },
- { "@mbr", G_PART_ALIAS_MBR }
+ { "efi", G_PART_ALIAS_EFI },
+ { "freebsd", G_PART_ALIAS_FREEBSD },
+ { "freebsd-swap", G_PART_ALIAS_FREEBSD_SWAP },
+ { "freebsd-ufs", G_PART_ALIAS_FREEBSD_UFS },
+ { "freebsd-vinum", G_PART_ALIAS_FREEBSD_VINUM },
+ { "mbr", G_PART_ALIAS_MBR }
};
/*
@@ -111,7 +111,6 @@
G_PART_CTL_DESTROY,
G_PART_CTL_MODIFY,
G_PART_CTL_MOVE,
- G_PART_CTL_QUERY,
G_PART_CTL_RECOVER,
G_PART_CTL_RESIZE,
G_PART_CTL_UNDO
@@ -247,7 +246,7 @@
SET_FOREACH(iter, g_part_scheme_set) {
if ((*iter)->name == NULL)
continue;
- if (!strcmp((*iter)->name, p)) {
+ if (!strcasecmp((*iter)->name, p)) {
s = *iter;
break;
}
@@ -331,11 +330,12 @@
static int
g_part_ctl_add(struct gctl_req *req, struct g_part_parms *gpp)
{
- char buf[16];
+ char buf[32];
struct g_geom *gp;
struct g_provider *pp;
struct g_part_entry *delent, *last, *entry;
struct g_part_table *table;
+ struct sbuf *sb;
quad_t end;
unsigned int index;
int error;
@@ -396,8 +396,6 @@
gctl_error(req, "%d index '%d'", EEXIST, gpp->gpp_index);
return (EEXIST);
}
- snprintf(buf, sizeof(buf), "%d", index);
- gctl_set_param(req, "index", buf, strlen(buf) + 1);
entry = (delent == NULL) ? g_malloc(table->gpt_scheme->gps_entrysz,
M_WAITOK | M_ZERO) : delent;
@@ -422,6 +420,15 @@
entry->gpe_modified = 1;
}
g_part_new_provider(gp, table, entry);
+
+ /* Provide feedback if so requested. */
+ if (gpp->gpp_parms & G_PART_PARM_OUTPUT) {
+ sb = sbuf_new(NULL, NULL, 0, SBUF_AUTOEXTEND);
+ sbuf_printf(sb, "%s%s added\n", gp->name,
+ G_PART_NAME(table, entry, buf, sizeof(buf)));
+ gctl_set_param(req, "output", sbuf_data(sb), sbuf_len(sb) + 1);
+ sbuf_delete(sb);
+ }
return (0);
}
@@ -510,6 +517,7 @@
struct g_provider *pp;
struct g_part_scheme *scheme;
struct g_part_table *null, *table;
+ struct sbuf *sb;
int attr, error;
pp = gpp->gpp_provider;
@@ -583,6 +591,14 @@
table->gpt_created = 1;
if (null != NULL)
kobj_delete((kobj_t)null, M_GEOM);
+
+ /* Provide feedback if so requested. */
+ if (gpp->gpp_parms & G_PART_PARM_OUTPUT) {
+ sb = sbuf_new(NULL, NULL, 0, SBUF_AUTOEXTEND);
+ sbuf_printf(sb, "%s created\n", gp->name);
+ gctl_set_param(req, "output", sbuf_data(sb), sbuf_len(sb) + 1);
+ sbuf_delete(sb);
+ }
return (0);
fail:
@@ -601,10 +617,12 @@
static int
g_part_ctl_delete(struct gctl_req *req, struct g_part_parms *gpp)
{
+ char buf[32];
struct g_geom *gp;
struct g_provider *pp;
struct g_part_entry *entry;
struct g_part_table *table;
+ struct sbuf *sb;
gp = gpp->gpp_geom;
G_PART_TRACE((G_T_TOPOLOGY, "%s(%s)", __func__, gp->name));
@@ -639,6 +657,15 @@
entry->gpe_deleted = 1;
}
g_wither_provider(pp, ENXIO);
+
+ /* Provide feedback if so requested. */
+ if (gpp->gpp_parms & G_PART_PARM_OUTPUT) {
+ sb = sbuf_new(NULL, NULL, 0, SBUF_AUTOEXTEND);
+ sbuf_printf(sb, "%s%s deleted\n", gp->name,
+ G_PART_NAME(table, entry, buf, sizeof(buf)));
+ gctl_set_param(req, "output", sbuf_data(sb), sbuf_len(sb) + 1);
+ sbuf_delete(sb);
+ }
return (0);
}
@@ -648,6 +675,7 @@
struct g_geom *gp;
struct g_part_entry *entry;
struct g_part_table *null, *table;
+ struct sbuf *sb;
int error;
gp = gpp->gpp_geom;
@@ -685,15 +713,24 @@
}
kobj_delete((kobj_t)table, M_GEOM);
+ /* Provide feedback if so requested. */
+ if (gpp->gpp_parms & G_PART_PARM_OUTPUT) {
+ sb = sbuf_new(NULL, NULL, 0, SBUF_AUTOEXTEND);
+ sbuf_printf(sb, "%s destroyed\n", gp->name);
+ gctl_set_param(req, "output", sbuf_data(sb), sbuf_len(sb) + 1);
+ sbuf_delete(sb);
+ }
return (0);
}
static int
g_part_ctl_modify(struct gctl_req *req, struct g_part_parms *gpp)
{
+ char buf[32];
struct g_geom *gp;
struct g_part_entry *entry;
struct g_part_table *table;
+ struct sbuf *sb;
int error;
gp = gpp->gpp_geom;
@@ -721,6 +758,15 @@
if (!entry->gpe_created)
entry->gpe_modified = 1;
+
+ /* Provide feedback if so requested. */
+ if (gpp->gpp_parms & G_PART_PARM_OUTPUT) {
+ sb = sbuf_new(NULL, NULL, 0, SBUF_AUTOEXTEND);
+ sbuf_printf(sb, "%s%s modified\n", gp->name,
+ G_PART_NAME(table, entry, buf, sizeof(buf)));
+ gctl_set_param(req, "output", sbuf_data(sb), sbuf_len(sb) + 1);
+ sbuf_delete(sb);
+ }
return (0);
}
@@ -732,13 +778,6 @@
}
static int
-g_part_ctl_query(struct gctl_req *req, struct g_part_parms *gpp)
-{
- gctl_error(req, "%d verb 'query'", ENOSYS);
- return (ENOSYS);
-}
-
-static int
g_part_ctl_recover(struct gctl_req *req, struct g_part_parms *gpp)
{
gctl_error(req, "%d verb 'recover'", ENOSYS);
@@ -799,8 +838,12 @@
goto fail;
}
error = g_part_probe(gp, cp, table->gpt_depth);
- if (error)
- goto fail;
+ if (error) {
+ g_topology_lock();
+ g_access(cp, -1, -1, -1);
+ g_part_wither(gp, error);
+ return (0);
+ }
table = gp->softc;
}
@@ -863,83 +906,67 @@
ctlreq = G_PART_CTL_NONE;
modifies = 0;
- mparms = oparms = 0;
+ mparms = 0;
+ oparms = G_PART_PARM_FLAGS | G_PART_PARM_OUTPUT | G_PART_PARM_VERSION;
switch (*verb) {
case 'a':
if (!strcmp(verb, "add")) {
ctlreq = G_PART_CTL_ADD;
modifies = 1;
- mparms = G_PART_PARM_GEOM | G_PART_PARM_SIZE |
+ mparms |= G_PART_PARM_GEOM | G_PART_PARM_SIZE |
G_PART_PARM_START | G_PART_PARM_TYPE;
- oparms = G_PART_PARM_FLAGS | G_PART_PARM_INDEX |
- G_PART_PARM_LABEL;
+ oparms |= G_PART_PARM_INDEX | G_PART_PARM_LABEL;
}
break;
case 'c':
if (!strcmp(verb, "commit")) {
ctlreq = G_PART_CTL_COMMIT;
- mparms = G_PART_PARM_GEOM;
- oparms = G_PART_PARM_FLAGS;
+ mparms |= G_PART_PARM_GEOM;
} else if (!strcmp(verb, "create")) {
ctlreq = G_PART_CTL_CREATE;
modifies = 1;
- mparms = G_PART_PARM_PROVIDER |
- G_PART_PARM_SCHEME;
- oparms = G_PART_PARM_ENTRIES | G_PART_PARM_FLAGS;
+ mparms |= G_PART_PARM_PROVIDER | G_PART_PARM_SCHEME;
+ oparms |= G_PART_PARM_ENTRIES;
}
break;
case 'd':
if (!strcmp(verb, "delete")) {
ctlreq = G_PART_CTL_DELETE;
modifies = 1;
- mparms = G_PART_PARM_GEOM | G_PART_PARM_INDEX;
- oparms = G_PART_PARM_FLAGS;
+ mparms |= G_PART_PARM_GEOM | G_PART_PARM_INDEX;
} else if (!strcmp(verb, "destroy")) {
ctlreq = G_PART_CTL_DESTROY;
modifies = 1;
- mparms = G_PART_PARM_GEOM;
- oparms = G_PART_PARM_FLAGS;
+ mparms |= G_PART_PARM_GEOM;
}
break;
case 'm':
if (!strcmp(verb, "modify")) {
ctlreq = G_PART_CTL_MODIFY;
modifies = 1;
- mparms = G_PART_PARM_GEOM | G_PART_PARM_INDEX;
- oparms = G_PART_PARM_FLAGS | G_PART_PARM_LABEL |
- G_PART_PARM_TYPE;
+ mparms |= G_PART_PARM_GEOM | G_PART_PARM_INDEX;
+ oparms |= G_PART_PARM_LABEL | G_PART_PARM_TYPE;
} else if (!strcmp(verb, "move")) {
ctlreq = G_PART_CTL_MOVE;
modifies = 1;
- mparms = G_PART_PARM_GEOM | G_PART_PARM_INDEX;
- oparms = G_PART_PARM_FLAGS;
+ mparms |= G_PART_PARM_GEOM | G_PART_PARM_INDEX;
}
break;
- case 'q':
- if (!strcmp(verb, "query")) {
- ctlreq = G_PART_CTL_QUERY;
- mparms = G_PART_PARM_REQUEST | G_PART_PARM_RESPONSE;
- oparms = G_PART_PARM_FLAGS | G_PART_PARM_GEOM;
- }
- break;
case 'r':
if (!strcmp(verb, "recover")) {
ctlreq = G_PART_CTL_RECOVER;
modifies = 1;
- mparms = G_PART_PARM_GEOM;
- oparms = G_PART_PARM_FLAGS;
+ mparms |= G_PART_PARM_GEOM;
} else if (!strcmp(verb, "resize")) {
ctlreq = G_PART_CTL_RESIZE;
modifies = 1;
- mparms = G_PART_PARM_GEOM | G_PART_PARM_INDEX;
- oparms = G_PART_PARM_FLAGS;
+ mparms |= G_PART_PARM_GEOM | G_PART_PARM_INDEX;
}
break;
case 'u':
if (!strcmp(verb, "undo")) {
ctlreq = G_PART_CTL_UNDO;
- mparms = G_PART_PARM_GEOM;
- oparms = G_PART_PARM_FLAGS;
+ mparms |= G_PART_PARM_GEOM;
}
break;
}
@@ -977,16 +1004,14 @@
if (!strcmp(ap->name, "label"))
parm = G_PART_PARM_LABEL;
break;
+ case 'o':
+ if (!strcmp(ap->name, "output"))
+ parm = G_PART_PARM_OUTPUT;
+ break;
case 'p':
if (!strcmp(ap->name, "provider"))
parm = G_PART_PARM_PROVIDER;
break;
- case 'r':
- if (!strcmp(ap->name, "request"))
- parm = G_PART_PARM_REQUEST;
- else if (!strcmp(ap->name, "response"))
- parm = G_PART_PARM_RESPONSE;
- break;
case 's':
if (!strcmp(ap->name, "scheme"))
parm = G_PART_PARM_SCHEME;
@@ -1002,6 +1027,8 @@
case 'v':
if (!strcmp(ap->name, "verb"))
continue;
+ else if (!strcmp(ap->name, "version"))
+ parm = G_PART_PARM_VERSION;
break;
}
if ((parm & (mparms | oparms)) == 0) {
@@ -1029,15 +1056,12 @@
case G_PART_PARM_LABEL:
error = g_part_parm_str(p, &gpp.gpp_label);
break;
+ case G_PART_PARM_OUTPUT:
+ error = 0; /* Write-only parameter */
+ break;
case G_PART_PARM_PROVIDER:
error = g_part_parm_provider(p, &gpp.gpp_provider);
break;
- case G_PART_PARM_REQUEST:
- error = g_part_parm_str(p, &gpp.gpp_request);
- break;
- case G_PART_PARM_RESPONSE:
- error = 0; /* Write-only parameter. */
- break;
case G_PART_PARM_SCHEME:
error = g_part_parm_scheme(p, &gpp.gpp_scheme);
break;
@@ -1050,6 +1074,9 @@
case G_PART_PARM_TYPE:
error = g_part_parm_str(p, &gpp.gpp_type);
break;
+ case G_PART_PARM_VERSION:
+ error = g_part_parm_uint(p, &gpp.gpp_version);
+ break;
default:
error = EDOOFUS;
break;
@@ -1106,9 +1133,6 @@
case G_PART_CTL_MOVE:
error = g_part_ctl_move(req, &gpp);
break;
- case G_PART_CTL_QUERY:
- error = g_part_ctl_query(req, &gpp);
- break;
case G_PART_CTL_RECOVER:
error = g_part_ctl_recover(req, &gpp);
break;
==== //depot/projects/soc2007/lulf/gvinum_fixup/sys/geom/part/g_part.h#2 (text+ko) ====
@@ -23,7 +23,7 @@
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*
- * $FreeBSD: src/sys/geom/part/g_part.h,v 1.1 2007/02/07 18:55:30 marcel Exp $
+ * $FreeBSD: src/sys/geom/part/g_part.h,v 1.2 2007/05/08 20:18:17 marcel Exp $
*/
#ifndef _GEOM_PART_H_
>>> TRUNCATED FOR MAIL (1000 lines) <<<
More information about the p4-projects
mailing list