2013-07-26 07:57:38

by Geert Uytterhoeven

[permalink] [raw]
Subject: [PATCH] dm cache: Avoid conflicting remove_mapping() in mq policy

On sparc32, which includes <linux/swap.h> from <asm/pgtable_32.h>:

drivers/md/dm-cache-policy-mq.c:962:13: error: conflicting types for 'remove_mapping'
include/linux/swap.h:285:12: note: previous declaration of 'remove_mapping' was here

As mq_remove_mapping() already exists, and the local remove_mapping() is
used only once, inline it manually to avoid the conflict.

Signed-off-by: Geert Uytterhoeven <[email protected]>
---
I think this is also needed on hexagon, which includes <linux/swap.h> from
<asm/pgtable.h>.

drivers/md/dm-cache-policy-mq.c | 16 +++++++---------
1 file changed, 7 insertions(+), 9 deletions(-)

diff --git a/drivers/md/dm-cache-policy-mq.c b/drivers/md/dm-cache-policy-mq.c
index dc112a7..4296155 100644
--- a/drivers/md/dm-cache-policy-mq.c
+++ b/drivers/md/dm-cache-policy-mq.c
@@ -959,23 +959,21 @@ out:
return r;
}

-static void remove_mapping(struct mq_policy *mq, dm_oblock_t oblock)
+static void mq_remove_mapping(struct dm_cache_policy *p, dm_oblock_t oblock)
{
- struct entry *e = hash_lookup(mq, oblock);
+ struct mq_policy *mq = to_mq_policy(p);
+ struct entry *e;
+
+ mutex_lock(&mq->lock);
+
+ e = hash_lookup(mq, oblock);

BUG_ON(!e || !e->in_cache);

del(mq, e);
e->in_cache = false;
push(mq, e);
-}

-static void mq_remove_mapping(struct dm_cache_policy *p, dm_oblock_t oblock)
-{
- struct mq_policy *mq = to_mq_policy(p);
-
- mutex_lock(&mq->lock);
- remove_mapping(mq, oblock);
mutex_unlock(&mq->lock);
}

--
1.7.9.5


2013-08-16 08:31:24

by Guenter Roeck

[permalink] [raw]
Subject: Re: [PATCH] dm cache: Avoid conflicting remove_mapping() in mq policy

On 07/26/2013 12:57 AM, Geert Uytterhoeven wrote:
> On sparc32, which includes <linux/swap.h> from <asm/pgtable_32.h>:
>
> drivers/md/dm-cache-policy-mq.c:962:13: error: conflicting types for 'remove_mapping'
> include/linux/swap.h:285:12: note: previous declaration of 'remove_mapping' was here
>
> As mq_remove_mapping() already exists, and the local remove_mapping() is
> used only once, inline it manually to avoid the conflict.
>
> Signed-off-by: Geert Uytterhoeven <[email protected]>

Is this patch going anyhere ? The problem breaks the sparc32:allmodconfig build,
so it would be useful to get it fixed.

Thanks,
Guenter

> ---
> I think this is also needed on hexagon, which includes <linux/swap.h> from
> <asm/pgtable.h>.
>
> drivers/md/dm-cache-policy-mq.c | 16 +++++++---------
> 1 file changed, 7 insertions(+), 9 deletions(-)
>
> diff --git a/drivers/md/dm-cache-policy-mq.c b/drivers/md/dm-cache-policy-mq.c
> index dc112a7..4296155 100644
> --- a/drivers/md/dm-cache-policy-mq.c
> +++ b/drivers/md/dm-cache-policy-mq.c
> @@ -959,23 +959,21 @@ out:
> return r;
> }
>
> -static void remove_mapping(struct mq_policy *mq, dm_oblock_t oblock)
> +static void mq_remove_mapping(struct dm_cache_policy *p, dm_oblock_t oblock)
> {
> - struct entry *e = hash_lookup(mq, oblock);
> + struct mq_policy *mq = to_mq_policy(p);
> + struct entry *e;
> +
> + mutex_lock(&mq->lock);
> +
> + e = hash_lookup(mq, oblock);
>
> BUG_ON(!e || !e->in_cache);
>
> del(mq, e);
> e->in_cache = false;
> push(mq, e);
> -}
>
> -static void mq_remove_mapping(struct dm_cache_policy *p, dm_oblock_t oblock)
> -{
> - struct mq_policy *mq = to_mq_policy(p);
> -
> - mutex_lock(&mq->lock);
> - remove_mapping(mq, oblock);
> mutex_unlock(&mq->lock);
> }
>
>

2013-08-16 11:38:46

by Alasdair G Kergon

[permalink] [raw]
Subject: Re: [PATCH] dm cache: Avoid conflicting remove_mapping() in mq policy

On Fri, Aug 16, 2013 at 01:31:18AM -0700, Guenter Roeck wrote:
> Is this patch going anyhere ? The problem breaks the sparc32:allmodconfig build,
> so it would be useful to get it fixed.

We're pulling together a batch of patches today, including this one.

Alasdair