diff options
author | simokawa <simokawa@FreeBSD.org> | 2003-02-05 17:19:34 +0000 |
---|---|---|
committer | simokawa <simokawa@FreeBSD.org> | 2003-02-05 17:19:34 +0000 |
commit | a2b80d2be895344684724a5d98d544719d0d8a2e (patch) | |
tree | 22e71ad6be98191729eb86d50f20961e2959e0cf /sys/dev/firewire/fwmem.c | |
parent | a56314b4dc1f79a9a1310fb10340101050a3e412 (diff) | |
download | FreeBSD-src-a2b80d2be895344684724a5d98d544719d0d8a2e.zip FreeBSD-src-a2b80d2be895344684724a5d98d544719d0d8a2e.tar.gz |
Fix for fwmem write part.
- fix typo
- don't need to check receive buffer.
- don't forget to free xfer on errer.
Diffstat (limited to 'sys/dev/firewire/fwmem.c')
-rw-r--r-- | sys/dev/firewire/fwmem.c | 28 |
1 files changed, 14 insertions, 14 deletions
diff --git a/sys/dev/firewire/fwmem.c b/sys/dev/firewire/fwmem.c index f19b296..f5506f4 100644 --- a/sys/dev/firewire/fwmem.c +++ b/sys/dev/firewire/fwmem.c @@ -229,7 +229,7 @@ fwmem_write_block( return NULL; fp = (struct fw_pkt *)xfer->send.buf; - fp->mode.wreqb.tcode = FWTCODE_RREQB; + fp->mode.wreqb.tcode = FWTCODE_WREQB; fp->mode.wreqb.dst = htons(xfer->dst); fp->mode.wreqb.dest_hi = htons(dst_hi); fp->mode.wreqb.dest_lo = htonl(dst_lo); @@ -297,9 +297,10 @@ fwmem_read (dev_t dev, struct uio *uio, int ioflag) err = tsleep((caddr_t)xfer, FWPRI, "fwmrq", hz); if (err !=0 || xfer->resp != 0 || xfer->recv.buf == NULL) - return EINVAL; /* XXX */ - err = uiomove(xfer->recv.buf + xfer->recv.off + 4*3, - 4, uio); + err = EIO; + else + err = uiomove(xfer->recv.buf + + xfer->recv.off + 4*3, 4, uio); } else { if (len > MAXLEN) len = MAXLEN; @@ -310,9 +311,10 @@ fwmem_read (dev_t dev, struct uio *uio, int ioflag) err = tsleep((caddr_t)xfer, FWPRI, "fwmrb", hz); if (err != 0 || xfer->resp != 0 || xfer->recv.buf == NULL) - return EINVAL; /* XXX */ - err = uiomove(xfer->recv.buf + xfer->recv.off + 4*4, - len, uio); + err = EIO; + else + err = uiomove(xfer->recv.buf + + xfer->recv.off + 4*4, len, uio); } fw_xfer_free(xfer); if (err) @@ -358,9 +360,8 @@ fwmem_write (dev_t dev, struct uio *uio, int ioflag) if (xfer == NULL) return EINVAL; err = tsleep((caddr_t)xfer, FWPRI, "fwmwq", hz); - if (err !=0 || xfer->resp != 0 - || xfer->recv.buf == NULL) - return EINVAL; /* XXX */ + if (err !=0 || xfer->resp != 0) + err = EIO; } else { if (len > MAXLEN) len = MAXLEN; @@ -372,11 +373,10 @@ fwmem_write (dev_t dev, struct uio *uio, int ioflag) if (xfer == NULL) return EINVAL; err = tsleep((caddr_t)xfer, FWPRI, "fwmwb", hz); - if (err != 0 || xfer->resp != 0 - || xfer->recv.buf == NULL) - return EINVAL; /* XXX */ - fw_xfer_free(xfer); + if (err != 0 || xfer->resp != 0) + err = EIO; } + fw_xfer_free(xfer); } return err; } |