[openbeosstorage] stat weirdness

  • From: "Andrew Bachmann" <shatty@xxxxxxxxxxxxx>
  • To: "openbeos storage kit" <openbeosstorage@xxxxxxxxxxxxx>,"open bfs develop" <openbfs-develop@xxxxxxxxxxxxx>
  • Date: Thu, 29 Jan 2004 21:35:22 -0800 PST

Hello all,

I found this weirdness while using stat in beos R5, on a bfs partition.  I 
thought it might be of 
interest to some.

I was downloading a file in beshare.  While doing this I ran stat on the file, 
in a tight loop.  I 
checked for changing size and changing modification time.  Specifically, I 
checked to see if the 
size changed without the modification time changing, and vice versa.

I expected to see one of two things.  The first possibility was that they 
always get updated 
atomically, and one never changes without the other.  The second possibility 
was that one was 
updated before the other, and I presumed that it would always be the same field 
updated.

For the most part, the fields are updated together, but occasionally they are 
not.  When they are 
not the resulting stat has an st_size of zero.  This is despite the fact that 
the file obviously has 
several megabytes of data.  I think this is a property of R5 bfs 
implementation, although it could 
be someplace else.  I hope that this property doesn't live in our openbfs 
implementation. :-)

Here's the test (extra stuff trimmed):

int main() {
  int fd = open("filename", O_RDONLY);
  struct stat st;
  off_t osize;
  time_t otime;
  while (true) {
        osize = st.st_size;
    otime = st.st_mtime;
    fstat(fd, &st);
        if ((osize != st.st_size) && (otime == st.st_mtime) ||
        (osize == st.st_size) && (otime != st.st_mtime)) {
                fprintf(stderr, "mismatch: ");
                fprintf(stderr, "os = %lu, ns = %lu : ", osize, st.st_size);
                fprintf(stderr, "ot = %lu, nt = %lu\n", otime, st.st_mtime);
    }
}

Andrew


Other related posts:

  • » [openbeosstorage] stat weirdness