Re: 2.6.34-rc6 regression: pcmcia no longer compiles

From: Marc Zyngier
Date: Tue May 04 2010 - 07:34:08 EST


On Tue, 4 May 2010 06:14:48 +0200, Pavel Machek <pavel@xxxxxx> wrote:
> Hi!
>
> -rc5 compiled ok with similar config.
>
> Now I get:
>
> CHK include/linux/version.h
> CHK include/generated/utsrelease.h
> make[1]: `include/generated/mach-types.h' is up to date.
> CALL scripts/checksyscalls.sh
> CHK include/generated/compile.h
> CC drivers/pcmcia/pcmcia_ioctl.o
> drivers/pcmcia/pcmcia_ioctl.c: In function 'ds_open':
> drivers/pcmcia/pcmcia_ioctl.c:714: error: 'struct <anonymous>' has no
> member named 'present'
> drivers/pcmcia/pcmcia_ioctl.c: In function 'ds_read':
> drivers/pcmcia/pcmcia_ioctl.c:773: error: 'struct <anonymous>' has no
> member named 'dead'
> drivers/pcmcia/pcmcia_ioctl.c: In function 'ds_ioctl':
> drivers/pcmcia/pcmcia_ioctl.c:841: error: 'struct <anonymous>' has no
> member named 'dead'
> make[2]: *** [drivers/pcmcia/pcmcia_ioctl.o] Error 1
> make[1]: *** [drivers/pcmcia] Error 2
> make: *** [drivers] Error 2

Does the attached patch fix it (compile-tested only)?

M.
--
Who you jivin' with that Cosmik Debris?From 7d289f9b062e1b17e985c7898f8824e2417d783c Mon Sep 17 00:00:00 2001
From: Marc Zyngier <maz@xxxxxxxxxxxxxxx>
Date: Tue, 4 May 2010 12:21:53 +0100
Subject: [PATCH] pcmcia: fix compilation after 16bit state locking changes

Commit 04de0816 (pcmcia: pcmcia_dev_present bugfix) broke the
deprecated ioctl layer. Fix it by getting rid of references to
unexisting fields.

Signed-off-by: Marc Zyngier <maz@xxxxxxxxxxxxxxx>
Reported-by: Pavel Machek <pavel@xxxxxx>
---
drivers/pcmcia/pcmcia_ioctl.c | 7 +------
1 files changed, 1 insertions(+), 6 deletions(-)

diff --git a/drivers/pcmcia/pcmcia_ioctl.c b/drivers/pcmcia/pcmcia_ioctl.c
index 104e73d..7631faa 100644
--- a/drivers/pcmcia/pcmcia_ioctl.c
+++ b/drivers/pcmcia/pcmcia_ioctl.c
@@ -711,7 +711,7 @@ static int ds_open(struct inode *inode, struct file *file)
warning_printed = 1;
}

- if (s->pcmcia_state.present)
+ if (atomic_read(&s->present))
queue_event(user, CS_EVENT_CARD_INSERTION);
out:
unlock_kernel();
@@ -770,9 +770,6 @@ static ssize_t ds_read(struct file *file, char __user *buf,
return -EIO;

s = user->socket;
- if (s->pcmcia_state.dead)
- return -EIO;
-
ret = wait_event_interruptible(s->queue, !queue_empty(user));
if (ret == 0)
ret = put_user(get_queued_event(user), (int __user *)buf) ? -EFAULT : 4;
@@ -838,8 +835,6 @@ static int ds_ioctl(struct inode *inode, struct file *file,
return -EIO;

s = user->socket;
- if (s->pcmcia_state.dead)
- return -EIO;

size = (cmd & IOCSIZE_MASK) >> IOCSIZE_SHIFT;
if (size > sizeof(ds_ioctl_arg_t))
--
1.7.0.4