linux-fsdevel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH 2/2] [RFC] sys_fstatat: Update file systems for new ->getattr callback
@ 2009-04-07  8:01 Mark Fasheh
  2009-04-07 22:18 ` [PATCH 3/2] [RFC] NFS: Support the AT_NO_TIMES and AT_STRICT fstatat flags Trond Myklebust
  0 siblings, 1 reply; 4+ messages in thread
From: Mark Fasheh @ 2009-04-07  8:01 UTC (permalink / raw)
  To: linux-fsdevel; +Cc: Sage Weil, Trond Myklebust, Andreas Dilger

The previous patch changed the prototype of ->getattr by adding a flags
field. This patch updates individual file system implementations for the new
flags field.

Signed-off-by: Mark Fasheh <mfasheh@suse.com>
---
 fs/9p/vfs_inode.c          |    2 +-
 fs/afs/inode.c             |    2 +-
 fs/afs/internal.h          |    2 +-
 fs/btrfs/inode.c           |    2 +-
 fs/cifs/cifsfs.h           |    2 +-
 fs/cifs/inode.c            |    2 +-
 fs/coda/inode.c            |    2 +-
 fs/ext4/ext4.h             |    2 +-
 fs/ext4/inode.c            |    2 +-
 fs/fat/fat.h               |    2 +-
 fs/fat/file.c              |    3 ++-
 fs/fuse/dir.c              |    2 +-
 fs/gfs2/ops_inode.c        |    2 +-
 fs/minix/inode.c           |    2 +-
 fs/minix/minix.h           |    2 +-
 fs/nfs/inode.c             |    3 ++-
 fs/ocfs2/file.c            |    3 ++-
 fs/ocfs2/file.h            |    2 +-
 fs/proc/base.c             |    4 ++--
 fs/proc/generic.c          |    2 +-
 fs/proc/proc_net.c         |    2 +-
 fs/proc/proc_sysctl.c      |    2 +-
 fs/proc/root.c             |    2 +-
 fs/sysv/itree.c            |    2 +-
 fs/sysv/sysv.h             |    2 +-
 fs/ubifs/dir.c             |    2 +-
 fs/ubifs/ubifs.h           |    2 +-
 include/linux/coda_linux.h |    2 +-
 include/linux/nfs_fs.h     |    2 +-
 29 files changed, 33 insertions(+), 30 deletions(-)

diff --git a/fs/9p/vfs_inode.c b/fs/9p/vfs_inode.c
index 81f8bbf..e14c502 100644
--- a/fs/9p/vfs_inode.c
+++ b/fs/9p/vfs_inode.c
@@ -737,7 +737,7 @@ done:
 
 static int
 v9fs_vfs_getattr(struct vfsmount *mnt, struct dentry *dentry,
-		 struct kstat *stat)
+		 struct kstat *stat, int flags)
 {
 	int err;
 	struct v9fs_session_info *v9ses;
diff --git a/fs/afs/inode.c b/fs/afs/inode.c
index bb47217..b37d121 100644
--- a/fs/afs/inode.c
+++ b/fs/afs/inode.c
@@ -292,7 +292,7 @@ error_unlock:
  * read the attributes of an inode
  */
 int afs_getattr(struct vfsmount *mnt, struct dentry *dentry,
-		      struct kstat *stat)
+		struct kstat *stat, int flags)
 {
 	struct inode *inode;
 
diff --git a/fs/afs/internal.h b/fs/afs/internal.h
index 67f259d..dedad45 100644
--- a/fs/afs/internal.h
+++ b/fs/afs/internal.h
@@ -546,7 +546,7 @@ extern struct inode *afs_iget(struct super_block *, struct key *,
 			      struct afs_callback *);
 extern void afs_zap_data(struct afs_vnode *);
 extern int afs_validate(struct afs_vnode *, struct key *);
-extern int afs_getattr(struct vfsmount *, struct dentry *, struct kstat *);
+extern int afs_getattr(struct vfsmount *, struct dentry *, struct kstat *, int);
 extern int afs_setattr(struct dentry *, struct iattr *);
 extern void afs_clear_inode(struct inode *);
 
diff --git a/fs/btrfs/inode.c b/fs/btrfs/inode.c
index 7d4f948..6b79aec 100644
--- a/fs/btrfs/inode.c
+++ b/fs/btrfs/inode.c
@@ -4563,7 +4563,7 @@ fail:
 }
 
 static int btrfs_getattr(struct vfsmount *mnt,
-			 struct dentry *dentry, struct kstat *stat)
+			 struct dentry *dentry, struct kstat *stat, int flags)
 {
 	struct inode *inode = dentry->d_inode;
 	generic_fillattr(inode, stat);
diff --git a/fs/cifs/cifsfs.h b/fs/cifs/cifsfs.h
index 2b1d28a..7f40bbf 100644
--- a/fs/cifs/cifsfs.h
+++ b/fs/cifs/cifsfs.h
@@ -49,7 +49,7 @@ extern int cifs_rmdir(struct inode *, struct dentry *);
 extern int cifs_rename(struct inode *, struct dentry *, struct inode *,
 		       struct dentry *);
 extern int cifs_revalidate(struct dentry *);
-extern int cifs_getattr(struct vfsmount *, struct dentry *, struct kstat *);
+extern int cifs_getattr(struct vfsmount *, struct dentry *, struct kstat *, int);
 extern int cifs_setattr(struct dentry *, struct iattr *);
 
 extern const struct inode_operations cifs_file_inode_ops;
diff --git a/fs/cifs/inode.c b/fs/cifs/inode.c
index 4690a36..cd9efb5 100644
--- a/fs/cifs/inode.c
+++ b/fs/cifs/inode.c
@@ -1599,7 +1599,7 @@ int cifs_revalidate(struct dentry *direntry)
 }
 
 int cifs_getattr(struct vfsmount *mnt, struct dentry *dentry,
-	struct kstat *stat)
+		 struct kstat *stat, int flags)
 {
 	int err = cifs_revalidate(dentry);
 	if (!err) {
diff --git a/fs/coda/inode.c b/fs/coda/inode.c
index 830f51a..ebcfc86 100644
--- a/fs/coda/inode.c
+++ b/fs/coda/inode.c
@@ -220,7 +220,7 @@ static void coda_clear_inode(struct inode *inode)
 	coda_cache_clear_inode(inode);
 }
 
-int coda_getattr(struct vfsmount *mnt, struct dentry *dentry, struct kstat *stat)
+int coda_getattr(struct vfsmount *mnt, struct dentry *dentry, struct kstat *stat, int flags)
 {
 	int err = coda_revalidate_inode(dentry);
 	if (!err)
diff --git a/fs/ext4/ext4.h b/fs/ext4/ext4.h
index b0c87dc..3eb9f1f 100644
--- a/fs/ext4/ext4.h
+++ b/fs/ext4/ext4.h
@@ -1081,7 +1081,7 @@ extern struct inode *ext4_iget(struct super_block *, unsigned long);
 extern int  ext4_write_inode(struct inode *, int);
 extern int  ext4_setattr(struct dentry *, struct iattr *);
 extern int  ext4_getattr(struct vfsmount *mnt, struct dentry *dentry,
-				struct kstat *stat);
+			 struct kstat *stat, int flags);
 extern void ext4_delete_inode(struct inode *);
 extern int  ext4_sync_inode(handle_t *, struct inode *);
 extern void ext4_dirty_inode(struct inode *);
diff --git a/fs/ext4/inode.c b/fs/ext4/inode.c
index c7fed5b..0178671 100644
--- a/fs/ext4/inode.c
+++ b/fs/ext4/inode.c
@@ -4691,7 +4691,7 @@ err_out:
 }
 
 int ext4_getattr(struct vfsmount *mnt, struct dentry *dentry,
-		 struct kstat *stat)
+		 struct kstat *stat, int flags)
 {
 	struct inode *inode;
 	unsigned long delalloc_blocks;
diff --git a/fs/fat/fat.h b/fs/fat/fat.h
index ea440d6..c8dd5bc 100644
--- a/fs/fat/fat.h
+++ b/fs/fat/fat.h
@@ -295,7 +295,7 @@ extern const struct inode_operations fat_file_inode_operations;
 extern int fat_setattr(struct dentry * dentry, struct iattr * attr);
 extern void fat_truncate(struct inode *inode);
 extern int fat_getattr(struct vfsmount *mnt, struct dentry *dentry,
-		       struct kstat *stat);
+		       struct kstat *stat, int flags);
 
 /* fat/inode.c */
 extern void fat_attach(struct inode *inode, loff_t i_pos);
diff --git a/fs/fat/file.c b/fs/fat/file.c
index 0a7f4a9..c2b336c 100644
--- a/fs/fat/file.c
+++ b/fs/fat/file.c
@@ -253,7 +253,8 @@ void fat_truncate(struct inode *inode)
 	fat_flush_inodes(inode->i_sb, inode, NULL);
 }
 
-int fat_getattr(struct vfsmount *mnt, struct dentry *dentry, struct kstat *stat)
+int fat_getattr(struct vfsmount *mnt, struct dentry *dentry, struct kstat *stat,
+		int flags)
 {
 	struct inode *inode = dentry->d_inode;
 	generic_fillattr(inode, stat);
diff --git a/fs/fuse/dir.c b/fs/fuse/dir.c
index fdff346..52540e0 100644
--- a/fs/fuse/dir.c
+++ b/fs/fuse/dir.c
@@ -1330,7 +1330,7 @@ static int fuse_setattr(struct dentry *entry, struct iattr *attr)
 }
 
 static int fuse_getattr(struct vfsmount *mnt, struct dentry *entry,
-			struct kstat *stat)
+			struct kstat *stat, int flags)
 {
 	struct inode *inode = entry->d_inode;
 	struct fuse_conn *fc = get_fuse_conn(inode);
diff --git a/fs/gfs2/ops_inode.c b/fs/gfs2/ops_inode.c
index 4987754..6377e3e 100644
--- a/fs/gfs2/ops_inode.c
+++ b/fs/gfs2/ops_inode.c
@@ -1130,7 +1130,7 @@ out:
  */
 
 static int gfs2_getattr(struct vfsmount *mnt, struct dentry *dentry,
-			struct kstat *stat)
+			struct kstat *stat, int flags)
 {
 	struct inode *inode = dentry->d_inode;
 	struct gfs2_inode *ip = GFS2_I(inode);
diff --git a/fs/minix/inode.c b/fs/minix/inode.c
index 618865b..e2d3b92 100644
--- a/fs/minix/inode.c
+++ b/fs/minix/inode.c
@@ -585,7 +585,7 @@ int minix_sync_inode(struct inode * inode)
 	return err;
 }
 
-int minix_getattr(struct vfsmount *mnt, struct dentry *dentry, struct kstat *stat)
+int minix_getattr(struct vfsmount *mnt, struct dentry *dentry, struct kstat *stat, int flags)
 {
 	struct inode *dir = dentry->d_parent->d_inode;
 	struct super_block *sb = dir->i_sb;
diff --git a/fs/minix/minix.h b/fs/minix/minix.h
index e6a0b19..2cc20c7 100644
--- a/fs/minix/minix.h
+++ b/fs/minix/minix.h
@@ -49,7 +49,7 @@ extern unsigned long minix_count_free_inodes(struct minix_sb_info *sbi);
 extern int minix_new_block(struct inode * inode);
 extern void minix_free_block(struct inode *inode, unsigned long block);
 extern unsigned long minix_count_free_blocks(struct minix_sb_info *sbi);
-extern int minix_getattr(struct vfsmount *, struct dentry *, struct kstat *);
+extern int minix_getattr(struct vfsmount *, struct dentry *, struct kstat *, int);
 extern int __minix_write_begin(struct file *file, struct address_space *mapping,
 			loff_t pos, unsigned len, unsigned flags,
 			struct page **pagep, void **fsdata);
diff --git a/fs/nfs/inode.c b/fs/nfs/inode.c
index 0c38168..1a4b61d 100644
--- a/fs/nfs/inode.c
+++ b/fs/nfs/inode.c
@@ -471,7 +471,8 @@ void nfs_setattr_update_inode(struct inode *inode, struct iattr *attr)
 	}
 }
 
-int nfs_getattr(struct vfsmount *mnt, struct dentry *dentry, struct kstat *stat)
+int nfs_getattr(struct vfsmount *mnt, struct dentry *dentry, struct kstat *stat,
+		int flags)
 {
 	struct inode *inode = dentry->d_inode;
 	int need_atime = NFS_I(inode)->cache_validity & NFS_INO_INVALID_ATIME;
diff --git a/fs/ocfs2/file.c b/fs/ocfs2/file.c
index a5887df..3193f6e 100644
--- a/fs/ocfs2/file.c
+++ b/fs/ocfs2/file.c
@@ -1055,7 +1055,8 @@ bail:
 
 int ocfs2_getattr(struct vfsmount *mnt,
 		  struct dentry *dentry,
-		  struct kstat *stat)
+		  struct kstat *stat,
+		  int flags)
 {
 	struct inode *inode = dentry->d_inode;
 	struct super_block *sb = dentry->d_inode->i_sb;
diff --git a/fs/ocfs2/file.h b/fs/ocfs2/file.h
index 172f9fb..f63012f 100644
--- a/fs/ocfs2/file.h
+++ b/fs/ocfs2/file.h
@@ -58,7 +58,7 @@ int ocfs2_extend_no_holes(struct inode *inode, u64 new_i_size,
 			  u64 zero_to);
 int ocfs2_setattr(struct dentry *dentry, struct iattr *attr);
 int ocfs2_getattr(struct vfsmount *mnt, struct dentry *dentry,
-		  struct kstat *stat);
+		  struct kstat *stat, int flags);
 int ocfs2_permission(struct inode *inode, int mask);
 
 int ocfs2_should_update_atime(struct inode *inode,
diff --git a/fs/proc/base.c b/fs/proc/base.c
index beaa0ce..8e146c7 100644
--- a/fs/proc/base.c
+++ b/fs/proc/base.c
@@ -1468,7 +1468,7 @@ out_unlock:
 	return NULL;
 }
 
-static int pid_getattr(struct vfsmount *mnt, struct dentry *dentry, struct kstat *stat)
+static int pid_getattr(struct vfsmount *mnt, struct dentry *dentry, struct kstat *stat, int flags)
 {
 	struct inode *inode = dentry->d_inode;
 	struct task_struct *task;
@@ -3121,7 +3121,7 @@ out_no_task:
 	return retval;
 }
 
-static int proc_task_getattr(struct vfsmount *mnt, struct dentry *dentry, struct kstat *stat)
+static int proc_task_getattr(struct vfsmount *mnt, struct dentry *dentry, struct kstat *stat, int flags)
 {
 	struct inode *inode = dentry->d_inode;
 	struct task_struct *p = get_proc_task(inode);
diff --git a/fs/proc/generic.c b/fs/proc/generic.c
index db7fa5c..045e2f2 100644
--- a/fs/proc/generic.c
+++ b/fs/proc/generic.c
@@ -243,7 +243,7 @@ out:
 }
 
 static int proc_getattr(struct vfsmount *mnt, struct dentry *dentry,
-			struct kstat *stat)
+			struct kstat *stat, int flags)
 {
 	struct inode *inode = dentry->d_inode;
 	struct proc_dir_entry *de = PROC_I(inode)->pde;
diff --git a/fs/proc/proc_net.c b/fs/proc/proc_net.c
index 04d1270..6ff64b5 100644
--- a/fs/proc/proc_net.c
+++ b/fs/proc/proc_net.c
@@ -133,7 +133,7 @@ static struct dentry *proc_tgid_net_lookup(struct inode *dir,
 }
 
 static int proc_tgid_net_getattr(struct vfsmount *mnt, struct dentry *dentry,
-		struct kstat *stat)
+				 struct kstat *stat, int flags)
 {
 	struct inode *inode = dentry->d_inode;
 	struct net *net;
diff --git a/fs/proc/proc_sysctl.c b/fs/proc/proc_sysctl.c
index 94fcfff..1c93da3 100644
--- a/fs/proc/proc_sysctl.c
+++ b/fs/proc/proc_sysctl.c
@@ -335,7 +335,7 @@ static int proc_sys_setattr(struct dentry *dentry, struct iattr *attr)
 	return error;
 }
 
-static int proc_sys_getattr(struct vfsmount *mnt, struct dentry *dentry, struct kstat *stat)
+static int proc_sys_getattr(struct vfsmount *mnt, struct dentry *dentry, struct kstat *stat, int flags)
 {
 	struct inode *inode = dentry->d_inode;
 	struct ctl_table_header *head = grab_header(inode);
diff --git a/fs/proc/root.c b/fs/proc/root.c
index f6299a2..91923e3 100644
--- a/fs/proc/root.c
+++ b/fs/proc/root.c
@@ -138,7 +138,7 @@ void __init proc_root_init(void)
 	proc_sys_init();
 }
 
-static int proc_root_getattr(struct vfsmount *mnt, struct dentry *dentry, struct kstat *stat
+static int proc_root_getattr(struct vfsmount *mnt, struct dentry *dentry, struct kstat *stat, int flags
 )
 {
 	generic_fillattr(dentry->d_inode, stat);
diff --git a/fs/sysv/itree.c b/fs/sysv/itree.c
index f042eec..33a8145 100644
--- a/fs/sysv/itree.c
+++ b/fs/sysv/itree.c
@@ -440,7 +440,7 @@ static unsigned sysv_nblocks(struct super_block *s, loff_t size)
 	return blocks;
 }
 
-int sysv_getattr(struct vfsmount *mnt, struct dentry *dentry, struct kstat *stat)
+int sysv_getattr(struct vfsmount *mnt, struct dentry *dentry, struct kstat *stat, 0)
 {
 	struct super_block *s = mnt->mnt_sb;
 	generic_fillattr(dentry->d_inode, stat);
diff --git a/fs/sysv/sysv.h b/fs/sysv/sysv.h
index 38ebe3f..44b0e7d 100644
--- a/fs/sysv/sysv.h
+++ b/fs/sysv/sysv.h
@@ -146,7 +146,7 @@ extern int sysv_write_inode(struct inode *, int);
 extern int sysv_sync_inode(struct inode *);
 extern int sysv_sync_file(struct file *, struct dentry *, int);
 extern void sysv_set_inode(struct inode *, dev_t);
-extern int sysv_getattr(struct vfsmount *, struct dentry *, struct kstat *);
+extern int sysv_getattr(struct vfsmount *, struct dentry *, struct kstat *, int);
 extern int sysv_init_icache(void);
 extern void sysv_destroy_icache(void);
 
diff --git a/fs/ubifs/dir.c b/fs/ubifs/dir.c
index f55d523..a70380e 100644
--- a/fs/ubifs/dir.c
+++ b/fs/ubifs/dir.c
@@ -1132,7 +1132,7 @@ out_cancel:
 }
 
 int ubifs_getattr(struct vfsmount *mnt, struct dentry *dentry,
-		  struct kstat *stat)
+		  struct kstat *stat, int flags)
 {
 	loff_t size;
 	struct inode *inode = dentry->d_inode;
diff --git a/fs/ubifs/ubifs.h b/fs/ubifs/ubifs.h
index 039a68b..b6d0855 100644
--- a/fs/ubifs/ubifs.h
+++ b/fs/ubifs/ubifs.h
@@ -1672,7 +1672,7 @@ int ubifs_setattr(struct dentry *dentry, struct iattr *attr);
 struct inode *ubifs_new_inode(struct ubifs_info *c, const struct inode *dir,
 			      int mode);
 int ubifs_getattr(struct vfsmount *mnt, struct dentry *dentry,
-		  struct kstat *stat);
+		  struct kstat *stat, int flags);
 
 /* xattr.c */
 int ubifs_setxattr(struct dentry *dentry, const char *name,
diff --git a/include/linux/coda_linux.h b/include/linux/coda_linux.h
index dcc228a..e954f46 100644
--- a/include/linux/coda_linux.h
+++ b/include/linux/coda_linux.h
@@ -39,7 +39,7 @@ int coda_open(struct inode *i, struct file *f);
 int coda_release(struct inode *i, struct file *f);
 int coda_permission(struct inode *inode, int mask);
 int coda_revalidate_inode(struct dentry *);
-int coda_getattr(struct vfsmount *, struct dentry *, struct kstat *);
+int coda_getattr(struct vfsmount *, struct dentry *, struct kstat *, int);
 int coda_setattr(struct dentry *, struct iattr *);
 
 /* this file:  heloers */
diff --git a/include/linux/nfs_fs.h b/include/linux/nfs_fs.h
index db867b0..40bb0de 100644
--- a/include/linux/nfs_fs.h
+++ b/include/linux/nfs_fs.h
@@ -332,7 +332,7 @@ extern struct inode *nfs_fhget(struct super_block *, struct nfs_fh *,
 extern int nfs_refresh_inode(struct inode *, struct nfs_fattr *);
 extern int nfs_post_op_update_inode(struct inode *inode, struct nfs_fattr *fattr);
 extern int nfs_post_op_update_inode_force_wcc(struct inode *inode, struct nfs_fattr *fattr);
-extern int nfs_getattr(struct vfsmount *, struct dentry *, struct kstat *);
+extern int nfs_getattr(struct vfsmount *, struct dentry *, struct kstat *, int);
 extern int nfs_permission(struct inode *, int);
 extern int nfs_open(struct inode *, struct file *);
 extern int nfs_release(struct inode *, struct file *);
-- 
1.5.6


^ permalink raw reply related	[flat|nested] 4+ messages in thread

* Re: [PATCH 3/2] [RFC] NFS: Support the AT_NO_TIMES and AT_STRICT fstatat flags
  2009-04-07  8:01 [PATCH 2/2] [RFC] sys_fstatat: Update file systems for new ->getattr callback Mark Fasheh
@ 2009-04-07 22:18 ` Trond Myklebust
  2009-04-07 22:47   ` Oleg Drokin
  0 siblings, 1 reply; 4+ messages in thread
From: Trond Myklebust @ 2009-04-07 22:18 UTC (permalink / raw)
  To: Mark Fasheh; +Cc: linux-fsdevel, Sage Weil, Andreas Dilger

If the kernel knows that the application doesn't care about the time
information, then we can avoid having to flush out writes, and we can avoid
revalidating the atime information.

OTOH, if the app sets AT_STRICT then we must force a revalidation of the
attribute metadata.

Signed-off-by: Trond Myklebust <Trond.Myklebust@netapp.com>
---
 fs/nfs/inode.c |   16 +++++++++++-----
 1 files changed, 11 insertions(+), 5 deletions(-)

diff --git a/fs/nfs/inode.c b/fs/nfs/inode.c
index 67db3a9..76bd229 100644
--- a/fs/nfs/inode.c
+++ b/fs/nfs/inode.c
@@ -506,9 +506,14 @@ int nfs_getattr(struct vfsmount *mnt, struct dentry *dentry, struct kstat *stat,
 		int flags)
 {
 	struct inode *inode = dentry->d_inode;
-	int need_atime = NFS_I(inode)->cache_validity & NFS_INO_INVALID_ATIME;
+	int force_reval = 0;
 	int err;
 
+	force_reval |= (flags & AT_STRICT) != 0;
+
+	if (!(flags & AT_NO_TIMES))
+		goto do_revalidate;
+
 	/*
 	 * Flush out writes to the server in order to update c/mtime.
 	 *
@@ -531,11 +536,12 @@ int nfs_getattr(struct vfsmount *mnt, struct dentry *dentry, struct kstat *stat,
 	 *  - NFS never sets MS_NOATIME or MS_NODIRATIME so there is
 	 *    no point in checking those.
 	 */
- 	if ((mnt->mnt_flags & MNT_NOATIME) ||
- 	    ((mnt->mnt_flags & MNT_NODIRATIME) && S_ISDIR(inode->i_mode)))
-		need_atime = 0;
+ 	if (!((mnt->mnt_flags & MNT_NOATIME) ||
+ 	    ((mnt->mnt_flags & MNT_NODIRATIME) && S_ISDIR(inode->i_mode))))
+		force_reval |= (NFS_I(inode)->cache_validity & NFS_INO_INVALID_ATIME) != 0;
 
-	if (need_atime)
+do_revalidate:
+	if (force_reval)
 		err = __nfs_revalidate_inode(NFS_SERVER(inode), inode);
 	else
 		err = nfs_revalidate_inode(NFS_SERVER(inode), inode);
-- 
Trond Myklebust
Linux NFS client maintainer

NetApp
Trond.Myklebust@netapp.com
www.netapp.com

^ permalink raw reply related	[flat|nested] 4+ messages in thread

* Re: [PATCH 3/2] [RFC] NFS: Support the AT_NO_TIMES and AT_STRICT fstatat flags
  2009-04-07 22:18 ` [PATCH 3/2] [RFC] NFS: Support the AT_NO_TIMES and AT_STRICT fstatat flags Trond Myklebust
