[PATCH] fuse: Fix fuse_get_user_pages() return value

classic Classic list List threaded Threaded
4 messages Options
Reply | Threaded
Open this post in threaded view
|

[PATCH] fuse: Fix fuse_get_user_pages() return value

Seth Forshee
fuse_direct_io() expects this to return either 0 or a negative
error code, but on success it may return a positive value.
fuse_direct_io() may return this same value when the subsequent
I/O operation doesn't transfer any data, which means that it will
return a positive value when no bytes were transferred. This is
obviously problematic.

Fix fuse_get_user_pages() to return 0 on success. This will in
turn make it so that fuse_direct_io() returns 0 if no bytes are
transferred.

Fixes: 742f992708df ("fuse: return patrial success from fuse_direct_io()")
Signed-off-by: Seth Forshee <[hidden email]>
---
 fs/fuse/file.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/fs/fuse/file.c b/fs/fuse/file.c
index b5c616c5ec98..78af5c0996b8 100644
--- a/fs/fuse/file.c
+++ b/fs/fuse/file.c
@@ -1295,7 +1295,7 @@ static int fuse_get_user_pages(struct fuse_req *req, struct iov_iter *ii,
 
  *nbytesp = nbytes;
 
- return ret;
+ return ret < 0 ? ret : 0;
 }
 
 static inline int fuse_iter_npages(const struct iov_iter *ii_p)
--
1.9.1


------------------------------------------------------------------------------
Find and fix application performance issues faster with Applications Manager
Applications Manager provides deep performance insights into multiple tiers of
your business applications. It resolves application problems quickly and
reduces your MTTR. Get your free trial!
https://ad.doubleclick.net/ddm/clk/302982198;130105516;z
--
fuse-devel mailing list
To unsubscribe or subscribe, visit https://lists.sourceforge.net/lists/listinfo/fuse-devel
Reply | Threaded
Open this post in threaded view
|

Re: [PATCH] fuse: Fix fuse_get_user_pages() return value

Ashish Samant
Hi Seth,
On 04/19/2016 03:43 PM, Seth Forshee wrote:

> fuse_direct_io() expects this to return either 0 or a negative
> error code, but on success it may return a positive value.
> fuse_direct_io() may return this same value when the subsequent
> I/O operation doesn't transfer any data, which means that it will
> return a positive value when no bytes were transferred. This is
> obviously problematic.
>
> Fix fuse_get_user_pages() to return 0 on success. This will in
> turn make it so that fuse_direct_io() returns 0 if no bytes are
> transferred.
>
> Fixes: 742f992708df ("fuse: return patrial success from fuse_direct_io()")
> Signed-off-by: Seth Forshee <[hidden email]>
> ---
>   fs/fuse/file.c | 2 +-
>   1 file changed, 1 insertion(+), 1 deletion(-)
>
> diff --git a/fs/fuse/file.c b/fs/fuse/file.c
> index b5c616c5ec98..78af5c0996b8 100644
> --- a/fs/fuse/file.c
> +++ b/fs/fuse/file.c
> @@ -1295,7 +1295,7 @@ static int fuse_get_user_pages(struct fuse_req *req, struct iov_iter *ii,
>  
>   *nbytesp = nbytes;
>  
> - return ret;
> + return ret < 0 ? ret : 0;
>   }
>  
>   static inline int fuse_iter_npages(const struct iov_iter *ii_p)


I have already sent a patch to the list that does exactly the same thing :)

https://sourceforge.net/p/fuse/mailman/message/34966327/

Thanks,
Ashish

------------------------------------------------------------------------------
Find and fix application performance issues faster with Applications Manager
Applications Manager provides deep performance insights into multiple tiers of
your business applications. It resolves application problems quickly and
reduces your MTTR. Get your free trial!
https://ad.doubleclick.net/ddm/clk/302982198;130105516;z
--
fuse-devel mailing list
To unsubscribe or subscribe, visit https://lists.sourceforge.net/lists/listinfo/fuse-devel
Reply | Threaded
Open this post in threaded view
|

Re: [PATCH] fuse: Fix fuse_get_user_pages() return value

Seth Forshee
On Tue, Apr 19, 2016 at 03:57:52PM -0700, Ashish Samant wrote:

