RFR [8054029] (fc) FileChannel.size() returns 0 for block devices

Ivan Gerasimov ivan.gerasimov at oracle.com
Fri Sep 12 15:10:24 UTC 2014


Thank you Alan!

On 12.09.2014 18:28, Alan Bateman wrote:
> On 12/09/2014 15:04, Ivan Gerasimov wrote:
>> Hello!
>>
>> There was an edge case found, where FileChannel.size() reports wrong 
>> size: This is for block device on Linux.
>> That's due to limitation of stat on Linux, which reports the size of 
>> block special devices to be zero.
>>
>> The proposed solution is to explicitly check, if we deal with a block 
>> device, and use the ioctl() call with the special flag.
>>
>> BUGURL: https://bugs.openjdk.java.net/browse/JDK-8054029
>> WEBREV: http://cr.openjdk.java.net/~igerasim/8054029/0/webrev/
>>
>> The solution isn't perfect, in particular, because we still are 
>> getting zero from j.nio.Files.size().
>>
>> A test is provided with the fix, though I marked it as ignored.
>> This is because the access to the special devices normally needs the 
>> root permissions.
>>
> The change looks okay although I don't think we've ever supported 
> using this API with block special devices.
> I assume you will make sure that it builds okay on Solaris, Linux, and 
> OS X before pushing.

Yes, the build went successfully on all the platforms.

>
> We should avoid adding tests with @ignore when we can. A few tests 
> check if /etc/passwd is writable to know if they are root and pass 
> silently if they are not. I don't know if /dev/sda1 is likely on 
> platforms other than Linux so you could just skip when not Linux. For 
> better exceptions then use FileChannel.open rather than RandomAccessFile.
>

As you suggested, I updated the test: it's now skipped unless /dev/sda1 
is found and readable.

Here's the new webrev:
http://cr.openjdk.java.net/~igerasim/8054029/1/webrev/

> -Alan.
>
>



More information about the nio-dev mailing list