@ 2009-04-07 22:47   ` Oleg Drokin
  2009-04-07 23:07     ` Trond Myklebust
  0 siblings, 1 reply; 4+ messages in thread
From: Oleg Drokin @ 2009-04-07 22:47 UTC (permalink / raw)
  To: Trond Myklebust; +Cc: Mark Fasheh, linux-fsdevel, Sage Weil, Andreas Dilger

Hello!

On Apr 7, 2009, at 6:18 PM, Trond Myklebust wrote:

> +	if (!(flags & AT_NO_TIMES))
> +		goto do_revalidate;

This is already a shortcoming of the less-fine grained control.
Suppose a normal ls -l command, it does not care about atimes,
only mtimes, but there is no way to specify it and NFS only
cares if atimes were requested or not.

Bye,
     Oleg

^ permalink raw reply	[flat|nested] 4+ messages in thread

* Re: [PATCH 3/2] [RFC] NFS: Support the AT_NO_TIMES and AT_STRICT fstatat flags
  2009-04-07 22:47   ` Oleg Drokin
@ 2009-04-07 23:07     ` Trond Myklebust
  0 siblings, 0 replies; 4+ messages in thread
From: Trond Myklebust @ 2009-04-07 23:07 UTC (permalink / raw)
  To: Oleg Drokin; +Cc: Mark Fasheh, linux-fsdevel, Sage Weil, Andreas Dilger

