diff mbox series

efi_loader: file: set a backend block device for file operations

Message ID 20200228000549.1937-1-takahiro.akashi@linaro.org
State New
Headers show
Series efi_loader: file: set a backend block device for file operations | expand

Commit Message

AKASHI Takahiro Feb. 28, 2020, 12:05 a.m. UTC
In the current implementation, set_blk_dev() is called in opening a file,
but not in opening a directory. This will cause failures at succeeding
directory operations as the "current" block device remains nullified.
Adding set_blk_dev() fixes this issue.

Signed-off-by: AKASHI Takahiro <takahiro.akashi at linaro.org>
---
 lib/efi_loader/efi_file.c | 3 +++
 1 file changed, 3 insertions(+)

Comments

Heinrich Schuchardt Feb. 28, 2020, 6:13 p.m. UTC | #1
On 2/28/20 1:05 AM, AKASHI Takahiro wrote:
> In the current implementation, set_blk_dev() is called in opening a file,
> but not in opening a directory. This will cause failures at succeeding
> directory operations as the "current" block device remains nullified.
> Adding set_blk_dev() fixes this issue.
>
> Signed-off-by: AKASHI Takahiro <takahiro.akashi at linaro.org>
> ---
>   lib/efi_loader/efi_file.c | 3 +++
>   1 file changed, 3 insertions(+)
>
> diff --git a/lib/efi_loader/efi_file.c b/lib/efi_loader/efi_file.c
> index 140116ddc4ac..ba55b2829e03 100644
> --- a/lib/efi_loader/efi_file.c
> +++ b/lib/efi_loader/efi_file.c
> @@ -235,6 +235,9 @@ static struct efi_file_handle *file_open(struct file_system *fs,
>   	} else {
>   		fh->isdir = 1;
>   		strcpy(fh->path, "");
> +
> +		if (set_blk_dev(fh))
> +			goto error;

In the 'true' path of the if statement is_dir() results in fs_type =
FS_TYPE_ANY. It would be inconsistent to call set_blk_dev() here.

Which "succeeding directory operation" does not call set_blk_dev(fh)?

Where did you observe an error?

Best regards

Heinrich
>   	}
>
>   	return &fh->base;
>
AKASHI Takahiro March 2, 2020, 1 a.m. UTC | #2
On Fri, Feb 28, 2020 at 07:13:42PM +0100, Heinrich Schuchardt wrote:
> On 2/28/20 1:05 AM, AKASHI Takahiro wrote:
> > In the current implementation, set_blk_dev() is called in opening a file,
> > but not in opening a directory. This will cause failures at succeeding
> > directory operations as the "current" block device remains nullified.
> > Adding set_blk_dev() fixes this issue.
> > 
> > Signed-off-by: AKASHI Takahiro <takahiro.akashi at linaro.org>
> > ---
> >   lib/efi_loader/efi_file.c | 3 +++
> >   1 file changed, 3 insertions(+)
> > 
> > diff --git a/lib/efi_loader/efi_file.c b/lib/efi_loader/efi_file.c
> > index 140116ddc4ac..ba55b2829e03 100644
> > --- a/lib/efi_loader/efi_file.c
> > +++ b/lib/efi_loader/efi_file.c
> > @@ -235,6 +235,9 @@ static struct efi_file_handle *file_open(struct file_system *fs,
> >   	} else {
> >   		fh->isdir = 1;
> >   		strcpy(fh->path, "");
> > +
> > +		if (set_blk_dev(fh))
> > +			goto error;
> 
> In the 'true' path of the if statement is_dir() results in fs_type =
> FS_TYPE_ANY. It would be inconsistent to call set_blk_dev() here.
> 
> Which "succeeding directory operation" does not call set_blk_dev(fh)?
> 
> Where did you observe an error?

Ah, it would be better to fix my code as I had a mixed use of
efi interface, open_volume(), and U-Boot interfaces, like fs_opendir()/
readdir().

Thanks,
-Takahiro Akashi

> 
> Best regards
> 
> Heinrich
> >   	}
> > 
> >   	return &fh->base;
> > 
>
diff mbox series

Patch

diff --git a/lib/efi_loader/efi_file.c b/lib/efi_loader/efi_file.c
index 140116ddc4ac..ba55b2829e03 100644
--- a/lib/efi_loader/efi_file.c
+++ b/lib/efi_loader/efi_file.c
@@ -235,6 +235,9 @@  static struct efi_file_handle *file_open(struct file_system *fs,
 	} else {
 		fh->isdir = 1;
 		strcpy(fh->path, "");
+
+		if (set_blk_dev(fh))
+			goto error;
 	}
 
 	return &fh->base;