[prev in list] [next in list] [prev in thread] [next in thread]
List: fuse-devel
Subject: Re: [fuse-devel] [PATCH] fuse: Do not mask return value from fuse_direct_io for partially valid data
From: Ashish Samant <ashish.samant () oracle ! com>
Date: 2016-03-14 18:18:26
Message-ID: 56E70072.3070702 () oracle ! com
[Download RAW message or body]
On 03/14/2016 09:47 AM, Miklos Szeredi wrote:
> On Wed, Mar 09, 2016 at 10:57:51AM -0800, Ashish Samant wrote:
>> If a user calls writev/readv in direct io mode with partially valid data
>> in the iovec array such that any iovec other than the first one in the
>> array contains invalid data, we currently return the error for the invalid
>> iovec.
>>
>> Instead, we should return the number of bytes already written/read and not
>> the error as we do in the non direct_io case.
> Okay, the patch looks good in theory. Except it doesn't compile.
Oops. Sorry about that. It is because err is defined in the while loop
and I was using it outside the loop.
>
> It would be good to know that you at least tried to compile the patch before
> sending it and preferably even test out the functionality and that it fixes the
> bug (see also Documentations/SubmitChecklist filtered with common sense).
Yes, I did compile and test a slightly different version of the patch
before sending it out and it does fix the bug. I will send v2.
Thanks,
Ashish
>
> Thanks,
> Miklos
>
>> Reported-by: Alexey Kodanev <alexey.kodanev@oracle.com>
>> Signed-off-by: Ashish Samant <ashish.samant@oracle.com>
>> ---
>> fs/fuse/file.c | 6 ++----
>> 1 file changed, 2 insertions(+), 4 deletions(-)
>>
>> diff --git a/fs/fuse/file.c b/fs/fuse/file.c
>> index b03d253..f135008 100644
>> --- a/fs/fuse/file.c
>> +++ b/fs/fuse/file.c
>> @@ -1333,10 +1333,8 @@ ssize_t fuse_direct_io(struct fuse_io_priv *io, struct iov_iter *iter,
>> fl_owner_t owner = current->files;
>> size_t nbytes = min(count, nmax);
>> int err = fuse_get_user_pages(req, iter, &nbytes, write);
>> - if (err) {
>> - res = err;
>> + if (err)
>> break;
>> - }
>>
>> if (write)
>> nres = fuse_send_write(req, io, pos, nbytes, owner);
>> @@ -1374,7 +1372,7 @@ ssize_t fuse_direct_io(struct fuse_io_priv *io, struct iov_iter *iter,
>> if (res > 0)
>> *ppos = pos;
>>
>> - return res;
>> + return res > 0 ? res : err;
>> }
>> EXPORT_SYMBOL_GPL(fuse_direct_io);
>>
>> --
>> 1.9.1
>>
------------------------------------------------------------------------------
Transform Data into Opportunity.
Accelerate data analysis in your applications with
Intel Data Analytics Acceleration Library.
Click to learn more.
http://pubads.g.doubleclick.net/gampad/clk?id=278785231&iu=/4140
--
fuse-devel mailing list
To unsubscribe or subscribe, visit https://lists.sourceforge.net/lists/listinfo/fuse-devel
[prev in list] [next in list] [prev in thread] [next in thread]
Configure |
About |
News |
Add a list |
Sponsored by KoreLogic