writev() call writes only 2147479552 bytes (2GB minus 4KB) and returns even if the size of data passed is bigger
Issue
-
In Red Hat Enterprise Linux 6.4 and earlier
writev()system call is able to write more than 2 gigabytes of data in a single call and return the size of data written equal to the size of data passed. In Red Hat Enterprise Linux 6.5 and laterwritev()system call does a short-write of only 2147479552 bytes (2GB minus 4KB) even if the size of data buffers passed is bigger, thus other calls towritev()are needed to write the rest of the data. -
A simple test program shows this difference in
writev()behaviour:[root@serv ~]# uname -a Linux serv.localdomain 2.6.32-358.el6.x86_64 #1 SMP Tue Jan 29 11:47:41 EST 2013 x86_64 x86_64 x86_64 GNU/Linux [root@serv ~]# ./writev_test writev() returned 2147487744 successfully wrote >2GB buffer 2147487744, bytes written: 2147487744 [root@serv ~]# uname -a Linux serv.localdomain 2.6.32-504.el6.x86_64 #1 SMP Tue Sep 16 01:56:35 EDT 2014 x86_64 x86_64 x86_64 GNU/Linux [root@rhel64 ~]# ./writev_test writev() returned 2147479552 failed to write >2GB buffer 2147487744, bytes written: 2147479552
Environment
Red Hat Enterprise Linux 6.5 and later
Subscriber exclusive content
A Red Hat subscription provides unlimited access to our knowledgebase, tools, and much more.