linux-fsdevel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Anton Altaparmakov <aia21@cam.ac.uk>
To: Christoph Hellwig <hch@lst.de>
Cc: Andrew Morton <akpm@osdl.org>, linux-fsdevel@vger.kernel.org
Subject: Re: + switch-ntfs-to-touch_atime.patch added to -mm tree
Date: Tue, 8 Nov 2005 10:59:30 +0000 (GMT)	[thread overview]
Message-ID: <Pine.LNX.4.64.0511081042180.30743@hermes-1.csi.cam.ac.uk> (raw)
In-Reply-To: <Pine.LNX.4.64.0511080944180.30743@hermes-1.csi.cam.ac.uk>

On Tue, 8 Nov 2005, Anton Altaparmakov wrote:
> On Tue, 8 Nov 2005, Christoph Hellwig wrote:
> > [ccing -fsdevel now because this is something of interest to the public]
> > 
> > On Mon, Nov 07, 2005 at 09:51:08PM +0000, Anton Altaparmakov wrote:
> > > What callers are those?  I am curious...  The SUS/Posix standard requires 
> > > it as I said in previous post (except for the no size change case but 
> > > as I also said in previous post the VFS does that wrong in same way as 
> > > ntfs and I just copied vfs)...
> > 
> > Besides the various ->setattr instaces which are supposed to set ctime if
> > ATTR_SIZE|ATTR_CTIME are set (which it is for sys_truncate or
> > sys_ftruncate but possibly not nfsd requests) generic_file_buffered_write()
> > calls vmtruncate and thus ->truncate without asking for ctime updates.
> 
> ntfs doesn't use generic_file_buffered_write() but yes the ntfs version 
> also does it (or will do if it doesn't yet - I had taken it out and 
> can't remember if I had put it back in yet)...
> 
> > The point here is to repeat that the nth time is that you are doing
> > things in ->truncate that you shouldn't do there.  Just move your
> > updates of the base inode to ->setattr, and update ->i_ctime directly
> > like all the other filesystems do instead of using inode_update_time
> > which contains an optimization that's only usefull for a codepath like
> > write where the ctime/mtime update happens very frequently.
> 
> Ok, will do.

Thinking about this some more I finally remembered why ntfs_truncate() 
sets m and ctime on the base inode.  It is because the base inode was 
modified, thus its m and ctime need to reflect this fact.  From the man 
page for stat(2):

[snip]
The field st_mtime is changed by file modifications, e.g. by mknod(2), 
truncate(2), utime(2)  and write(2) (of more than zero bytes).  Moreover, 
st_mtime of a directory is changed by the creation or deletion of files in 
that directory.  The st_mtime field is not changed for changes in owner, 
group, hard link count, or mode.

The field st_ctime is changed by writing or by setting inode information 
(i.e., owner, group, link count, mode, etc.).
[snip]

And ntfs truncate does both of the above to the base inode, so according 
to the above man page it should update the base inode m and ctime.

So what is wrong with that?

For other file systems you do not need to do this because they only have 
one inode.  It would be wrong to do it from ->setattr() because it has 
nothing to do with the base inode.  It is called to update time stamps on 
a specific inode, so we don't want it to change the time stamps on a 
different inode, too.

Although, having said that non-base inodes do not have a/m/c time on disk 
so perhaps you are right that I should be updating the a/m/c time of the 
base inode in addition to the inode itself in ->setattr().

But I still think that ntfs_truncate's modifications of m and ctime of the 
base inode are correct regardless of whether ->setattr() does it because 
ntfs_truncate() is (or at least will be) called from places other than 
->setattr() and it would be silly to have all those other place update the 
cmtimes themselves.

And even your example of file write calling vmtruncate().  I think it is 
correct even there to do an mctimes update of the base inode as the base 
inode was then modified so this should be reflected.

Now that I remembered the actual reason for doing the updates of the base 
inode in ntfs_truncate(), has that changed your mind?

Best regards,

	Anton
-- 
Anton Altaparmakov <aia21 at cam.ac.uk> (replace at with @)
Unix Support, Computing Service, University of Cambridge, CB2 3QH, UK
Linux NTFS maintainer / IRC: #ntfs on irc.freenode.net
WWW: http://linux-ntfs.sf.net/ & http://www-stu.christs.cam.ac.uk/~aia21/

  reply	other threads:[~2005-11-08 10:59 UTC|newest]

Thread overview: 7+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
     [not found] <200511060035.jA60Zk1U004874@shell0.pdx.osdl.net>
     [not found] ` <20051106041321.GC30958@lst.de>
     [not found]   ` <20051105203531.7b67c2d8.akpm@osdl.org>
     [not found]     ` <20051107034614.GB16058@lst.de>
     [not found]       ` <Pine.LNX.4.64.0511071013550.4659@hermes-1.csi.cam.ac.uk>
     [not found]         ` <20051107115914.GA24006@lst.de>
     [not found]           ` <Pine.LNX.4.64.0511072143430.13960@hermes-1.csi.cam.ac.uk>
2005-11-08  4:43             ` + switch-ntfs-to-touch_atime.patch added to -mm tree Christoph Hellwig
2005-11-08  9:47               ` Anton Altaparmakov
2005-11-08 10:59                 ` Anton Altaparmakov [this message]
2005-11-08 10:41               ` Anton Altaparmakov
2005-11-08 15:17                 ` Dave Kleikamp
2005-11-08 15:25                   ` Trond Myklebust
2005-11-08 15:58                     ` Anton Altaparmakov

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=Pine.LNX.4.64.0511081042180.30743@hermes-1.csi.cam.ac.uk \
    --to=aia21@cam.ac.uk \
    --cc=akpm@osdl.org \
    --cc=hch@lst.de \
    --cc=linux-fsdevel@vger.kernel.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).