From: Andi Kleen <andi@firstfloor.org>
To: Paolo Ciarrocchi <paolo.ciarrocchi@gmail.com>
Cc: Andi Kleen <andi@firstfloor.org>,
linux-kernel@vger.kernel.org, kernel-janitors@vger.kernel.org,
gorcunov@gmail.com
Subject: Re: [JANITOR PROPOSAL] Switch ioctl functions to ->unlocked_ioctl
Date: Tue, 08 Jan 2008 20:42:14 +0000 [thread overview]
Message-ID: <20080108204214.GA2117@one.firstfloor.org> (raw)
In-Reply-To: <4d8e3fd30801081158j3e7292d0i939776342015b12d@mail.gmail.com>
> I grepped and tried to do what you suggested.
First a quick question: how would you rate your C knowledge? Did you
ever write a program yourself?
My proposal assumes that you have at least basic C knowledge.
> The first file that git grep reported was:
> arch/arm/common/rtctime.c:static const struct file_operations rtc_fops = {
It's probably better to only do that on files which you can easily compile.
For ARM you would need a cross compiler.
>
> So I cooked up the following patch (probably mangled, just to give you
> a rough idea of what I did):
> diff --git a/arch/arm/common/rtctime.c b/arch/arm/common/rtctime.c
> index bf1075e..19dedb5 100644
> --- a/arch/arm/common/rtctime.c
> +++ b/arch/arm/common/rtctime.c
> @@ -189,13 +189,16 @@ static int rtc_ioctl(struct inode *inode, struct
> file *file, unsigned int cmd,
> if (ret)
> break;
> ret = copy_to_user(uarg, &alrm.time, sizeof(tm));
> - if (ret)
> + if (ret) {
> + unlock_kernel();
> ret = -EFAULT;
In this case it would be better to just put the unlock_kernel() directly
before the single return. You only need to sprinkle them all over when
the function has multiple returns. Or then change the flow to only
have a single return, but that would be slightly advanced.
> - if (ret)
> + if (ret) {
> + unlock_kernel();
> ret = -EFAULT;
> + }
> break;
>
> default:
> @@ -329,15 +340,18 @@ static int rtc_fasync(int fd, struct file *file, int on)
> return fasync_helper(fd, file, on, &rtc_async_queue);
> }
>
> -static const struct file_operations rtc_fops = {
> +static long rtc_fioctl(struct file_operations rtc_fops)
> +{
> + lock_kernel();
No the lock_kernel() of course has to be in the function, not in the structure
definition which does not contain any code.
Also the _operations structure stays the same (except for .ioctl -> .unlocked_ioctl);
only the the ioctl function prototype changes.
> Am I'm working in the right direction or should I completely redo the patch?
I would suggest to only work on files that compile. e.g. do a
make allyesconfig
make -j$[$(grep -c processor /proc/cpuinfo)*2] &1 |tee LOG (will probably take a long time)
first and then only modify files when are mentioned in "LOG"
-Andi
WARNING: multiple messages have this Message-ID (diff)
From: Andi Kleen <andi@firstfloor.org>
To: Paolo Ciarrocchi <paolo.ciarrocchi@gmail.com>
Cc: Andi Kleen <andi@firstfloor.org>,
linux-kernel@vger.kernel.org, kernel-janitors@vger.kernel.org,
gorcunov@gmail.com
Subject: Re: [JANITOR PROPOSAL] Switch ioctl functions to ->unlocked_ioctl
Date: Tue, 8 Jan 2008 21:42:14 +0100 [thread overview]
Message-ID: <20080108204214.GA2117@one.firstfloor.org> (raw)
In-Reply-To: <4d8e3fd30801081158j3e7292d0i939776342015b12d@mail.gmail.com>
> I grepped and tried to do what you suggested.
First a quick question: how would you rate your C knowledge? Did you
ever write a program yourself?
My proposal assumes that you have at least basic C knowledge.
> The first file that git grep reported was:
> arch/arm/common/rtctime.c:static const struct file_operations rtc_fops = {
It's probably better to only do that on files which you can easily compile.
For ARM you would need a cross compiler.
>
> So I cooked up the following patch (probably mangled, just to give you
> a rough idea of what I did):
> diff --git a/arch/arm/common/rtctime.c b/arch/arm/common/rtctime.c
> index bf1075e..19dedb5 100644
> --- a/arch/arm/common/rtctime.c
> +++ b/arch/arm/common/rtctime.c
> @@ -189,13 +189,16 @@ static int rtc_ioctl(struct inode *inode, struct
> file *file, unsigned int cmd,
> if (ret)
> break;
> ret = copy_to_user(uarg, &alrm.time, sizeof(tm));
> - if (ret)
> + if (ret) {
> + unlock_kernel();
> ret = -EFAULT;
In this case it would be better to just put the unlock_kernel() directly
before the single return. You only need to sprinkle them all over when
the function has multiple returns. Or then change the flow to only
have a single return, but that would be slightly advanced.
> - if (ret)
> + if (ret) {
> + unlock_kernel();
> ret = -EFAULT;
> + }
> break;
>
> default:
> @@ -329,15 +340,18 @@ static int rtc_fasync(int fd, struct file *file, int on)
> return fasync_helper(fd, file, on, &rtc_async_queue);
> }
>
> -static const struct file_operations rtc_fops = {
> +static long rtc_fioctl(struct file_operations rtc_fops)
> +{
> + lock_kernel();
No the lock_kernel() of course has to be in the function, not in the structure
definition which does not contain any code.
Also the _operations structure stays the same (except for .ioctl -> .unlocked_ioctl);
only the the ioctl function prototype changes.
> Am I'm working in the right direction or should I completely redo the patch?
I would suggest to only work on files that compile. e.g. do a
make allyesconfig
make -j$[$(grep -c processor /proc/cpuinfo)*2] &1 |tee LOG (will probably take a long time)
first and then only modify files when are mentioned in "LOG"
-Andi
next prev parent reply other threads:[~2008-01-08 20:42 UTC|newest]
Thread overview: 89+ messages / expand[flat|nested] mbox.gz Atom feed top
2008-01-08 16:40 [JANITOR PROPOSAL] Switch ioctl functions to ->unlocked_ioctl Andi Kleen
2008-01-08 16:40 ` Andi Kleen
2008-01-08 17:05 ` Cyrill Gorcunov
2008-01-08 17:05 ` Cyrill Gorcunov
2008-01-08 18:52 ` Alexey Dobriyan
2008-01-08 18:52 ` Alexey Dobriyan
2008-01-08 19:18 ` Andi Kleen
2008-01-09 0:40 ` Arnd Bergmann
2008-01-09 0:47 ` Andi Kleen
2008-01-09 1:19 ` Arnd Bergmann
2008-01-09 1:31 ` Kevin Winchester
2008-01-09 1:41 ` Andi Kleen
2008-01-09 8:02 ` Christoph Hellwig
2008-01-09 10:00 ` Junio C Hamano
[not found] ` <200801091255.02172.arnd@arndb.de>
2008-01-09 14:06 ` Andi Kleen
2008-01-08 19:58 ` Paolo Ciarrocchi
2008-01-08 19:58 ` Paolo Ciarrocchi
2008-01-08 20:00 ` Matthew Wilcox
2008-01-08 20:00 ` Matthew Wilcox
2008-01-08 20:03 ` Paolo Ciarrocchi
2008-01-08 20:03 ` Paolo Ciarrocchi
2008-01-08 20:16 ` Matthew Wilcox
2008-01-08 20:16 ` Matthew Wilcox
2008-01-08 20:21 ` Matthew Wilcox
2008-01-08 20:21 ` Matthew Wilcox
2008-01-08 20:26 ` Paolo Ciarrocchi
2008-01-08 20:26 ` Paolo Ciarrocchi
2008-01-08 23:55 ` Dmitri Vorobiev
2008-01-08 23:55 ` Dmitri Vorobiev
2008-03-06 14:54 ` supervising, text processing, semantic "patching" (Re: [JANITOR PROPOSAL] Switch ioctl functions to Oleg Verych
2008-03-06 14:54 ` supervising, text processing, semantic "patching" (Re: [JANITOR PROPOSAL] Switch ioctl functions to ->unlocked_ioctl) Oleg Verych
2008-01-08 20:22 ` [JANITOR PROPOSAL] Switch ioctl functions to ->unlocked_ioctl Rik van Riel
2008-01-08 20:22 ` Rik van Riel
2008-01-08 20:42 ` Andi Kleen [this message]
2008-01-08 20:42 ` Andi Kleen
2008-01-08 20:45 ` Paolo Ciarrocchi
2008-01-08 20:45 ` Paolo Ciarrocchi
2008-01-08 23:06 ` [JANITOR PROPOSAL] Switch ioctl functions to ->unlocked_ioctl II Andi Kleen
2008-01-08 23:06 ` Andi Kleen
2008-01-08 23:43 ` Paolo Ciarrocchi
2008-01-08 23:43 ` Paolo Ciarrocchi
2008-01-09 0:03 ` Andi Kleen
2008-01-09 0:03 ` Andi Kleen
2008-01-09 20:12 ` [JANITOR PROPOSAL] Switch ioctl functions to ->unlocked_ioctl Matt Mackall
2008-01-09 20:12 ` Matt Mackall
2008-01-09 22:40 ` Alasdair G Kergon
2008-01-09 22:40 ` Alasdair G Kergon
2008-01-09 22:46 ` Andi Kleen
2008-01-09 22:46 ` Andi Kleen
2008-01-09 22:45 ` Alasdair G Kergon
2008-01-09 22:45 ` Alasdair G Kergon
2008-01-09 22:58 ` Chris Friesen
2008-01-09 22:58 ` Chris Friesen
2008-01-09 23:05 ` Alasdair G Kergon
2008-01-09 23:05 ` Alasdair G Kergon
2008-01-09 23:31 ` Vadim Lobanov
2008-01-09 23:31 ` Vadim Lobanov
2008-01-10 0:00 ` Alasdair G Kergon
2008-01-10 4:59 ` Vadim Lobanov
2008-01-10 4:59 ` Vadim Lobanov
2008-01-10 8:34 ` Christoph Hellwig
2008-01-10 9:49 ` Daniel Phillips
2008-01-10 9:49 ` Daniel Phillips
2008-01-10 11:39 ` Alasdair G Kergon
2008-01-10 22:55 ` Daniel Phillips
2008-01-10 22:55 ` Daniel Phillips
2008-01-11 8:33 ` Pavel Machek
2008-01-08 23:50 ` Kevin Winchester
2008-01-08 23:50 ` Kevin Winchester
2008-01-09 0:09 ` Andi Kleen
2008-01-09 0:09 ` Andi Kleen
2008-01-09 0:17 ` Kevin Winchester
2008-01-09 0:17 ` Kevin Winchester
2008-01-09 0:27 ` Andi Kleen
2008-01-09 0:27 ` Andi Kleen
2008-01-09 10:34 ` Andre Noll
2008-01-09 10:34 ` Andre Noll
2008-01-09 13:17 ` Richard Knutsson
2008-01-09 13:17 ` Richard Knutsson
2008-01-09 13:33 ` Andre Noll
2008-01-09 13:33 ` Andre Noll
2008-01-10 8:52 ` Rolf Eike Beer
2008-01-10 8:52 ` Rolf Eike Beer
2008-01-10 9:25 ` Andi Kleen
2008-01-10 9:25 ` Andi Kleen
2008-01-10 10:02 ` Rolf Eike Beer
2008-01-10 10:02 ` Rolf Eike Beer
2008-01-10 10:06 ` Andi Kleen
2008-01-10 10:06 ` Andi Kleen
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=20080108204214.GA2117@one.firstfloor.org \
--to=andi@firstfloor.org \
--cc=gorcunov@gmail.com \
--cc=kernel-janitors@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=paolo.ciarrocchi@gmail.com \
/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.