Skip site navigation (1)Skip section navigation (2)
Date:      Tue, 01 May 2001 07:09:25 +0200
From:      Poul-Henning Kamp <phk@critter.freebsd.dk>
To:        Bruce Evans <bde@zeta.org.au>
Cc:        cvs-committers@FreeBSD.org, cvs-all@FreeBSD.org
Subject:   Re: cvs commit: src/sys/fs/hpfs hpfs_vnops.c 
Message-ID:  <58258.988693765@critter>
In-Reply-To: Your message of "Tue, 01 May 2001 13:35:07 %2B1000." <Pine.BSF.4.21.0105011323010.31663-100000@besplex.bde.org> 

next in thread | previous in thread | raw e-mail | index | archive | help
In message <Pine.BSF.4.21.0105011323010.31663-100000@besplex.bde.org>, Bruce Ev
ans writes:
>>   Modified files:
>>     sys/fs/hpfs          hpfs_vnops.c 
>>   Log:
>>   Uncut&paste som bogus use of VOP_BMAP in hpfs::VOP_STRATEGY.
>>   
>>   At the same time, eliminate uninitialized use of a vnode
>>   pointer.  Interesting GCC didn't spot this.
>
>This is because the pointer was supposed to be, and was, initialized by
>VOP_BMAP().  gcc must assume that foo(&bar) initializes `bar'.

But VOP_BMAP() was not called in all cases:

int
hpfs_strategy(ap)
        struct vop_strategy_args /* {
                struct buf *a_bp;
        } */ *ap;
{
        register struct buf *bp = ap->a_bp;
        register struct vnode *vp = ap->a_vp;
        struct vnode *nvp;
        int error;

        dprintf(("hpfs_strategy(): \n"));

        if (vp->v_type == VBLK || vp->v_type == VCHR)
                panic("hpfs_strategy: spec");
        if (bp->b_blkno == bp->b_lblkno) {
                error = VOP_BMAP(vp, bp->b_lblkno, &nvp, &bp->b_blkno, NULL, NULL);
                if (error) {
                        printf("hpfs_strategy: VOP_BMAP FAILED %d\n", error);
                        bp->b_error = error;
                        bp->b_ioflags |= BIO_ERROR;
                        biodone(bp);
                        return (error);
                }
                if ((long)bp->b_blkno == -1)
                        vfs_bio_clrbuf(bp);
        }
        if ((long)bp->b_blkno == -1) {
                biodone(bp);
                return (0);
        }
        bp->b_dev = nvp->v_rdev;
        VOP_STRATEGY(nvp, bp);
        return (0);
}

--
Poul-Henning Kamp       | UNIX since Zilog Zeus 3.20
phk@FreeBSD.ORG         | TCP/IP since RFC 956
FreeBSD committer       | BSD since 4.3-tahoe    
Never attribute to malice what can adequately be explained by incompetence.

To Unsubscribe: send mail to majordomo@FreeBSD.org
with "unsubscribe cvs-all" in the body of the message




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