On Tue, 2009-04-07 at 18:47 -0400, Oleg Drokin wrote:
> Hello!
> 
> On Apr 7, 2009, at 6:18 PM, Trond Myklebust wrote:
> 
> > +	if (!(flags & AT_NO_TIMES))
> > +		goto do_revalidate;
> 
> This is already a shortcoming of the less-fine grained control.
> Suppose a normal ls -l command, it does not care about atimes,
> only mtimes, but there is no way to specify it and NFS only
> cares if atimes were requested or not.

I agree that an explicit AT_NO_ATIME might be useful.

Cheers
  Trond
-- 
Trond Myklebust
Linux NFS client maintainer

NetApp
Trond.Myklebust@netapp.com
www.netapp.com

^ permalink raw reply	[flat|nested] 4+ messages in thread

end of thread, other threads:[~2009-04-07 23:07 UTC | newest]

Thread overview: 4+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2009-04-07  8:01 [PATCH 2/2] [RFC] sys_fstatat: Update file systems for new ->getattr callback Mark Fasheh
2009-04-07 22:18 ` [PATCH 3/2] [RFC] NFS: Support the AT_NO_TIMES and AT_STRICT fstatat flags Trond Myklebust
2009-04-07 22:47   ` Oleg Drokin
2009-04-07 23:07     ` Trond Myklebust

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).