Timestamp of file modified through mmap are not changed in 2.6

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

 



Timestamp of file modified through mmap are not changed in 2.6 (even after msync()). Observations on 2.4 and 2.6 kernels:
- on 2.4, timestamps are altered a few seconds after the program exits.
- on 2.6, timestamps are never altered.

Is this behaviour a normal behaviour ?

Program example to reproduce the bug (you need to create a "test" file in the current directory first):

#include <sys/mman.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <unistd.h>
#include <fcntl.h>

int main(void) {
  int fd = open("test", O_RDWR);
  struct stat st;
  char* file;
  if (fd == -1) {
    printf("error opening file\n");
    return 1;
  }
  if (fstat(fd, &st) != 0) {
    printf("error fstating file\n");
    return 1;
  }

  if (st.st_size == 0) {
    printf("error empty file\n");
    return 1;
  }

  printf("Modified date before change: %u\n", st.st_mtime);

  file = mmap(NULL, st.st_size, PROT_READ | PROT_WRITE, MAP_SHARED, fd, 0);

  if (file == NULL) {
    printf("error mmaping file");
    return 1;
  }

  file[0] = file[0] + 1;

  if (msync((void*) file, st.st_size, MS_SYNC) != 0) {
    printf("error syncing file");
    return 1;
  }

  if (munmap(file, st.st_size) != 0) {
    printf("error closing file");
    return 1;
  }

  if (fstat(fd, &st) != 0) {
    printf("error fstating file\n");
    return 1;
  }

  printf("Modified date after change: %u\n", st.st_mtime);

  return 0;
}

-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to [email protected]
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/

[Index of Archives]     [Kernel Newbies]     [Netfilter]     [Bugtraq]     [Photo]     [Stuff]     [Gimp]     [Yosemite News]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Video 4 Linux]     [Linux for the blind]     [Linux Resources]
  Powered by Linux