coreutils
[Top][All Lists]
Advanced

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

Re: stat: reading btime on linux via statx


From: Pádraig Brady
Subject: Re: stat: reading btime on linux via statx
Date: Sun, 3 Mar 2019 21:20:36 -0800
User-agent: Mozilla/5.0 (X11; Linux x86_64; rv:45.0) Gecko/20100101 Thunderbird/45.8.0

On 02/03/19 20:03, Pádraig Brady wrote:
> On 23/12/18 12:30, Martin Bukatovic wrote:
>> Dear coreutils list,
>>
>> I'm interested in seeing btime (birth time) in stat output on GNU Linux
>> distributions. Since statx syscall is available since Linux 4.11 [1] and
>> glibc wrapper is available since 2.28 [2], now it's finally possible to
>> use statx in coreutils tools to display btime.
>>
>> I checked the source code of stat and related parts in gnulib
>> (stat-time.h) briefly and it seems to me that the current support for
>> reporting birth time of a file works on BSD systems and Solaris only.
>> To add support for reading btime with Linux, it seems that gnulib
>> functions needs to be generalized to use statx when compiled on recent
>> Linux kernel. Is anybody already working on this?
>>
>> In the meantime, I tried to quickly hack the stat code to add support
>> for reading btime via statx in a similar way how btime is read on
>> Solaris via getattrat (patch attached). This way, I was able to play
>> with this feature quickly:
>>
>> ```
>> $ touch ~/tmp/testfile
>> $ ./stat ~/tmp/testfile
>>   File: /home/martin/tmp/testfile
>>   Size: 0               Blocks: 0          IO Block: 4096   regular empty 
>> file
>> Device: fd07h/64775d    Inode: 7388546     Links: 1
>> Access: (0664/-rw-rw-r--)  Uid: ( 1000/  martin)   Gid: ( 1000/  martin)
>> Access: 2018-12-23 21:18:27.717535190 +0100
>> Modify: 2018-12-23 21:18:27.717535190 +0100
>> Change: 2018-12-23 21:18:27.717535190 +0100
>>  Birth: 2018-12-23 21:18:27.717535190 +0100
>> $ touch ~/tmp/testfile
>> $ ./stat ~/tmp/testfile
>>   File: /home/martin/tmp/testfile
>>   Size: 0               Blocks: 0          IO Block: 4096   regular empty 
>> file
>> Device: fd07h/64775d    Inode: 7388546     Links: 1
>> Access: (0664/-rw-rw-r--)  Uid: ( 1000/  martin)   Gid: ( 1000/  martin)
>> Access: 2018-12-23 21:18:34.822543416 +0100
>> Modify: 2018-12-23 21:18:34.822543416 +0100
>> Change: 2018-12-23 21:18:34.822543416 +0100
>>  Birth: 2018-12-23 21:18:27.717535190 +0100
>> ```
>>
>> But as I said, this is rather quick hack, I don't expect you to want
>> to merge this.
>>
>> [1] 
>> https://kernelnewbies.org/Linux_4.11#statx.282.29.2C_a_modern_stat.282.29_alternative
>> [2] https://www.sourceware.org/ml/libc-alpha/2018-08/msg00003.html
>>
> 
> Thanks for the patch and your patience.
> I'm going to add the attached in the upcoming release.
> I've adjusted slightly to handle symlinks,
> and to test (st_mask & STATX_BTIME) on output.
> 
> Ideally we would only call statx() rather than stat() as well,
> though for now the performance implications of that aren't
> worth complicating things.
> 
> I've not actually tested the attached yet,
> so it would be great if you could also.

I tested on kernel 5.0 with glibc 2.29 and it worked well.
ext4 was giving BTIME, while proc and tmpfs was not.

I'll push this now.

thanks again,
Pádraig




reply via email to

[Prev in Thread] Current Thread [Next in Thread]