Date: Tue, 21 Jun 2011 11:51:22 +0200 From: Henri Hennebert <hlh@restart.be> To: John Baldwin <jhb@freebsd.org> Cc: freebsd-stable@freebsd.org Subject: Re: ZFS boot inside on the second partition inside a slice Message-ID: <4E00699A.7010403@restart.be> In-Reply-To: <201106200951.47449.jhb@freebsd.org> References: <BANLkTi=drd8vY84_4jqDZTFK%2Bsq=n0Kx9g@mail.gmail.com> <201106171337.39104.jhb@freebsd.org> <4DFC6A07.7090607@restart.be> <201106200951.47449.jhb@freebsd.org>
next in thread | previous in thread | raw e-mail | index | archive | help
On 06/20/2011 15:51, John Baldwin wrote: > On Saturday, June 18, 2011 5:04:07 am Henri Hennebert wrote: >> On 06/17/2011 19:37, John Baldwin wrote: >>> On Friday, June 17, 2011 1:06:22 pm Henri Hennebert wrote: >>>> On 06/16/2011 19:35, John Baldwin wrote: >>>>> On Thursday, June 16, 2011 8:45:41 am Zhihao Yuan wrote: >>>>>> Exactly. The MFCed ZFSv28 is different from any patch maintained by >>>>>> mm@. Maybe some untested changes involved. >>>>> >>>>> Can you try reverting this change: >>>>> >>>>> Author: jhb >>>>> Date: Thu Apr 28 17:44:24 2011 >>>>> New Revision: 221177 >>>>> URL: http://svn.freebsd.org/changeset/base/221177 >>>>> >>>>> Log: >>>>> Due to space constraints, the UFS boot2 and boot1 use an evil hack where >>>>> boot2 calls back into boot1 to perform disk reads. The ZFS MBR boot blocks >>>>> do not have the same space constraints, so remove this hack for ZFS. >>>>> While here, remove commented out code to support C/H/S addressing from >>>>> zfsldr. The ZFS and GPT bootstraps always just use EDD LBA addressing. >>>>> >>>>> MFC after: 2 weeks >>>>> >>>>> Modified: >>>>> head/sys/boot/i386/boot2/Makefile >>>>> head/sys/boot/i386/common/drv.c >>>>> head/sys/boot/i386/zfsboot/Makefile >>>>> head/sys/boot/i386/zfsboot/zfsldr.S >>>>> >>>> I try with this revision (221177) reverted to no avail: >>>> same error - 'read error' >>> >>> Hmm, ok. No other ideas off the top of my head. >>> >> I make the same test under virtualbox and get: >> >> A critical error has occurred while running the virtual machine and the >> machine execution has been stopped. >> >> I attach VBox.log. >> >> PS - the message 'ZFS: supported version 28' comes from my patch: >> >> Index: sys/boot/zfs/zfsimpl.c >> =================================================================== >> --- sys/boot/zfs/zfsimpl.c (revision 212549) >> +++ sys/boot/zfs/zfsimpl.c (working copy) >> @@ -61,6 +61,8 @@ >> STAILQ_INIT(&zfs_vdevs); >> STAILQ_INIT(&zfs_pools); >> >> + printf("ZFS: supported version %u\n", (unsigned) SPA_VERSION); >> + >> zfs_temp_buf = malloc(TEMP_SIZE); >> zfs_temp_end = zfs_temp_buf + TEMP_SIZE; >> zfs_temp_ptr = zfs_temp_buf; > > Hmm, can you add printfs and narrow down where the hang happens (or which > reads are failing)? The VBOX log seems to make no sense. It shows the > CPU trying to call into the BIOS from within protected mode in the loader > but that shouldn't ever happen (note a cs of 0x2b (which is the loader's > %cs selector) but an eip that looks like a cs:ip of a BIOS routine). > I just try to put printf but I get only 'Read error' without any of my printf. Previously event my printf in zfs_init don't show up on the console of my netbook. Under VBox it was printed. Maybe printf is not allowed so soon in zfsboot ? For the record, I write the bootcode with this 2 commands after booting with mfsbsd (from mm@) and fetching zfsboot in /tmp: dd if=/tmp/zfsboot of=/dev/ad0s2a bs=512 count=1 dd if=/tmp/zfsboot of=/dev/ad0s2a bs=512 skip=1 seek=1024 My debugging patch in zfsboot.c: [root@morzine zfsboot]# svn diff zfsboot.c Index: zfsboot.c =================================================================== --- zfsboot.c (revision 223081) +++ zfsboot.c (working copy) @@ -447,10 +447,16 @@ off_t off; struct dsk *dsk; + printf("==>trying to boot\n"); + dmadat = (void *)(roundup2(__base + (int32_t)&_end, 0x10000) - __base); + printf("==>about to call bios_getmem()\n"); + bios_getmem(); + printf("==>bios_getmem() completed\n"); + if (high_heap_size > 0) { heap_end = PTOV(high_heap_base + high_heap_size); heap_next = PTOV(high_heap_base); @@ -482,6 +488,8 @@ autoboot = 1; + printf("==>about to call zfs_init()\n"); + zfs_init(); /* Henri
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?4E00699A.7010403>