Return to BSD News archive
Path: sserve!newshost.anu.edu.au!munnari.oz.au!news.Hawaii.Edu!ames!haven.umd.edu!uunet!pipex!uknet!mcsun!sun4nl!tuegate.tue.nl!svin09.info.win.tue.nl!wzv.win.tue.nl!gvr.win.tue.nl!guido From: guido@gvr.win.tue.nl (Guido van Rooij) Newsgroups: comp.os.386bsd.questions Subject: swap_pager_finish complaints when first partition is swap Date: 30 Jul 1993 17:13:30 GMT Organization: Eindhoven University of Technology, The Netherlands Lines: 55 Message-ID: <23bkrq$9gl@wzv.win.tue.nl> NNTP-Posting-Host: gvr.win.tue.nl Recently, I put in a new disk and labeled it using the following disktab: cp30254|Conner Peripherals 240MB IDE:\ :dt=ESDI:ty=winchester:se#512:nt#10:ns#55:nc#895: \ :pb#492250:ob#452100:tb=swap: \ :pc#492250:oc#0: \ :ph#452100:oh#0:th=4.2BSD:bh#4096:fh#512: A few days later, I got: messages:Jul 30 12:00:02 gvr /386bsd: error 30 blkno 0 sz 4096 swap_pager_finish : clean of page bba000 failed plus about hundred more I suspect this error is due to the following piece of code form ufs_disksubr.c: /* * Determine the size of the transfer, and make sure it is * within the boundaries of the partition. Adjust transfer * if needed, and signal errors or early completion. */ int bounds_check_with_label(struct buf *bp, struct disklabel *lp, int wlabel) { struct partition *p = lp->d_partitions + dkpart(bp->b_dev); int labelsect = lp->d_partitions[0].p_offset; int maxsz = p->p_size, sz = (bp->b_bcount + DEV_BSIZE - 1) >> DEV_BSHIFT; /* overwriting disk label ? */ /* XXX should also protect bootstrap in first 8K */ if (bp->b_blkno + p->p_offset <= LABELSECTOR + labelsect && #if LABELSECTOR != 0 bp->b_blkno + p->p_offset + sz > LABELSECTOR + labelsect && #endif (bp->b_flags & B_READ) == 0 && wlabel == 0) { bp->b_error = EROFS; goto bad; } Now in the case of i386, LABELSECTOR is 1. Further, labelsect and p->p_offset are the same. So indeed, EROFS should be returned. What I don't understand is why it fails. Clearly, for some reason, the first partition should not start on offset 0, because it seems to interfere with the label, but the disktab examples I saw all started at offset 0. So perhaps there is a bug in the code..? Can someone explain this to me? -Guido -- Guido van Rooij | Internet: guido@gvr.win.tue.nl Bisschopsmolen 16 | Phone: ++31.40.461433 5612 DS Eindhoven | ((12+144+20)+3*sqrt(4))/7 The Netherlands | +(5*11)=9^2+0