Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 330186
b: refs/heads/master
c: 64a80f5
h: refs/heads/master
v: v3
  • Loading branch information
Ed Cashin authored and Linus Torvalds committed Oct 5, 2012
1 parent a7c766b commit dcc1665
Show file tree
Hide file tree
Showing 4 changed files with 50 additions and 55 deletions.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: 6583303c5e324a918ee1d57201acd9869f3be6da
refs/heads/master: 64a80f5ac78a289f66c373ace61973205d960ee7
8 changes: 4 additions & 4 deletions trunk/drivers/block/aoe/aoe.h
Original file line number Diff line number Diff line change
Expand Up @@ -91,7 +91,7 @@ enum {
NTARGETS = 8,
NAOEIFS = 8,
NSKBPOOLMAX = 256,
NFACTIVE = 17,
NFACTIVE = 61,

TIMERTICK = HZ / 10,
MINTIMER = HZ >> 2,
Expand Down Expand Up @@ -132,14 +132,11 @@ struct aoetgt {
unsigned char addr[6];
ushort nframes;
struct aoedev *d; /* parent device I belong to */
struct list_head factive[NFACTIVE]; /* hash of active frames */
struct list_head ffree; /* list of free frames */
struct aoeif ifs[NAOEIFS];
struct aoeif *ifp; /* current aoeif in use */
ushort nout;
ushort maxout;
u16 lasttag; /* last tag sent */
u16 useme;
ulong falloc;
ulong lastwadj; /* last window adjustment */
int minbcnt;
Expand All @@ -156,6 +153,8 @@ struct aoedev {
u16 rttavg; /* round trip average of requests/responses */
u16 mintimer;
u16 fw_ver; /* version of blade's firmware */
u16 lasttag; /* last tag sent */
u16 useme;
ulong ref;
struct work_struct work;/* disk create work struct */
struct gendisk *gd;
Expand All @@ -172,6 +171,7 @@ struct aoedev {
struct request *rq;
} ip;
ulong maxbcnt;
struct list_head factive[NFACTIVE]; /* hash of active frames */
struct aoetgt *targets[NTARGETS];
struct aoetgt **tgt; /* target in use when working */
struct aoetgt *htgt; /* target needing rexmit assistance */
Expand Down
65 changes: 28 additions & 37 deletions trunk/drivers/block/aoe/aoecmd.c
Original file line number Diff line number Diff line change
Expand Up @@ -59,14 +59,14 @@ new_skb(ulong len)
}

static struct frame *
getframe(struct aoetgt *t, u32 tag)
getframe(struct aoedev *d, u32 tag)
{
struct frame *f;
struct list_head *head, *pos, *nx;
u32 n;

n = tag % NFACTIVE;
head = &t->factive[n];
head = &d->factive[n];
list_for_each_safe(pos, nx, head) {
f = list_entry(pos, struct frame, head);
if (f->tag == tag) {
Expand All @@ -83,18 +83,18 @@ getframe(struct aoetgt *t, u32 tag)
* This driver reserves tag -1 to mean "unused frame."
*/
static int
newtag(struct aoetgt *t)
newtag(struct aoedev *d)
{
register ulong n;

n = jiffies & 0xffff;
return n |= (++t->lasttag & 0x7fff) << 16;
return n |= (++d->lasttag & 0x7fff) << 16;
}

static u32
aoehdr_atainit(struct aoedev *d, struct aoetgt *t, struct aoe_hdr *h)
{
u32 host_tag = newtag(t);
u32 host_tag = newtag(d);

memcpy(h->src, t->ifp->nd->dev_addr, sizeof h->src);
memcpy(h->dst, t->addr, sizeof h->dst);
Expand Down Expand Up @@ -270,11 +270,11 @@ skb_fillup(struct sk_buff *skb, struct bio_vec *bv, ulong off, ulong cnt)
static void
fhash(struct frame *f)
{
struct aoetgt *t = f->t;
struct aoedev *d = f->t->d;
u32 n;

n = f->tag % NFACTIVE;
list_add_tail(&f->head, &t->factive[n]);
list_add_tail(&f->head, &d->factive[n]);
}

static int
Expand Down Expand Up @@ -433,7 +433,7 @@ resend(struct aoedev *d, struct frame *f)
u32 n;

t = f->t;
n = newtag(t);
n = newtag(d);
skb = f->skb;
if (ifrotate(t) == NULL) {
/* probably can't happen, but set it up to fail anyway */
Expand Down Expand Up @@ -512,9 +512,12 @@ sthtith(struct aoedev *d)
int i;

for (i = 0; i < NFACTIVE; i++) {
head = &ht->factive[i];
head = &d->factive[i];
list_for_each_safe(pos, nx, head) {
f = list_entry(pos, struct frame, head);
if (f->t != ht)
continue;

nf = newframe(d);
if (!nf)
return 0;
Expand Down Expand Up @@ -585,22 +588,20 @@ rexmit_timer(ulong vp)
}

/* collect all frames to rexmit into flist */
tt = d->targets;
te = tt + NTARGETS;
for (; tt < te && *tt; tt++) {
t = *tt;
for (i = 0; i < NFACTIVE; i++) {
head = &t->factive[i];
list_for_each_safe(pos, nx, head) {
f = list_entry(pos, struct frame, head);
if (tsince(f->tag) < timeout)
continue;
/* move to flist for later processing */
list_move_tail(pos, &flist);
}
for (i = 0; i < NFACTIVE; i++) {
head = &d->factive[i];
list_for_each_safe(pos, nx, head) {
f = list_entry(pos, struct frame, head);
if (tsince(f->tag) < timeout)
break; /* end of expired frames */
/* move to flist for later processing */
list_move_tail(pos, &flist);
}

/* window check */
}
/* window check */
tt = d->targets;
te = tt + d->ntargets;
for (; tt < te && (t = *tt); tt++) {
if (t->nout == t->maxout
&& t->maxout < t->nframes
&& (jiffies - t->lastwadj)/HZ > 10) {
Expand All @@ -626,7 +627,7 @@ rexmit_timer(ulong vp)
* Hang all frames on first hash bucket for downdev
* to clean up.
*/
list_splice(&flist, &f->t->factive[0]);
list_splice(&flist, &d->factive[0]);
aoedev_downdev(d);
break;
}
Expand Down Expand Up @@ -1162,15 +1163,7 @@ aoecmd_ata_rsp(struct sk_buff *skb)
spin_lock_irqsave(&d->lock, flags);

n = be32_to_cpu(get_unaligned(&h->tag));
t = gettgt(d, h->src);
if (t == NULL) {
printk(KERN_INFO "aoe: can't find target e%ld.%d:%pm\n",
d->aoemajor, d->aoeminor, h->src);
spin_unlock_irqrestore(&d->lock, flags);
aoedev_put(d);
return skb;
}
f = getframe(t, n);
f = getframe(d, n);
if (f == NULL) {
calc_rttavg(d, -tsince(n));
spin_unlock_irqrestore(&d->lock, flags);
Expand All @@ -1185,6 +1178,7 @@ aoecmd_ata_rsp(struct sk_buff *skb)
aoechr_error(ebuf);
return skb;
}
t = f->t;
calc_rttavg(d, tsince(f->tag));
t->nout--;
aoecmd_work(d);
Expand Down Expand Up @@ -1253,7 +1247,6 @@ static struct aoetgt *
addtgt(struct aoedev *d, char *addr, ulong nframes)
{
struct aoetgt *t, **tt, **te;
int i;

tt = d->targets;
te = tt + NTARGETS;
Expand All @@ -1278,8 +1271,6 @@ addtgt(struct aoedev *d, char *addr, ulong nframes)
t->ifp = t->ifs;
t->maxout = t->nframes;
INIT_LIST_HEAD(&t->ffree);
for (i = 0; i < NFACTIVE; ++i)
INIT_LIST_HEAD(&t->factive[i]);
return *tt = t;
}

Expand Down
30 changes: 17 additions & 13 deletions trunk/drivers/block/aoe/aoedev.c
Original file line number Diff line number Diff line change
Expand Up @@ -103,22 +103,23 @@ aoedev_downdev(struct aoedev *d)

d->flags &= ~DEVFL_UP;

/* clean out active buffers on all targets */
/* clean out active buffers */
for (i = 0; i < NFACTIVE; i++) {
head = &d->factive[i];
list_for_each_safe(pos, nx, head) {
f = list_entry(pos, struct frame, head);
list_del(pos);
if (f->buf) {
f->buf->nframesout--;
aoe_failbuf(d, f->buf);
}
aoe_freetframe(f);
}
}
/* reset window dressings */
tt = d->targets;
te = tt + NTARGETS;
for (; tt < te && (t = *tt); tt++) {
for (i = 0; i < NFACTIVE; i++) {
head = &t->factive[i];
list_for_each_safe(pos, nx, head) {
list_del(pos);
f = list_entry(pos, struct frame, head);
if (f->buf) {
f->buf->nframesout--;
aoe_failbuf(d, f->buf);
}
aoe_freetframe(f);
}
}
t->maxout = t->nframes;
t->nout = 0;
}
Expand Down Expand Up @@ -250,6 +251,7 @@ struct aoedev *
aoedev_by_sysminor_m(ulong sysminor)
{
struct aoedev *d;
int i;
ulong flags;

spin_lock_irqsave(&devlist_lock, flags);
Expand All @@ -275,6 +277,8 @@ aoedev_by_sysminor_m(ulong sysminor)
d->bufpool = NULL; /* defer to aoeblk_gdalloc */
d->tgt = d->targets;
d->ref = 1;
for (i = 0; i < NFACTIVE; i++)
INIT_LIST_HEAD(&d->factive[i]);
d->sysminor = sysminor;
d->aoemajor = AOEMAJOR(sysminor);
d->aoeminor = AOEMINOR(sysminor);
Expand Down

0 comments on commit dcc1665

Please sign in to comment.