> Hi Seth,
> On 04/19/2016 03:43 PM, Seth Forshee wrote:
> >fuse_direct_io() expects this to return either 0 or a negative
> >error code, but on success it may return a positive value.
> >fuse_direct_io() may return this same value when the subsequent
> >I/O operation doesn't transfer any data, which means that it will
> >return a positive value when no bytes were transferred. This is
> >obviously problematic.
> >
> >Fix fuse_get_user_pages() to return 0 on success. This will in
> >turn make it so that fuse_direct_io() returns 0 if no bytes are
> >transferred.
> >
> >Fixes: 742f992708df ("fuse: return patrial success from fuse_direct_io()")
> >Signed-off-by: Seth Forshee <[hidden email]>
> >---
> >  fs/fuse/file.c | 2 +-
> >  1 file changed, 1 insertion(+), 1 deletion(-)
> >
> >diff --git a/fs/fuse/file.c b/fs/fuse/file.c
> >index b5c616c5ec98..78af5c0996b8 100644
> >--- a/fs/fuse/file.c
> >+++ b/fs/fuse/file.c
> >@@ -1295,7 +1295,7 @@ static int fuse_get_user_pages(struct fuse_req *req, struct iov_iter *ii,
> >   *nbytesp = nbytes;
> >- return ret;
> >+ return ret < 0 ? ret : 0;
> >  }
> >  static inline int fuse_iter_npages(const struct iov_iter *ii_p)
>
>
> I have already sent a patch to the list that does exactly the same thing :)
>
> https://sourceforge.net/p/fuse/mailman/message/34966327/

Oops, should have checked the list first I guess :-)

But that's from several weeks ago, and it's still not applied? This is
causing big problems for lxcfs on 4.6-rc kernels, so it's definitely a
regression and needs to get fixed.

Thanks,
Seth

------------------------------------------------------------------------------
Find and fix application performance issues faster with Applications Manager
Applications Manager provides deep performance insights into multiple tiers of
your business applications. It resolves application problems quickly and
reduces your MTTR. Get your free trial!
https://ad.doubleclick.net/ddm/clk/302982198;130105516;z
--
fuse-devel mailing list
To unsubscribe or subscribe, visit https://lists.sourceforge.net/lists/listinfo/fuse-devel
Reply | Threaded
Open this post in threaded view
|

Re: [PATCH] fuse: Fix fuse_get_user_pages() return value

Miklos Szeredi
On Wed, Apr 20, 2016 at 5:43 PM, Seth Forshee
<[hidden email]> wrote:

> On Tue, Apr 19, 2016 at 03:57:52PM -0700, Ashish Samant wrote:
>> Hi Seth,
>> On 04/19/2016 03:43 PM, Seth Forshee wrote:
>> >fuse_direct_io() expects this to return either 0 or a negative
>> >error code, but on success it may return a positive value.
>> >fuse_direct_io() may return this same value when the subsequent
>> >I/O operation doesn't transfer any data, which means that it will
>> >return a positive value when no bytes were transferred. This is
>> >obviously problematic.
>> >
>> >Fix fuse_get_user_pages() to return 0 on success. This will in
>> >turn make it so that fuse_direct_io() returns 0 if no bytes are
>> >transferred.
>> >
>> >Fixes: 742f992708df ("fuse: return patrial success from fuse_direct_io()")
>> >Signed-off-by: Seth Forshee <[hidden email]>
>> >---
>> >  fs/fuse/file.c | 2 +-
>> >  1 file changed, 1 insertion(+), 1 deletion(-)
>> >
>> >diff --git a/fs/fuse/file.c b/fs/fuse/file.c
>> >index b5c616c5ec98..78af5c0996b8 100644
>> >--- a/fs/fuse/file.c
>> >+++ b/fs/fuse/file.c
>> >@@ -1295,7 +1295,7 @@ static int fuse_get_user_pages(struct fuse_req *req, struct iov_iter *ii,
>> >     *nbytesp = nbytes;
>> >-    return ret;
>> >+    return ret < 0 ? ret : 0;
>> >  }
>> >  static inline int fuse_iter_npages(const struct iov_iter *ii_p)
>>
>>
>> I have already sent a patch to the list that does exactly the same thing :)
>>
>> https://sourceforge.net/p/fuse/mailman/message/34966327/
>
> Oops, should have checked the list first I guess :-)
>
> But that's from several weeks ago, and it's still not applied? This is
> causing big problems for lxcfs on 4.6-rc kernels, so it's definitely a
> regression and needs to get fixed.

Applied, thanks.

Miklos

------------------------------------------------------------------------------
Find and fix application performance issues faster with Applications Manager
Applications Manager provides deep performance insights into multiple tiers of
your business applications. It resolves application problems quickly and
reduces your MTTR. Get your free trial!
https://ad.doubleclick.net/ddm/clk/302982198;130105516;z
--
fuse-devel mailing list
To unsubscribe or subscribe, visit https://lists.sourceforge.net/lists/listinfo/fuse-devel