[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