]> git.karo-electronics.de Git - karo-tx-linux.git/blobdiff - drivers/block/aoe/aoe.h
Merge tag 'stable/for-linus-3.9-rc6-tag' of git://git.kernel.org/pub/scm/linux/kernel...
[karo-tx-linux.git] / drivers / block / aoe / aoe.h
index 9e884acd75fcfc11ae3023f21311b26ae225f6b2..175649468c9518b6b7553abc018c0de4ac5cada1 100644 (file)
@@ -1,5 +1,5 @@
 /* Copyright (c) 2012 Coraid, Inc.  See COPYING for GPL terms. */
-#define VERSION "60"
+#define VERSION "81"
 #define AOE_MAJOR 152
 #define DEVICE_NAME "aoe"
 
@@ -10,7 +10,7 @@
 #define AOE_PARTITIONS (16)
 #endif
 
-#define WHITESPACE " \t\v\f\n"
+#define WHITESPACE " \t\v\f\n,"
 
 enum {
        AOECMD_ATA,
@@ -73,14 +73,17 @@ enum {
        DEVFL_TKILL = (1<<1),   /* flag for timer to know when to kill self */
        DEVFL_EXT = (1<<2),     /* device accepts lba48 commands */
        DEVFL_GDALLOC = (1<<3), /* need to alloc gendisk */
-       DEVFL_KICKME = (1<<4),  /* slow polling network card catch */
-       DEVFL_NEWSIZE = (1<<5), /* need to update dev size in block layer */
+       DEVFL_GD_NOW = (1<<4),  /* allocating gendisk */
+       DEVFL_KICKME = (1<<5),  /* slow polling network card catch */
+       DEVFL_NEWSIZE = (1<<6), /* need to update dev size in block layer */
+       DEVFL_FREEING = (1<<7), /* set when device is being cleaned up */
+       DEVFL_FREED = (1<<8),   /* device has been cleaned up */
 };
 
 enum {
        DEFAULTBCNT = 2 * 512,  /* 2 sectors */
        MIN_BUFS = 16,
-       NTARGETS = 8,
+       NTARGETS = 4,
        NAOEIFS = 8,
        NSKBPOOLMAX = 256,
        NFACTIVE = 61,
@@ -88,9 +91,11 @@ enum {
        TIMERTICK = HZ / 10,
        RTTSCALE = 8,
        RTTDSCALE = 3,
-       MAXTIMER = HZ << 1,
-       RTTAVG_INIT = HZ / 4 << RTTSCALE,
+       RTTAVG_INIT = USEC_PER_SEC / 4 << RTTSCALE,
        RTTDEV_INIT = RTTAVG_INIT / 4,
+
+       HARD_SCORN_SECS = 10,   /* try another remote port after this */
+       MAX_TAINT = 1000,       /* cap on aoetgt taint */
 };
 
 struct buf {
@@ -103,10 +108,17 @@ struct buf {
        struct request *rq;
 };
 
+enum frame_flags {
+       FFL_PROBE = 1,
+};
+
 struct frame {
        struct list_head head;
        u32 tag;
+       struct timeval sent;    /* high-res time packet was sent */
+       u32 sent_jiffs;         /* low-res jiffies-based sent time */
        ulong waited;
+       ulong waited_total;
        struct aoetgt *t;               /* parent target I belong to */
        sector_t lba;
        struct sk_buff *skb;            /* command skb freed on module exit */
@@ -115,6 +127,7 @@ struct frame {
        struct bio_vec *bv;
        ulong bcnt;
        ulong bv_off;
+       char flags;
 };
 
 struct aoeif {
@@ -130,24 +143,26 @@ struct aoetgt {
        struct list_head ffree;                 /* list of free frames */
        struct aoeif ifs[NAOEIFS];
        struct aoeif *ifp;      /* current aoeif in use */
-       ushort nout;            /* value of nout when skb was sent */
+       ushort nout;            /* number of AoE commands outstanding */
        ushort maxout;          /* current value for max outstanding */
        ushort next_cwnd;       /* incr maxout after decrementing to zero */
        ushort ssthresh;        /* slow start threshold */
        ulong falloc;           /* number of allocated frames */
+       int taint;              /* how much we want to avoid this aoetgt */
        int minbcnt;
        int wpkts, rpkts;
+       char nout_probes;
 };
 
 struct aoedev {
        struct aoedev *next;
        ulong sysminor;
        ulong aoemajor;
+       u32 rttavg;             /* scaled AoE round trip time average */
+       u32 rttdev;             /* scaled round trip time mean deviation */
        u16 aoeminor;
        u16 flags;
        u16 nopen;              /* (bd_openers isn't available without sleeping) */
-       u16 rttavg;             /* scaled AoE round trip time average */
-       u16 rttdev;             /* scaled round trip time mean deviation */
        u16 fw_ver;             /* version of blade's firmware */
        u16 lasttag;            /* last tag sent */
        u16 useme;
@@ -169,10 +184,9 @@ struct aoedev {
        ulong maxbcnt;
        struct list_head factive[NFACTIVE];     /* hash of active frames */
        struct list_head rexmitq; /* deferred retransmissions */
-       struct aoetgt *targets[NTARGETS];
+       struct aoetgt **targets;
+       ulong ntargets;         /* number of allocated aoetgt pointers */
        struct aoetgt **tgt;    /* target in use when working */
-       struct aoetgt *htgt;    /* target needing rexmit assistance */
-       ulong ntargets;
        ulong kicked;
        char ident[512];
 };