devaoe: fix off by one in aoeerror(), consistent use of nil for pointers, error handling
This commit is contained in:
parent
769b3f1c2f
commit
0b3fd7c052
|
@ -309,7 +309,7 @@ srbcleanout(Aoedev *d, Srb *srb)
|
||||||
if(srb == d->inprocess)
|
if(srb == d->inprocess)
|
||||||
d->inprocess = nil;
|
d->inprocess = nil;
|
||||||
else
|
else
|
||||||
for(ll = &d->head; x = *ll; ll = &x->next){
|
for(ll = &d->head; (x = *ll) != nil; ll = &x->next){
|
||||||
d->tail = x;
|
d->tail = x;
|
||||||
if(x == srb)
|
if(x == srb)
|
||||||
*ll = x->next;
|
*ll = x->next;
|
||||||
|
@ -334,7 +334,7 @@ frameerror(Aoedev *d, Frame *f, char *s)
|
||||||
srb = f->srb;
|
srb = f->srb;
|
||||||
f->srb = nil;
|
f->srb = nil;
|
||||||
f->tag = Tfree; /* don't get fooled by way-slow responses */
|
f->tag = Tfree; /* don't get fooled by way-slow responses */
|
||||||
if(!srb)
|
if(srb == nil)
|
||||||
return;
|
return;
|
||||||
srb->nout--;
|
srb->nout--;
|
||||||
srberror(d, srb, s);
|
srberror(d, srb, s);
|
||||||
|
@ -375,15 +375,15 @@ eventlogread(void *a, long n)
|
||||||
|
|
||||||
/* the concern here is page faults in memmove below */
|
/* the concern here is page faults in memmove below */
|
||||||
if(waserror()){
|
if(waserror()){
|
||||||
free(buf);
|
|
||||||
qunlock(&events);
|
qunlock(&events);
|
||||||
|
free(buf);
|
||||||
nexterror();
|
nexterror();
|
||||||
}
|
}
|
||||||
memmove(a, buf, n);
|
memmove(a, buf, n);
|
||||||
poperror();
|
poperror();
|
||||||
}
|
}
|
||||||
free(buf);
|
|
||||||
qunlock(&events);
|
qunlock(&events);
|
||||||
|
free(buf);
|
||||||
return n;
|
return n;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -502,16 +502,16 @@ pickdevlink(Aoedev *d)
|
||||||
for(i = 0; i < d->ndl; i++){
|
for(i = 0; i < d->ndl; i++){
|
||||||
n = d->dlidx++ % d->ndl;
|
n = d->dlidx++ % d->ndl;
|
||||||
l = d->dl + n;
|
l = d->dl + n;
|
||||||
if(l && l->flag & Dup)
|
if(l->flag & Dup)
|
||||||
return l;
|
return l;
|
||||||
}
|
}
|
||||||
return 0;
|
return nil;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int
|
static int
|
||||||
pickea(Devlink *l)
|
pickea(Devlink *l)
|
||||||
{
|
{
|
||||||
if(l == 0)
|
if(l == nil)
|
||||||
return -1;
|
return -1;
|
||||||
if(l->nea == 0)
|
if(l->nea == 0)
|
||||||
return -1;
|
return -1;
|
||||||
|
@ -530,7 +530,7 @@ hset(Aoedev *d, Frame *f, Aoehdr *h, int cmd, int new)
|
||||||
int i;
|
int i;
|
||||||
Devlink *l;
|
Devlink *l;
|
||||||
|
|
||||||
if(f->srb)
|
if(f->srb != nil)
|
||||||
if((long)(Ticks-f->srb->ticksent) > Srbtimeout){
|
if((long)(Ticks-f->srb->ticksent) > Srbtimeout){
|
||||||
eventlog("%æ: srb timeout\n", d);
|
eventlog("%æ: srb timeout\n", d);
|
||||||
if(cmd == ACata && Nofail(d, s))
|
if(cmd == ACata && Nofail(d, s))
|
||||||
|
@ -653,7 +653,7 @@ loop:
|
||||||
}
|
}
|
||||||
starttick = Ticks;
|
starttick = Ticks;
|
||||||
rlock(&devs);
|
rlock(&devs);
|
||||||
for(d = devs.d; d; d = d->next){
|
for(d = devs.d; d != nil; d = d->next){
|
||||||
if(!canqlock(d))
|
if(!canqlock(d))
|
||||||
continue;
|
continue;
|
||||||
if(!UP(d)){
|
if(!UP(d)){
|
||||||
|
@ -790,7 +790,7 @@ unitseq(Chan *c, uint unit, Dir *dp)
|
||||||
i = 0;
|
i = 0;
|
||||||
rv = -1;
|
rv = -1;
|
||||||
rlock(&devs);
|
rlock(&devs);
|
||||||
for(d = devs.d; d; d = d->next)
|
for(d = devs.d; d != nil; d = d->next)
|
||||||
if(i++ == unit){
|
if(i++ == unit){
|
||||||
mkqid(&q, QID(d->unit, Qunitdir), 0, QTDIR);
|
mkqid(&q, QID(d->unit, Qunitdir), 0, QTDIR);
|
||||||
devdir(c, q, unitname(d), 0, eve, 0555, dp);
|
devdir(c, q, unitname(d), 0, eve, 0555, dp);
|
||||||
|
@ -807,7 +807,7 @@ unit2dev(ulong unit)
|
||||||
Aoedev *d;
|
Aoedev *d;
|
||||||
|
|
||||||
rlock(&devs);
|
rlock(&devs);
|
||||||
for(d = devs.d; d; d = d->next)
|
for(d = devs.d; d != nil; d = d->next)
|
||||||
if(d->unit == unit){
|
if(d->unit == unit){
|
||||||
runlock(&devs);
|
runlock(&devs);
|
||||||
return d;
|
return d;
|
||||||
|
@ -1102,9 +1102,9 @@ aoeerror(Aoehdr *h)
|
||||||
};
|
};
|
||||||
|
|
||||||
if((h->verflag & AFerr) == 0)
|
if((h->verflag & AFerr) == 0)
|
||||||
return 0;
|
return nil;
|
||||||
n = h->error;
|
n = h->error;
|
||||||
if(n > nelem(errs))
|
if(n >= nelem(errs))
|
||||||
n = 0;
|
n = 0;
|
||||||
return errs[n];
|
return errs[n];
|
||||||
}
|
}
|
||||||
|
@ -1182,7 +1182,7 @@ strategy(Aoedev *d, Srb *srb)
|
||||||
if(!UP(d))
|
if(!UP(d))
|
||||||
error(Eio);
|
error(Eio);
|
||||||
srb->next = nil;
|
srb->next = nil;
|
||||||
if(d->tail)
|
if(d->tail != nil)
|
||||||
d->tail->next = srb;
|
d->tail->next = srb;
|
||||||
d->tail = srb;
|
d->tail = srb;
|
||||||
if(d->head == nil)
|
if(d->head == nil)
|
||||||
|
@ -1409,7 +1409,7 @@ topctlread(Chan *, void *db, int len, int off)
|
||||||
|
|
||||||
for(i = 0; i < Nnetlink; i++){
|
for(i = 0; i < Nnetlink; i++){
|
||||||
n = netlinks.nl+i;
|
n = netlinks.nl+i;
|
||||||
if(n->cc == 0)
|
if(n->cc == nil)
|
||||||
continue;
|
continue;
|
||||||
p = seprint(p, e, "if%d path: %s\n", i, n->path);
|
p = seprint(p, e, "if%d path: %s\n", i, n->path);
|
||||||
p = seprint(p, e, "if%d ea: %E\n", i, n->ea);
|
p = seprint(p, e, "if%d ea: %E\n", i, n->ea);
|
||||||
|
@ -1707,7 +1707,7 @@ addnet(char *path, Chan *cc, Chan *dc, Chan *mtu, uchar *ea)
|
||||||
}
|
}
|
||||||
nl = netlinks.nl;
|
nl = netlinks.nl;
|
||||||
e = nl + nelem(netlinks.nl);
|
e = nl + nelem(netlinks.nl);
|
||||||
for(; nl < e && nl->cc; nl++)
|
for(; nl < e && nl->cc != nil; nl++)
|
||||||
continue;
|
continue;
|
||||||
if(nl == e)
|
if(nl == e)
|
||||||
error("out of netlink structures");
|
error("out of netlink structures");
|
||||||
|
@ -2249,11 +2249,9 @@ getaddr(char *path, uchar *ea)
|
||||||
cclose(c);
|
cclose(c);
|
||||||
nexterror();
|
nexterror();
|
||||||
}
|
}
|
||||||
if(c == nil)
|
|
||||||
panic("æ: getaddr: c == nil");
|
|
||||||
n = devtab[c->type]->read(c, buf, sizeof buf-1, 0);
|
n = devtab[c->type]->read(c, buf, sizeof buf-1, 0);
|
||||||
poperror();
|
|
||||||
cclose(c);
|
cclose(c);
|
||||||
|
poperror();
|
||||||
buf[n] = 0;
|
buf[n] = 0;
|
||||||
if(parseether(ea, buf) < 0)
|
if(parseether(ea, buf) < 0)
|
||||||
error("parseether failure");
|
error("parseether failure");
|
||||||
|
@ -2270,21 +2268,19 @@ netbind(char *path)
|
||||||
snprint(addr, sizeof addr, "%s!0x%x", path, Aoetype);
|
snprint(addr, sizeof addr, "%s!0x%x", path, Aoetype);
|
||||||
dc = chandial(addr, nil, nil, &cc);
|
dc = chandial(addr, nil, nil, &cc);
|
||||||
snprint(addr, sizeof addr, "%s/mtu", path);
|
snprint(addr, sizeof addr, "%s/mtu", path);
|
||||||
if(waserror())
|
mtu = nil;
|
||||||
mtu = nil;
|
if(!waserror()){
|
||||||
else {
|
|
||||||
mtu = namec(addr, Aopen, OREAD, 0);
|
mtu = namec(addr, Aopen, OREAD, 0);
|
||||||
poperror();
|
poperror();
|
||||||
}
|
}
|
||||||
|
|
||||||
if(waserror()){
|
if(waserror()){
|
||||||
cclose(dc);
|
cclose(dc);
|
||||||
cclose(cc);
|
cclose(cc);
|
||||||
if(mtu)
|
if(mtu != nil)
|
||||||
cclose(mtu);
|
cclose(mtu);
|
||||||
nexterror();
|
nexterror();
|
||||||
}
|
}
|
||||||
if(dc == nil || cc == nil)
|
if(dc == nil || cc == nil)
|
||||||
error(Enonexist);
|
error(Enonexist);
|
||||||
getaddr(path, ea);
|
getaddr(path, ea);
|
||||||
nl = addnet(path, cc, dc, mtu, ea);
|
nl = addnet(path, cc, dc, mtu, ea);
|
||||||
|
@ -2346,7 +2342,7 @@ netunbind(char *path)
|
||||||
|
|
||||||
/* reschedule packets. */
|
/* reschedule packets. */
|
||||||
wlock(&devs);
|
wlock(&devs);
|
||||||
for(d = devs.d; d; d = d->next){
|
for(d = devs.d; d != nil; d = d->next){
|
||||||
qlock(d);
|
qlock(d);
|
||||||
for(i = 0; i < d->nframes; i++){
|
for(i = 0; i < d->nframes; i++){
|
||||||
f = d->frames + i;
|
f = d->frames + i;
|
||||||
|
@ -2359,7 +2355,7 @@ netunbind(char *path)
|
||||||
|
|
||||||
/* squeeze devlink pool. (we assert nobody is using them now) */
|
/* squeeze devlink pool. (we assert nobody is using them now) */
|
||||||
wlock(&devs);
|
wlock(&devs);
|
||||||
for(d = devs.d; d; d = d->next){
|
for(d = devs.d; d != nil; d = d->next){
|
||||||
qlock(d);
|
qlock(d);
|
||||||
for(i = 0; i < d->ndl; i++){
|
for(i = 0; i < d->ndl; i++){
|
||||||
l = d->dl + i;
|
l = d->dl + i;
|
||||||
|
@ -2374,7 +2370,7 @@ netunbind(char *path)
|
||||||
lock(&netlinks);
|
lock(&netlinks);
|
||||||
dc = n->dc;
|
dc = n->dc;
|
||||||
cc = n->cc;
|
cc = n->cc;
|
||||||
if(n->mtu)
|
if(n->mtu != nil)
|
||||||
cclose(n->mtu);
|
cclose(n->mtu);
|
||||||
memset(n, 0, sizeof *n);
|
memset(n, 0, sizeof *n);
|
||||||
unlock(&netlinks);
|
unlock(&netlinks);
|
||||||
|
@ -2384,7 +2380,7 @@ netunbind(char *path)
|
||||||
|
|
||||||
/* squeeze orphan devices */
|
/* squeeze orphan devices */
|
||||||
wlock(&devs);
|
wlock(&devs);
|
||||||
for(p = d = devs.d; d; d = next){
|
for(p = d = devs.d; d != nil; d = next){
|
||||||
next = d->next;
|
next = d->next;
|
||||||
if(d->ndl > 0){
|
if(d->ndl > 0){
|
||||||
p = d;
|
p = d;
|
||||||
|
@ -2413,7 +2409,7 @@ strtoss(char *f, uint *shelf, uint *slot)
|
||||||
|
|
||||||
*shelf = 0xffff;
|
*shelf = 0xffff;
|
||||||
*slot = 0xff;
|
*slot = 0xff;
|
||||||
if(!f)
|
if(f == nil)
|
||||||
return;
|
return;
|
||||||
*shelf = strtol(f, &s, 0);
|
*shelf = strtol(f, &s, 0);
|
||||||
if(s == f || *shelf > 0xffff)
|
if(s == f || *shelf > 0xffff)
|
||||||
|
@ -2444,7 +2440,7 @@ removedev(Aoedev *d)
|
||||||
wlock(&devs);
|
wlock(&devs);
|
||||||
p = 0;
|
p = 0;
|
||||||
if(d != devs.d)
|
if(d != devs.d)
|
||||||
for(p = devs.d; p; p = p->next)
|
for(p = devs.d; p != nil; p = p->next)
|
||||||
if(p->next == d)
|
if(p->next == d)
|
||||||
break;
|
break;
|
||||||
qlock(d);
|
qlock(d);
|
||||||
|
@ -2455,7 +2451,7 @@ removedev(Aoedev *d)
|
||||||
for(i = 0; i < d->nframes; i++)
|
for(i = 0; i < d->nframes; i++)
|
||||||
frameerror(d, d->frames+i, Enotup);
|
frameerror(d, d->frames+i, Enotup);
|
||||||
|
|
||||||
if(p)
|
if(p != nil)
|
||||||
p->next = d->next;
|
p->next = d->next;
|
||||||
else
|
else
|
||||||
devs.d = d->next;
|
devs.d = d->next;
|
||||||
|
@ -2494,7 +2490,7 @@ removestr(char *f)
|
||||||
|
|
||||||
strtoss(f, &shelf, &slot);
|
strtoss(f, &shelf, &slot);
|
||||||
wlock(&devs);
|
wlock(&devs);
|
||||||
for(d = devs.d; d; d = d->next)
|
for(d = devs.d; d != nil; d = d->next)
|
||||||
if(shelf == d->major && slot == d->minor){
|
if(shelf == d->major && slot == d->minor){
|
||||||
wunlock(&devs); /* BOTCH */
|
wunlock(&devs); /* BOTCH */
|
||||||
removedev(d);
|
removedev(d);
|
||||||
|
|
Loading…
Reference in a new issue