[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Xen-devel] [PATCH V3 2/6] libxl_read_file_contents: fix reading sysfs file



On Sun, Apr 19, 2015 at 11:50:48AM +0800, Chunyan Liu wrote:
> Sysfs file has size=4096 but actual file content is less than that.
> Current libxl_read_file_contents will treat it as error when file size
> and actual file content differs, so reading sysfs file content with
> this function always fails. Fix it so that we can reuse this function
> to get sysfs file content in later pvusb work.
> 

I'm not sure if I should classify this as a bug in Linux's sysfs
interface.

In any case, we would still like to detect the error case that file size
is changed under our feet.

I have a dumb idea of having a dedicated function that is used to read
sysfs, but I'm not sure if it is too dumb.

I will wait for Ian and Ian's input on this.

Wei.

> Signed-off-by: Chunyan Liu <cyliu@xxxxxxxx>
> ---
>  tools/libxl/libxl_utils.c | 5 +----
>  1 file changed, 1 insertion(+), 4 deletions(-)
> 
> diff --git a/tools/libxl/libxl_utils.c b/tools/libxl/libxl_utils.c
> index 9053b27..18ad2b8 100644
> --- a/tools/libxl/libxl_utils.c
> +++ b/tools/libxl/libxl_utils.c
> @@ -363,12 +363,9 @@ int libxl_read_file_contents(libxl_ctx *ctx, const char 
> *filename,
>          if (!data) goto xe;
>  
>          rs = fread(data, 1, datalen, f);
> -        if (rs != datalen) {
> +        if (rs != datalen && !feof(f)) {
>              if (ferror(f))
>                  LOGE(ERROR, "failed to read %s", filename);
> -            else if (feof(f))
> -                LOG(ERROR, "%s changed size while we were reading it",
> -                 filename);
>              else
>                  abort();
>              goto xe;
> -- 
> 1.8.5.2

_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxx
http://lists.xen.org/xen-devel


 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.