From: Arnaldo Carvalho de Melo <acme@mandriva.com>
To: Matthew Wilcox <matthew@wil.cx>
Cc: "James E.J. Bottomley" <James.Bottomley@SteelEye.com>,
Andrew Morton <akpm@osdl.org>,
linux-scsi@vger.kernel.org, linux-kernel@vger.kernel.org
Subject: Re: [PATCH][SCSI]: Save some bytes in struct scsi_target
Date: Tue, 12 Dec 2006 02:17:40 -0200 [thread overview]
Message-ID: <20061212041740.GD6218@mandriva.com> (raw)
In-Reply-To: <20061212035221.GF21070@parisc-linux.org>
On Mon, Dec 11, 2006 at 08:52:22PM -0700, Matthew Wilcox wrote:
> On Tue, Dec 12, 2006 at 01:17:18AM -0200, Arnaldo Carvalho de Melo wrote:
> > }; /* size: 368, cachelines: 12 */
> > }; /* size: 364, cachelines: 12 */
>
> Saving space is always good ;-)
>
> > - unsigned int create:1; /* signal that it needs to be added */
> > + char scsi_level;
> > + unsigned char create:1; /* signal that it needs to be added */
> > unsigned int pdt_1f_for_no_lun; /* PDT = 0x1f */
> > /* means no lun present */
> >
> > - char scsi_level;
>
> However, pdt_1f_for_no_lun is really only one bit, saving another 4 bytes.
>
> > struct execute_work ew;
> > enum scsi_target_state state;
>
> enums are a bit of a pain. Even though scsi_target_state uses only two
> values, it's represented as an int. Unless you're on arm-eabi, when
> it'll use less. And even then, it won't use less than a byte, as it has
> to be addressable. I wonder if we can turn scsi_target_state into a
> bit. That'll save another 8 bytes total.
I guess we could use:
enum scsi_target_state state:1;
And make the enum entries start with 0 and not 1 as is today, no? With
that we get down to:
}; /* size: 356, cachelines: 12 */
/* last cacheline: 4 bytes */
Anything else to save these 4 bytes and get down to 11 cachelines per
scsi_target instance? Following patch is on top of the previous one.
Signed-off-by: Arnaldo Carvalho de Melo <acme@mandriva.com>
diff --git a/include/scsi/scsi_device.h b/include/scsi/scsi_device.h
index ab245fc..772f834 100644
--- a/include/scsi/scsi_device.h
+++ b/include/scsi/scsi_device.h
@@ -157,7 +157,7 @@ #define scmd_printk(prefix, scmd, fmt, a
dev_printk(prefix, &(scmd)->device->sdev_gendev, fmt, ##a)
enum scsi_target_state {
- STARGET_RUNNING = 1,
+ STARGET_RUNNING = 0,
STARGET_DEL,
};
@@ -176,12 +176,12 @@ struct scsi_target {
unsigned int id; /* target id ... replace
* scsi_device.id eventually */
char scsi_level;
+ enum scsi_target_state state:1;
unsigned char create:1; /* signal that it needs to be added */
- unsigned int pdt_1f_for_no_lun; /* PDT = 0x1f */
+ unsigned char pdt_1f_for_no_lun:1; /* PDT = 0x1f */
/* means no lun present */
struct execute_work ew;
- enum scsi_target_state state;
void *hostdata; /* available to low-level driver */
unsigned long starget_data[0]; /* for the transport */
/* starget_data must be the last element!!!! */
prev parent reply other threads:[~2006-12-12 13:26 UTC|newest]
Thread overview: 3+ messages / expand[flat|nested] mbox.gz Atom feed top
2006-12-12 3:17 [PATCH][SCSI]: Save some bytes in struct scsi_target Arnaldo Carvalho de Melo
2006-12-12 3:52 ` Matthew Wilcox
2006-12-12 4:17 ` Arnaldo Carvalho de Melo [this message]
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20061212041740.GD6218@mandriva.com \
--to=acme@mandriva.com \
--cc=James.Bottomley@SteelEye.com \
--cc=akpm@osdl.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-scsi@vger.kernel.org \
--cc=matthew@wil.cx \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.