Re: [PATCH 3/3] target: Minor sparse warning fixes and annotations

Nicholas A. Bellinger
2011-01-24T23:26:00Z

On Mon, 2011-01-24 at 15:18 -0800, Joe Eykholt wrote:
> On 1/24/11 1:33 PM, Nicholas A. Bellinger wrote:
> > On Mon, 2011-01-24 at 14:56 -0600, James Bottomley wrote:
> >> On Mon, 2011-01-24 at 12:37 -0800, Nicholas A. Bellinger wrote:
> >>> -#define TASK_CMD(task) ((struct se_cmd *)task->task_se_cmd)
> >>> -#define TASK_DEV(task) ((struct se_device *)task->se_dev)
> >>> +#define TASK_CMD(task) ((task)->task_se_cmd)
> >>> +#define TASK_DEV(task) ((task)->se_dev)
> Part of the problem with the old code is that task was not parenthesized,
> so if TASK_CMD() were used with an expression, you might not get what
> you want. If you did TASK_CMD(p + 5), for example, you would get
>
> ((struct se_cmd *)p + 5->task_se_cmd)
>
> Which wouldn't compile, but maybe other examples would compile and
> would cause strange problems. So, it's a bad macro as it is.
> Just my 2 cents.
>

Good point here Joe.. AFAIK there are no cases of this in actual usage,
but for good measure all of these within target_core_base.h where
converted to:

#define TCM_FOO(p) ((p)->member)

for:

commit b58b76cd21bf461308e7fba175931f8f8c089bd7
Author: Nicholas Bellinger <nab@linux-iscsi.org>
Date: Mon Jan 24 14:29:08 2011 -0800

target: Remove spurious double cast from structure macro accessors

Thanks for your comments!

--nab