Re: [PATCH] kvmtool: virtio-9p: Convert EMFILE error at the server to ENFILE for the guest

2015-01-16 Thread Will Deacon
On Fri, Jan 16, 2015 at 11:30:10AM +, Suzuki K. Poulose wrote:
> From: "Suzuki K. Poulose" 
> 
> If an open at the 9p server(host) fails with EMFILE (Too many open files for
> the process), we should return ENFILE(too many open files in the system) to
> the guest to indicate the actual status within the guest.
> 
> This was uncovered during LTP, where getdtablesize01 fails to open the maximum
> number-open-files.
> 
> getdtablesize010  TINFO  :  Maximum number of files a process can have 
> opened is 1024
> getdtablesize010  TINFO  :  Checking with the value returned by 
> getrlimit...RLIMIT_NOFILE
> getdtablesize011  TPASS  :  got correct dtablesize, value is 1024
> getdtablesize010  TINFO  :  Checking Max num of files that can be opened 
> by a process.Should be: RLIMIT_NOFILE - 1
> getdtablesize012  TFAIL  :  getdtablesize01.c:102: 974 != 1023
> 
> For a more practial impact:
> 
>  # ./getdtablesize01 &
> [1] 1834
>  getdtablesize010  TINFO  :  Maximum number of files a process can have 
> opened is 1024
>  getdtablesize010  TINFO  :  Checking with the value returned by 
> getrlimit...RLIMIT_NOFILE
>  getdtablesize011  TPASS  :  got correct dtablesize, value is 1024
>  getdtablesize010  TINFO  :  Checking Max num of files that can be opened 
> by a process.Should be: RLIMIT_NOFILE - 1
>  getdtablesize012  TFAIL  :  getdtablesize01.c:102: 974 != 1023
>  [--- Modified to sleep indefinitely, without closing the files --- ]
> 
>  # ls
>  bash: /bin/ls: Too many open files
> 
> That gives a wrong error message for the bash, when getdtablesize01 has 
> exhausted the system
> wide limits, giving false indicators.
> 
> With the fix, we get :
> 
>  # ls
>  bash: /bin/ls: Too many open files in system

I doubt this is affecting anybody in practice, but:

  Acked-by: Will Deacon 

Will

> Signed-off-by: Suzuki K. Poulose 
> ---
>  tools/kvm/virtio/9p.c |4 
>  1 file changed, 4 insertions(+)
> 
> diff --git a/tools/kvm/virtio/9p.c b/tools/kvm/virtio/9p.c
> index 9073a1e..b24c0f2 100644
> --- a/tools/kvm/virtio/9p.c
> +++ b/tools/kvm/virtio/9p.c
> @@ -152,6 +152,10 @@ static void virtio_p9_error_reply(struct p9_dev *p9dev,
>  {
>   u16 tag;
>  
> + /* EMFILE at server implies ENFILE for the VM */
> + if (err == EMFILE)
> + err = ENFILE;
> +
>   pdu->write_offset = VIRTIO_9P_HDR_LEN;
>   virtio_p9_pdu_writef(pdu, "d", err);
>   *outlen = pdu->write_offset;
> -- 
> 1.7.9.5
> 
--
To unsubscribe from this list: send the line "unsubscribe kvm" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[PATCH] kvmtool: virtio-9p: Convert EMFILE error at the server to ENFILE for the guest

2015-01-16 Thread Suzuki K. Poulose
From: "Suzuki K. Poulose" 

If an open at the 9p server(host) fails with EMFILE (Too many open files for
the process), we should return ENFILE(too many open files in the system) to
the guest to indicate the actual status within the guest.

This was uncovered during LTP, where getdtablesize01 fails to open the maximum
number-open-files.

getdtablesize010  TINFO  :  Maximum number of files a process can have 
opened is 1024
getdtablesize010  TINFO  :  Checking with the value returned by 
getrlimit...RLIMIT_NOFILE
getdtablesize011  TPASS  :  got correct dtablesize, value is 1024
getdtablesize010  TINFO  :  Checking Max num of files that can be opened by 
a process.Should be: RLIMIT_NOFILE - 1
getdtablesize012  TFAIL  :  getdtablesize01.c:102: 974 != 1023

For a more practial impact:

 # ./getdtablesize01 &
[1] 1834
 getdtablesize010  TINFO  :  Maximum number of files a process can have 
opened is 1024
 getdtablesize010  TINFO  :  Checking with the value returned by 
getrlimit...RLIMIT_NOFILE
 getdtablesize011  TPASS  :  got correct dtablesize, value is 1024
 getdtablesize010  TINFO  :  Checking Max num of files that can be opened 
by a process.Should be: RLIMIT_NOFILE - 1
 getdtablesize012  TFAIL  :  getdtablesize01.c:102: 974 != 1023
 [--- Modified to sleep indefinitely, without closing the files --- ]

 # ls
 bash: /bin/ls: Too many open files

That gives a wrong error message for the bash, when getdtablesize01 has 
exhausted the system
wide limits, giving false indicators.

With the fix, we get :

 # ls
 bash: /bin/ls: Too many open files in system

Signed-off-by: Suzuki K. Poulose 
---
 tools/kvm/virtio/9p.c |4 
 1 file changed, 4 insertions(+)

diff --git a/tools/kvm/virtio/9p.c b/tools/kvm/virtio/9p.c
index 9073a1e..b24c0f2 100644
--- a/tools/kvm/virtio/9p.c
+++ b/tools/kvm/virtio/9p.c
@@ -152,6 +152,10 @@ static void virtio_p9_error_reply(struct p9_dev *p9dev,
 {
u16 tag;
 
+   /* EMFILE at server implies ENFILE for the VM */
+   if (err == EMFILE)
+   err = ENFILE;
+
pdu->write_offset = VIRTIO_9P_HDR_LEN;
virtio_p9_pdu_writef(pdu, "d", err);
*outlen = pdu->write_offset;
-- 
1.7.9.5


--
To unsubscribe from this list: send the line "unsubscribe kvm" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html