In the kernel we have a nice helper that may be used here. This patch
substitutes the custom implementation by the native function call.
Signed-off-by: Andy Shevchenko <[email protected]>
---
drivers/block/aoe/aoedev.c | 9 +++------
1 file changed, 3 insertions(+), 6 deletions(-)
diff --git a/drivers/block/aoe/aoedev.c b/drivers/block/aoe/aoedev.c
index 784c92e..db35ef6 100644
--- a/drivers/block/aoe/aoedev.c
+++ b/drivers/block/aoe/aoedev.c
@@ -12,6 +12,7 @@
#include <linux/bitmap.h>
#include <linux/kdev_t.h>
#include <linux/moduleparam.h>
+#include <linux/string.h>
#include "aoe.h"
static void dummy_timer(ulong);
@@ -241,16 +242,12 @@ aoedev_downdev(struct aoedev *d)
static int
user_req(char *s, size_t slen, struct aoedev *d)
{
- char *p;
+ const char *p;
size_t lim;
if (!d->gd)
return 0;
- p = strrchr(d->gd->disk_name, '/');
- if (!p)
- p = d->gd->disk_name;
- else
- p += 1;
+ p = kbasename(d->gd->disk_name);
lim = sizeof(d->gd->disk_name);
lim -= p - d->gd->disk_name;
if (slen < lim)
--
1.8.3.2
min() incorporates condition in it. In our case we could do assignment and
make a choice at once.
Signed-off-by: Andy Shevchenko <[email protected]>
---
drivers/block/aoe/aoedev.c | 6 ++----
1 file changed, 2 insertions(+), 4 deletions(-)
diff --git a/drivers/block/aoe/aoedev.c b/drivers/block/aoe/aoedev.c
index db35ef6..92fadfa 100644
--- a/drivers/block/aoe/aoedev.c
+++ b/drivers/block/aoe/aoedev.c
@@ -13,6 +13,7 @@
#include <linux/kdev_t.h>
#include <linux/moduleparam.h>
#include <linux/string.h>
+#include <linux/kernel.h>
#include "aoe.h"
static void dummy_timer(ulong);
@@ -248,10 +249,7 @@ user_req(char *s, size_t slen, struct aoedev *d)
if (!d->gd)
return 0;
p = kbasename(d->gd->disk_name);
- lim = sizeof(d->gd->disk_name);
- lim -= p - d->gd->disk_name;
- if (slen < lim)
- lim = slen;
+ lim = min(sizeof(d->gd->disk_name) - (p - d->gd->disk_name), slen);
return !strncmp(s, p, lim);
}
--
1.8.3.2
Looks OK. Thanks.
On Aug 1, 2013, at 8:28 AM, Andy Shevchenko wrote:
> In the kernel we have a nice helper that may be used here. This patch
> substitutes the custom implementation by the native function call.
>
> Signed-off-by: Andy Shevchenko <[email protected]>
> ---
> drivers/block/aoe/aoedev.c | 9 +++------
> 1 file changed, 3 insertions(+), 6 deletions(-)
>
> diff --git a/drivers/block/aoe/aoedev.c b/drivers/block/aoe/aoedev.c
> index 784c92e..db35ef6 100644
> --- a/drivers/block/aoe/aoedev.c
> +++ b/drivers/block/aoe/aoedev.c
> @@ -12,6 +12,7 @@
> #include <linux/bitmap.h>
> #include <linux/kdev_t.h>
> #include <linux/moduleparam.h>
> +#include <linux/string.h>
> #include "aoe.h"
>
> static void dummy_timer(ulong);
> @@ -241,16 +242,12 @@ aoedev_downdev(struct aoedev *d)
> static int
> user_req(char *s, size_t slen, struct aoedev *d)
> {
> - char *p;
> + const char *p;
> size_t lim;
>
> if (!d->gd)
> return 0;
> - p = strrchr(d->gd->disk_name, '/');
> - if (!p)
> - p = d->gd->disk_name;
> - else
> - p += 1;
> + p = kbasename(d->gd->disk_name);
> lim = sizeof(d->gd->disk_name);
> lim -= p - d->gd->disk_name;
> if (slen < lim)
> --
> 1.8.3.2
>
--
Ed Cashin
[email protected]
Thanks.
I agree that we could do that. I'm not sure it increases readability to put this much stuff on one line, though. What is the motivation?
On Aug 1, 2013, at 8:28 AM, Andy Shevchenko wrote:
> min() incorporates condition in it. In our case we could do assignment and
> make a choice at once.
>
> Signed-off-by: Andy Shevchenko <[email protected]>
> ---
> drivers/block/aoe/aoedev.c | 6 ++----
> 1 file changed, 2 insertions(+), 4 deletions(-)
>
> diff --git a/drivers/block/aoe/aoedev.c b/drivers/block/aoe/aoedev.c
> index db35ef6..92fadfa 100644
> --- a/drivers/block/aoe/aoedev.c
> +++ b/drivers/block/aoe/aoedev.c
> @@ -13,6 +13,7 @@
> #include <linux/kdev_t.h>
> #include <linux/moduleparam.h>
> #include <linux/string.h>
> +#include <linux/kernel.h>
> #include "aoe.h"
>
> static void dummy_timer(ulong);
> @@ -248,10 +249,7 @@ user_req(char *s, size_t slen, struct aoedev *d)
> if (!d->gd)
> return 0;
> p = kbasename(d->gd->disk_name);
> - lim = sizeof(d->gd->disk_name);
> - lim -= p - d->gd->disk_name;
> - if (slen < lim)
> - lim = slen;
> + lim = min(sizeof(d->gd->disk_name) - (p - d->gd->disk_name), slen);
>
> return !strncmp(s, p, lim);
> }
> --
> 1.8.3.2
>
--
Ed Cashin
[email protected]
On Thu, 2013-08-01 at 21:13 -0400, Ed Cashin wrote:
> Thanks.
>
> I agree that we could do that. I'm not sure it increases readability to put this much stuff on one line, though. What is the motivation?
Motivation is to explicitly show that that operation is to calculate a
minimum of two the slen parameter and the length of last part of the
disk_name.
It seems matter of taste, so, I'm okay with current piece of code.
> > min() incorporates condition in it. In our case we could do assignment and
> > make a choice at once.
> >
> > Signed-off-by: Andy Shevchenko <[email protected]>
> > ---
> > drivers/block/aoe/aoedev.c | 6 ++----
> > 1 file changed, 2 insertions(+), 4 deletions(-)
> >
> > diff --git a/drivers/block/aoe/aoedev.c b/drivers/block/aoe/aoedev.c
> > index db35ef6..92fadfa 100644
> > --- a/drivers/block/aoe/aoedev.c
> > +++ b/drivers/block/aoe/aoedev.c
> > @@ -13,6 +13,7 @@
> > #include <linux/kdev_t.h>
> > #include <linux/moduleparam.h>
> > #include <linux/string.h>
> > +#include <linux/kernel.h>
> > #include "aoe.h"
> >
> > static void dummy_timer(ulong);
> > @@ -248,10 +249,7 @@ user_req(char *s, size_t slen, struct aoedev *d)
> > if (!d->gd)
> > return 0;
> > p = kbasename(d->gd->disk_name);
> > - lim = sizeof(d->gd->disk_name);
> > - lim -= p - d->gd->disk_name;
> > - if (slen < lim)
> > - lim = slen;
> > + lim = min(sizeof(d->gd->disk_name) - (p - d->gd->disk_name), slen);
> >
> > return !strncmp(s, p, lim);
> > }
> > --
> > 1.8.3.2
> >
>
--
Andy Shevchenko <[email protected]>
Intel Finland Oy