[tip:tools/kvm] kvmtool: virtio-9p: Convert EMFILE error at the server to ENFILE for the guest

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

 



Commit-ID:  585b3dfe01bdf07009a35cc371b338bffe392210
Gitweb:     http://git.kernel.org/tip/585b3dfe01bdf07009a35cc371b338bffe392210
Author:     Suzuki K. Poulose <suzuki.poulose@xxxxxxx>
AuthorDate: Fri, 16 Jan 2015 11:30:10 +0000
Committer:  Will Deacon <will.deacon@xxxxxxx>
CommitDate: Fri, 16 Jan 2015 15:16:48 +0000

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

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.

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

For a more practial impact:

 # ./getdtablesize01 &
[1] 1834
 getdtablesize01    0  TINFO  :  Maximum number of files a process can have opened is 1024
 getdtablesize01    0  TINFO  :  Checking with the value returned by getrlimit...RLIMIT_NOFILE
 getdtablesize01    1  TPASS  :  got correct dtablesize, value is 1024
 getdtablesize01    0  TINFO  :  Checking Max num of files that can be opened by a process.Should be: RLIMIT_NOFILE - 1
 getdtablesize01    2  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

Acked-by: Will Deacon <will.deacon@xxxxxxx>
Signed-off-by: Suzuki K. Poulose <suzuki.poulose@xxxxxxx>
Signed-off-by: Will Deacon <will.deacon@xxxxxxx>
---
 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;
--
To unsubscribe from this list: send the line "unsubscribe linux-tip-commits" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html



[Index of Archives]     [Linux Stable Commits]     [Linux Stable Kernel]     [Linux Kernel]     [Linux USB Devel]     [Linux Video &Media]     [Linux Audio Users]     [Yosemite News]     [Linux SCSI]

  Powered by Linux