Index: geom_ctl.c =================================================================== RCS file: /usr/repo/src/sys/geom/geom_ctl.c,v retrieving revision 1.34 diff -u -p -r1.34 geom_ctl.c --- geom_ctl.c 17 Jan 2005 07:14:24 -0000 1.34 +++ geom_ctl.c 7 Apr 2005 23:37:14 -0000 @@ -98,6 +98,10 @@ gctl_error(struct gctl_req *req, const c return (EINVAL); /* We only record the first error */ + if (sbuf_done(req->serror)) { + if (!req->nerror) + req->nerror = EEXIST; + } if (req->nerror) return (req->nerror); @@ -107,11 +111,7 @@ gctl_error(struct gctl_req *req, const c sbuf_finish(req->serror); if (g_debugflags & G_F_CTLDUMP) printf("gctl %p error \"%s\"\n", req, sbuf_data(req->serror)); - req->nerror = copyout(sbuf_data(req->serror), req->error, - imin(req->lerror, sbuf_len(req->serror) + 1)); - if (!req->nerror) - req->nerror = EINVAL; - return (req->nerror); + return (0); } /* @@ -468,6 +468,10 @@ g_ctl_ioctl_ctl(struct cdev *dev, u_long g_waitfor_event(g_ctl_req, req, M_WAITOK, NULL); gctl_copyout(req); } + if (sbuf_done(req->serror)) { + req->nerror = copyout(sbuf_data(req->serror), req->error, + imin(req->lerror, sbuf_len(req->serror) + 1)); + } nerror = req->nerror; gctl_free(req);