Re: [PATCH against 2.6.14] truncate() or ftruncate shouldn't change mtime if size doesn't change.

From: Neil Brown (neilb_at_suse.de)
Date: 10/31/05

  • Next message: Nico Schottelius: "Rescan SCSI Bus without /proc/scsi?"
    To: Anton Altaparmakov <aia21@cam.ac.uk>
    Date:	Mon, 31 Oct 2005 21:41:39 +1100
    
    

    On Monday October 31, aia21@cam.ac.uk wrote:
    >
    > In may_open() only truncate when O_TRUNC is set and the file size is not
    > zero.

    No, this is wrong. open( ..,O_TRUNC) needs to update the mtime, even
    if the file is already size==0.

    What started me looking at this is that open( O_TRUNC) over NFS
    *doesn't* update the mtime on an empty file, which is inconsistent
    with local file systems, and dis-obeys SUS:

    http://www.opengroup.org/onlinepubs/007908799/xsh/open.html
     
       "If O_TRUNC is set and the file did previously exist, upon
       successful completion, open() will mark for update the st_ctime and
       st_mtime fields of the file. "

    So we DO NOT want this change to may_open (and we DO want a different
    change in NFS which I have asked Trond to submit... To be honest, this
    first came up a couple of months ago, and Trond suggested a patch
    then, but it didn't get any further. I'm just trying to make sure the
    important bits do make it into the kernel..
     http://lkml.org/lkml/2005/8/31/134
    )

    NeilBrown

    > --- linux-2.6/fs/namei.c.old 2005-10-31 09:28:38.000000000 +0000
    > +++ linux-2.6/fs/namei.c 2005-10-31 09:30:39.000000000 +0000
    > @@ -1447,7 +1447,7 @@ int may_open(struct nameidata *nd, int a
    > if (error)
    > return error;
    >
    > - if (flag & O_TRUNC) {
    > + if (flag & O_TRUNC && i_size_read(inode)) {
    > error = get_write_access(inode);
    > if (error)
    > return error;
    >
    -
    To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
    the body of a message to majordomo@vger.kernel.org
    More majordomo info at http://vger.kernel.org/majordomo-info.html
    Please read the FAQ at http://www.tux.org/lkml/


  • Next message: Nico Schottelius: "Rescan SCSI Bus without /proc/scsi?"

    Relevant Pages