[comp.bugs.4bsd.ucb-fixes] V1.29

bostic@OKEEFFE.BERKELEY.EDU.UUCP (06/18/87)

Subject: bad144 can incorrectly mark bad blocks
Index: etc/bad144.c 4.3BSD

Description:
	When using the -f option, if bad144 is unable to read the header
	of a block that it is trying to mark as bad, the block is marked
	as good.
Fix:
	The fix was to reverse the order of when the bad sector information
	is written.  Apply the following patch.

*** bad144.c.old	Thu Jun 18 11:41:53 1987
--- bad144.c.new	Thu Jun 18 11:44:49 1987
***************
*** 540,553 ****
  		Perror("ioctl");
  	if ((n = read(fd, buf, fp->f_bufsize)) < 0)
  		bzero(buf, fp->f_bufsize);
  	if (fp->f_bic) {
  		struct hpuphdr *xp = (struct hpuphdr *)buf;
  
  		xp->hpup_cyl &= ~fp->f_bic;
  	}
- 	if (fp->f_routine)
- 		if ((*fp->f_routine)(fp, dp, blk, buf, n) != 0)
- 			return;
  	if (lseek(fd, (long)blk * dp->d_secsize, L_SET) < 0)
  		Perror("lseek");
  	if (nflag)
--- 540,553 ----
  		Perror("ioctl");
  	if ((n = read(fd, buf, fp->f_bufsize)) < 0)
  		bzero(buf, fp->f_bufsize);
+ 	if (fp->f_routine)
+ 		if ((*fp->f_routine)(fp, dp, blk, buf, n) != 0)
+ 			return;
  	if (fp->f_bic) {
  		struct hpuphdr *xp = (struct hpuphdr *)buf;
  
  		xp->hpup_cyl &= ~fp->f_bic;
  	}
  	if (lseek(fd, (long)blk * dp->d_secsize, L_SET) < 0)
  		Perror("lseek");
  	if (nflag)