* [dpdk-dev] [PATCH] eal: fix plugindir processing to be filesystem agnostic
@ 2015-11-18 6:45 Panu Matilainen
2015-11-20 16:38 ` David Marchand
2015-11-23 15:39 ` Thomas Monjalon
0 siblings, 2 replies; 7+ messages in thread
From: Panu Matilainen @ 2015-11-18 6:45 UTC (permalink / raw)
To: dev
Not all filesystems supply struct dirent d_type field, in which case
everything in the specified directory would go ignored. One such
filesystem being XFS which RHEL 7 defaults to... stat() the entries
instead.
Fixes: 9f8eb1d9ca0f ("eal: support driver loading from directory")
Signed-off-by: Panu Matilainen <pmatilai@redhat.com>
---
lib/librte_eal/common/eal_common_options.c | 6 ++++--
1 file changed, 4 insertions(+), 2 deletions(-)
diff --git a/lib/librte_eal/common/eal_common_options.c b/lib/librte_eal/common/eal_common_options.c
index bed7385..e51fa12 100644
--- a/lib/librte_eal/common/eal_common_options.c
+++ b/lib/librte_eal/common/eal_common_options.c
@@ -191,12 +191,14 @@ eal_plugindir_init(const char *path)
}
while ((dent = readdir(d)) != NULL) {
- if (dent->d_type != DT_REG && dent->d_type != DT_LNK)
- continue;
+ struct stat sb;
snprintf(sopath, PATH_MAX-1, "%s/%s", path, dent->d_name);
sopath[PATH_MAX-1] = 0;
+ if (!(stat(sopath, &sb) == 0 && S_ISREG(sb.st_mode)))
+ continue;
+
if (eal_plugin_add(sopath) == -1)
break;
}
--
2.5.0
^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [dpdk-dev] [PATCH] eal: fix plugindir processing to be filesystem agnostic
2015-11-18 6:45 [dpdk-dev] [PATCH] eal: fix plugindir processing to be filesystem agnostic Panu Matilainen
@ 2015-11-20 16:38 ` David Marchand
2015-11-23 6:04 ` Panu Matilainen
2015-11-23 15:39 ` Thomas Monjalon
1 sibling, 1 reply; 7+ messages in thread
From: David Marchand @ 2015-11-20 16:38 UTC (permalink / raw)
To: Panu Matilainen; +Cc: dev
Hello Panu,
On Wed, Nov 18, 2015 at 7:45 AM, Panu Matilainen <pmatilai@redhat.com>
wrote:
> Not all filesystems supply struct dirent d_type field, in which case
> everything in the specified directory would go ignored. One such
> filesystem being XFS which RHEL 7 defaults to... stat() the entries
> instead.
>
> Fixes: 9f8eb1d9ca0f ("eal: support driver loading from directory")
>
> Signed-off-by: Panu Matilainen <pmatilai@redhat.com>
> ---
> lib/librte_eal/common/eal_common_options.c | 6 ++++--
> 1 file changed, 4 insertions(+), 2 deletions(-)
>
> diff --git a/lib/librte_eal/common/eal_common_options.c
> b/lib/librte_eal/common/eal_common_options.c
> index bed7385..e51fa12 100644
> --- a/lib/librte_eal/common/eal_common_options.c
> +++ b/lib/librte_eal/common/eal_common_options.c
> @@ -191,12 +191,14 @@ eal_plugindir_init(const char *path)
> }
>
> while ((dent = readdir(d)) != NULL) {
> - if (dent->d_type != DT_REG && dent->d_type != DT_LNK)
> - continue;
> + struct stat sb;
>
> snprintf(sopath, PATH_MAX-1, "%s/%s", path, dent->d_name);
> sopath[PATH_MAX-1] = 0;
>
> + if (!(stat(sopath, &sb) == 0 && S_ISREG(sb.st_mode)))
> + continue;
> +
> if (eal_plugin_add(sopath) == -1)
> break;
> }
It looks like you would skip the symbolic links while you were not before.
Intended ?
--
David Marchand
^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [dpdk-dev] [PATCH] eal: fix plugindir processing to be filesystem agnostic
2015-11-20 16:38 ` David Marchand
@ 2015-11-23 6:04 ` Panu Matilainen
2015-11-23 10:41 ` Thomas Monjalon
0 siblings, 1 reply; 7+ messages in thread
From: Panu Matilainen @ 2015-11-23 6:04 UTC (permalink / raw)
To: David Marchand; +Cc: dev
On 11/20/2015 06:38 PM, David Marchand wrote:
> Hello Panu,
>
> On Wed, Nov 18, 2015 at 7:45 AM, Panu Matilainen <pmatilai@redhat.com>
> wrote:
>
>> Not all filesystems supply struct dirent d_type field, in which case
>> everything in the specified directory would go ignored. One such
>> filesystem being XFS which RHEL 7 defaults to... stat() the entries
>> instead.
>>
>> Fixes: 9f8eb1d9ca0f ("eal: support driver loading from directory")
>>
>> Signed-off-by: Panu Matilainen <pmatilai@redhat.com>
>> ---
>> lib/librte_eal/common/eal_common_options.c | 6 ++++--
>> 1 file changed, 4 insertions(+), 2 deletions(-)
>>
>> diff --git a/lib/librte_eal/common/eal_common_options.c
>> b/lib/librte_eal/common/eal_common_options.c
>> index bed7385..e51fa12 100644
>> --- a/lib/librte_eal/common/eal_common_options.c
>> +++ b/lib/librte_eal/common/eal_common_options.c
>> @@ -191,12 +191,14 @@ eal_plugindir_init(const char *path)
>> }
>>
>> while ((dent = readdir(d)) != NULL) {
>> - if (dent->d_type != DT_REG && dent->d_type != DT_LNK)
>> - continue;
>> + struct stat sb;
>>
>> snprintf(sopath, PATH_MAX-1, "%s/%s", path, dent->d_name);
>> sopath[PATH_MAX-1] = 0;
>>
>> + if (!(stat(sopath, &sb) == 0 && S_ISREG(sb.st_mode)))
>> + continue;
>> +
>> if (eal_plugin_add(sopath) == -1)
>> break;
>> }
>
>
>
> It looks like you would skip the symbolic links while you were not before.
> Intended ?
Intended. We want to accept symlinks in the driver directory, but the
actual drivers are always regular files. Since stat() dereferences
symbolic links it cannot return a file whose type would be S_IFLNK.
- Panu -
^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [dpdk-dev] [PATCH] eal: fix plugindir processing to be filesystem agnostic
2015-11-23 6:04 ` Panu Matilainen
@ 2015-11-23 10:41 ` Thomas Monjalon
2015-11-23 11:42 ` Panu Matilainen
0 siblings, 1 reply; 7+ messages in thread
From: Thomas Monjalon @ 2015-11-23 10:41 UTC (permalink / raw)
To: Panu Matilainen; +Cc: dev
Hi Panu,
2015-11-23 08:04, Panu Matilainen:
> On 11/20/2015 06:38 PM, David Marchand wrote:
> > It looks like you would skip the symbolic links while you were not before.
> > Intended ?
>
> Intended. We want to accept symlinks in the driver directory, but the
> actual drivers are always regular files.
No we use symbolic links:
http://dpdk.org/browse/dpdk/commit/mk/rte.lib.mk?id=133b75923
http://dpdk.org/browse/dpdk/tree/mk/rte.lib.mk#n170
On the same topic, you've added a check in 9f8eb1d9:
+ if (stat(solib->name, &sb) == -1) {
+ RTE_LOG(ERR, EAL, "Invalid plugin specified: %s: %s\n",
+ solib->name, strerror(errno));
It is a regression because we cannot anymore load a plugin from
LD_LIBRARY_PATH without specifying its full path.
It can be tested with scripts/test-null.sh.
How do you suggest to fix it?
Thanks
^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [dpdk-dev] [PATCH] eal: fix plugindir processing to be filesystem agnostic
2015-11-23 10:41 ` Thomas Monjalon
@ 2015-11-23 11:42 ` Panu Matilainen
2015-11-23 13:54 ` Thomas Monjalon
0 siblings, 1 reply; 7+ messages in thread
From: Panu Matilainen @ 2015-11-23 11:42 UTC (permalink / raw)
To: Thomas Monjalon; +Cc: dev
On 11/23/2015 12:41 PM, Thomas Monjalon wrote:
> Hi Panu,
>
> 2015-11-23 08:04, Panu Matilainen:
>> On 11/20/2015 06:38 PM, David Marchand wrote:
>>> It looks like you would skip the symbolic links while you were not before.
>>> Intended ?
>>
>> Intended. We want to accept symlinks in the driver directory, but the
>> actual drivers are always regular files.
>
> No we use symbolic links:
> http://dpdk.org/browse/dpdk/commit/mk/rte.lib.mk?id=133b75923
> http://dpdk.org/browse/dpdk/tree/mk/rte.lib.mk#n170
Those symlinks eventually point to the actual drivers which are always
regular files (and not for example directories), that is the point.
Please apply.
>
> On the same topic, you've added a check in 9f8eb1d9:
> + if (stat(solib->name, &sb) == -1) {
> + RTE_LOG(ERR, EAL, "Invalid plugin specified: %s: %s\n",
> + solib->name, strerror(errno));
>
> It is a regression because we cannot anymore load a plugin from
> LD_LIBRARY_PATH without specifying its full path.
> It can be tested with scripts/test-null.sh.
> How do you suggest to fix it?
My first and foremost thought is regret over messing with -d at all,
instead of keeping with the original plan of a new -D option for
directories. Supporting directories with -d opened up all these annoying
little issues that did not exist in the original plan, and lost the
ability to disable/override the default plugindir.
I suppose the fix is to only use a successful stat to determine if
something is a directory and feed everything else to dlopen() which will
then fail on its own if file is not existent.
I'll send a separate patch for the regression.
- Panu -
> Thanks
>
^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [dpdk-dev] [PATCH] eal: fix plugindir processing to be filesystem agnostic
2015-11-23 11:42 ` Panu Matilainen
@ 2015-11-23 13:54 ` Thomas Monjalon
0 siblings, 0 replies; 7+ messages in thread
From: Thomas Monjalon @ 2015-11-23 13:54 UTC (permalink / raw)
To: Panu Matilainen; +Cc: dev
2015-11-23 13:42, Panu Matilainen:
> On 11/23/2015 12:41 PM, Thomas Monjalon wrote:
> > 2015-11-23 08:04, Panu Matilainen:
> >> On 11/20/2015 06:38 PM, David Marchand wrote:
> >>> It looks like you would skip the symbolic links while you were not before.
> >>> Intended ?
> >>
> >> Intended. We want to accept symlinks in the driver directory, but the
> >> actual drivers are always regular files.
> >
> > No we use symbolic links:
> > http://dpdk.org/browse/dpdk/commit/mk/rte.lib.mk?id=133b75923
> > http://dpdk.org/browse/dpdk/tree/mk/rte.lib.mk#n170
>
> Those symlinks eventually point to the actual drivers which are always
> regular files (and not for example directories), that is the point.
> Please apply.
Yes
> > On the same topic, you've added a check in 9f8eb1d9:
> > + if (stat(solib->name, &sb) == -1) {
> > + RTE_LOG(ERR, EAL, "Invalid plugin specified: %s: %s\n",
> > + solib->name, strerror(errno));
> >
> > It is a regression because we cannot anymore load a plugin from
> > LD_LIBRARY_PATH without specifying its full path.
> > It can be tested with scripts/test-null.sh.
> > How do you suggest to fix it?
>
> My first and foremost thought is regret over messing with -d at all,
> instead of keeping with the original plan of a new -D option for
> directories. Supporting directories with -d opened up all these annoying
> little issues that did not exist in the original plan, and lost the
> ability to disable/override the default plugindir.
I keep thinking having an unique option is a good thing.
If disabling the default directory is needed, we can imagine a special
syntax like -d-
Thanks for your work.
> I suppose the fix is to only use a successful stat to determine if
> something is a directory and feed everything else to dlopen() which will
> then fail on its own if file is not existent.
Yes sounds good.
> I'll send a separate patch for the regression.
Thanks
^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [dpdk-dev] [PATCH] eal: fix plugindir processing to be filesystem agnostic
2015-11-18 6:45 [dpdk-dev] [PATCH] eal: fix plugindir processing to be filesystem agnostic Panu Matilainen
2015-11-20 16:38 ` David Marchand
@ 2015-11-23 15:39 ` Thomas Monjalon
1 sibling, 0 replies; 7+ messages in thread
From: Thomas Monjalon @ 2015-11-23 15:39 UTC (permalink / raw)
To: Panu Matilainen; +Cc: dev
2015-11-18 08:45, Panu Matilainen:
> Not all filesystems supply struct dirent d_type field, in which case
> everything in the specified directory would go ignored. One such
> filesystem being XFS which RHEL 7 defaults to... stat() the entries
> instead.
>
> Fixes: 9f8eb1d9ca0f ("eal: support driver loading from directory")
>
> Signed-off-by: Panu Matilainen <pmatilai@redhat.com>
Applied, thanks
^ permalink raw reply [flat|nested] 7+ messages in thread
end of thread, other threads:[~2015-11-23 15:40 UTC | newest]
Thread overview: 7+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2015-11-18 6:45 [dpdk-dev] [PATCH] eal: fix plugindir processing to be filesystem agnostic Panu Matilainen
2015-11-20 16:38 ` David Marchand
2015-11-23 6:04 ` Panu Matilainen
2015-11-23 10:41 ` Thomas Monjalon
2015-11-23 11:42 ` Panu Matilainen
2015-11-23 13:54 ` Thomas Monjalon
2015-11-23 15:39 ` Thomas Monjalon
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).