On Thu, Aug 19, 2010 at 10:52:18AM +1000, Neil Brown wrote: > On Thu, 19 Aug 2010 09:41:36 +1000 > Neil Brown <neilb@xxxxxxx> wrote: > > > So I agree that this is probably more of an issue for directories than for > > files, and that implementing it just for directories would be a sensible > > first step with lower expected overhead - just my reasoning seems to be a bit > > different. > > Just to be sure we are on the same page: > file_update_time would always refer to current_nfsd_time, but nfsd would > only update current_nfsd_time when a directory was examined (and the other > conditions were met). > > > So my current thinking on how this would look - names have been changed: > > - global timespec 'current_fs_precise_time' is zeroed when > current_kernel_time moves backwards and is protected by a seqlock > > - current_fs_time would be > now = max(current_kernel_time(), current_fs_precise_time) > return timespec_trunc(now, sb->s_time_gran) > (with appropriate seqlock protection) > > - new function in fs/inode.c > get_precise_time(timestamp) Odd name for something that returns nothing of interest; bump_precise_time() might be closer? And unique_time might be better than precise_time, since the property we're asking for is that mtime on a changed file by new? (Or versioned_time?) > cft = current_fs_time() > if (timestamp == cft) /* * Make sure the next mtime stored will be * something different from timestamp: */ > write_seqlock() > if cft == current_fs_precise_time > current_fs_precise_time.tv_nsec++ > else if cft > current_fs_precise_time What's the cft < current_fs_precise_time case? --b. > current_fs_precise_time = cft > write_sequnlock() > return timestamp > > - nfsd xdr response routine does > ts = inode->i_mtime > if (S_ISDIR(inode->i_mode)) > ts = get_precise_time(ts) > xdr_encode_timespec(ts) > > > get_precise_time() probably needs a bit more subtlety to handle different > s_time_gran values and possible races, but I think it is fairly close. > > Then if we ever had an xstat or similar that could ask for precise > timestamps, it just makes a similar call to get_precise_time. > Also if we added code later to use a hires timer on hardware where it was > efficient, get_precise_time could test for that and become a no-op > > Yes, I should probably turn this into a patch ... maybe another day. > > NeilBrown -- To unsubscribe from this list: send the line "unsubscribe linux-nfs" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html