Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > linux.kernel > #1428857 > unrolled thread

[PATCH 0/8] remove d_time from dentry

Started byMiklos Szeredi <mszeredi@redhat.com>
First post2016-06-22 16:40 +0200
Last post2016-06-22 23:30 +0200
Articles 5 — 2 participants

Back to article view | Back to linux.kernel


Contents

  [PATCH 0/8] remove d_time from dentry Miklos Szeredi <mszeredi@redhat.com> - 2016-06-22 16:40 +0200
    [PATCH 8/8] vfs: remove ->d_time Miklos Szeredi <mszeredi@redhat.com> - 2016-06-22 16:40 +0200
    [PATCH 2/8] ceph: don't use ->d_time Miklos Szeredi <mszeredi@redhat.com> - 2016-06-22 16:40 +0200
      Re: [PATCH 2/8] ceph: don't use ->d_time "Yan, Zheng" <zyan@redhat.com> - 2016-06-23 08:30 +0200
    Re: [PATCH 0/8] remove d_time from dentry Miklos Szeredi <mszeredi@redhat.com> - 2016-06-22 23:30 +0200

#1428857 — [PATCH 0/8] remove d_time from dentry

FromMiklos Szeredi <mszeredi@redhat.com>
Date2016-06-22 16:40 +0200
Subject[PATCH 0/8] remove d_time from dentry
Message-ID<rMRtT-4E1-3@gated-at.bofh.it>
dentry->d_time is not used by the VFS anymore, it's essentially a fs-private
data.  And it just wastes space in the dentry for the vast majority of
filesystems.

This series moves the few uses to ->d_fsdata.  Introduce ->d_allocate() method
to make it easier to allocate fs specific structure together with the dentry.

---
Miklos Szeredi (8):
  vfs: new d_allocate method
  ceph: don't use ->d_time
  cifs: don't use ->d_time
  vfat: don't use ->d_time
  fuse: don't use ->d_time
  nfs: don't use ->d_time
  ncpfs: don't use ->d_time
  vfs: remove ->d_time

 Documentation/filesystems/Locking |  2 ++
 Documentation/filesystems/vfs.txt |  3 +++
 fs/ceph/dir.c                     |  6 +++---
 fs/ceph/inode.c                   |  4 ++--
 fs/ceph/mds_client.c              |  4 ++--
 fs/ceph/super.h                   |  2 +-
 fs/cifs/cifsfs.h                  | 10 ++++++++++
 fs/cifs/dir.c                     |  6 +++---
 fs/cifs/inode.c                   |  2 +-
 fs/dcache.c                       | 11 +++++++++++
 fs/fat/namei_vfat.c               | 19 +++++++++++++++----
 fs/fuse/dir.c                     | 36 ++++++++++++++++--------------------
 fs/ncpfs/dir.c                    | 21 ++++++++++++++++++---
 fs/ncpfs/ncplib_kernel.h          | 16 +++++++++++++---
 fs/nfs/dir.c                      | 18 ++++++++++++++----
 fs/nfs/getroot.c                  |  4 ++--
 fs/nfs/namespace.c                |  2 +-
 fs/nfs/unlink.c                   | 16 ++++++++--------
 include/linux/dcache.h            |  8 ++++----
 include/linux/nfs_fs.h            | 18 +++++++++++++++++-
 20 files changed, 146 insertions(+), 62 deletions(-)

-- 
2.5.5

[toc] | [next] | [standalone]


#1428860 — [PATCH 8/8] vfs: remove ->d_time

FromMiklos Szeredi <mszeredi@redhat.com>
Date2016-06-22 16:40 +0200
Subject[PATCH 8/8] vfs: remove ->d_time
Message-ID<rMRtU-4E1-49@gated-at.bofh.it>
In reply to#1428857
Remove dentry->d_time field, which is now unused.  This makes space for
longer inline names.

Signed-off-by: Miklos Szeredi <mszeredi@redhat.com>
---
 include/linux/dcache.h | 7 +++----
 1 file changed, 3 insertions(+), 4 deletions(-)

diff --git a/include/linux/dcache.h b/include/linux/dcache.h
index a2f01284b277..c2d43c5a8e29 100644
--- a/include/linux/dcache.h
+++ b/include/linux/dcache.h
@@ -69,12 +69,12 @@ extern struct dentry_stat_t dentry_stat;
  * large memory footprint increase).
  */
 #ifdef CONFIG_64BIT
-# define DNAME_INLINE_LEN 32 /* 192 bytes */
+# define DNAME_INLINE_LEN 40 /* 192 bytes */
 #else
 # ifdef CONFIG_SMP
-#  define DNAME_INLINE_LEN 36 /* 128 bytes */
-# else
 #  define DNAME_INLINE_LEN 40 /* 128 bytes */
+# else
+#  define DNAME_INLINE_LEN 44 /* 128 bytes */
 # endif
 #endif
 
@@ -95,7 +95,6 @@ struct dentry {
 	struct lockref d_lockref;	/* per-dentry lock and refcount */
 	const struct dentry_operations *d_op;
 	struct super_block *d_sb;	/* The root of the dentry tree */
-	unsigned long d_time;		/* used by d_revalidate */
 	void *d_fsdata;			/* fs-specific data */
 
 	union {
-- 
2.5.5

[toc] | [prev] | [next] | [standalone]


#1428863 — [PATCH 2/8] ceph: don't use ->d_time

FromMiklos Szeredi <mszeredi@redhat.com>
Date2016-06-22 16:40 +0200
Subject[PATCH 2/8] ceph: don't use ->d_time
Message-ID<rMRtU-4E1-57@gated-at.bofh.it>
In reply to#1428857
Pretty simple: just use ceph_dentry_info.time instead (which was already
there, unused).

Signed-off-by: Miklos Szeredi <mszeredi@redhat.com>
Cc: Yan, Zheng <zyan@redhat.com>
---
 fs/ceph/dir.c        | 6 +++---
 fs/ceph/inode.c      | 4 ++--
 fs/ceph/mds_client.c | 4 ++--
 fs/ceph/super.h      | 2 +-
 4 files changed, 8 insertions(+), 8 deletions(-)

diff --git a/fs/ceph/dir.c b/fs/ceph/dir.c
index 6e0fedf6713b..8ff7bcc7fc88 100644
--- a/fs/ceph/dir.c
+++ b/fs/ceph/dir.c
@@ -59,7 +59,7 @@ int ceph_init_dentry(struct dentry *dentry)
 
 	di->dentry = dentry;
 	di->lease_session = NULL;
-	dentry->d_time = jiffies;
+	di->time = jiffies;
 	/* avoid reordering d_fsdata setup so that the check above is safe */
 	smp_mb();
 	dentry->d_fsdata = di;
@@ -1124,7 +1124,7 @@ static int ceph_rename(struct inode *old_dir, struct dentry *old_dentry,
 void ceph_invalidate_dentry_lease(struct dentry *dentry)
 {
 	spin_lock(&dentry->d_lock);
-	dentry->d_time = jiffies;
+	ceph_dentry(dentry)->time = jiffies;
 	ceph_dentry(dentry)->lease_shared_gen = 0;
 	spin_unlock(&dentry->d_lock);
 }
@@ -1154,7 +1154,7 @@ static int dentry_lease_is_valid(struct dentry *dentry)
 		spin_unlock(&s->s_gen_ttl_lock);
 
 		if (di->lease_gen == gen &&
-		    time_before(jiffies, dentry->d_time) &&
+		    time_before(jiffies, di->time) &&
 		    time_before(jiffies, ttl)) {
 			valid = 1;
 			if (di->lease_renew_after &&
diff --git a/fs/ceph/inode.c b/fs/ceph/inode.c
index f059b5997072..7a33178ef850 100644
--- a/fs/ceph/inode.c
+++ b/fs/ceph/inode.c
@@ -1018,7 +1018,7 @@ static void update_dentry_lease(struct dentry *dentry,
 		goto out_unlock;
 
 	if (di->lease_gen == session->s_cap_gen &&
-	    time_before(ttl, dentry->d_time))
+	    time_before(ttl, di->time))
 		goto out_unlock;  /* we already have a newer lease. */
 
 	if (di->lease_session && di->lease_session != session)
@@ -1032,7 +1032,7 @@ static void update_dentry_lease(struct dentry *dentry,
 	di->lease_seq = le32_to_cpu(lease->seq);
 	di->lease_renew_after = half_ttl;
 	di->lease_renew_from = 0;
-	dentry->d_time = ttl;
+	di->time = ttl;
 out_unlock:
 	spin_unlock(&dentry->d_lock);
 	return;
diff --git a/fs/ceph/mds_client.c b/fs/ceph/mds_client.c
index 2103b823bec0..db9c654d42cd 100644
--- a/fs/ceph/mds_client.c
+++ b/fs/ceph/mds_client.c
@@ -3231,7 +3231,7 @@ static void handle_lease(struct ceph_mds_client *mdsc,
 				msecs_to_jiffies(le32_to_cpu(h->duration_ms));
 
 			di->lease_seq = seq;
-			dentry->d_time = di->lease_renew_from + duration;
+			di->time = di->lease_renew_from + duration;
 			di->lease_renew_after = di->lease_renew_from +
 				(duration >> 1);
 			di->lease_renew_from = 0;
@@ -3316,7 +3316,7 @@ void ceph_mdsc_lease_release(struct ceph_mds_client *mdsc, struct inode *inode,
 	if (!di || !di->lease_session ||
 	    di->lease_session->s_mds < 0 ||
 	    di->lease_gen != di->lease_session->s_cap_gen ||
-	    !time_before(jiffies, dentry->d_time)) {
+	    !time_before(jiffies, di->time)) {
 		dout("lease_release inode %p dentry %p -- "
 		     "no lease\n",
 		     inode, dentry);
diff --git a/fs/ceph/super.h b/fs/ceph/super.h
index 0168b49fb6ad..10776db93143 100644
--- a/fs/ceph/super.h
+++ b/fs/ceph/super.h
@@ -246,7 +246,7 @@ struct ceph_dentry_info {
 	unsigned long lease_renew_after, lease_renew_from;
 	struct list_head lru;
 	struct dentry *dentry;
-	u64 time;
+	unsigned long time;
 	u64 offset;
 };
 
-- 
2.5.5

[toc] | [prev] | [next] | [standalone]


#1429500 — Re: [PATCH 2/8] ceph: don't use ->d_time

From"Yan, Zheng" <zyan@redhat.com>
Date2016-06-23 08:30 +0200
SubjectRe: [PATCH 2/8] ceph: don't use ->d_time
Message-ID<rN6jf-63C-5@gated-at.bofh.it>
In reply to#1428863
> On Jun 22, 2016, at 22:35, Miklos Szeredi <mszeredi@redhat.com> wrote:
> 
> Pretty simple: just use ceph_dentry_info.time instead (which was already
> there, unused).
> 
> Signed-off-by: Miklos Szeredi <mszeredi@redhat.com>
> Cc: Yan, Zheng <zyan@redhat.com>
> ---
> fs/ceph/dir.c        | 6 +++---
> fs/ceph/inode.c      | 4 ++--
> fs/ceph/mds_client.c | 4 ++--
> fs/ceph/super.h      | 2 +-
> 4 files changed, 8 insertions(+), 8 deletions(-)

Reviewed-by: Yan, Zheng <zyan@redhat.com>

> 
> diff --git a/fs/ceph/dir.c b/fs/ceph/dir.c
> index 6e0fedf6713b..8ff7bcc7fc88 100644
> --- a/fs/ceph/dir.c
> +++ b/fs/ceph/dir.c
> @@ -59,7 +59,7 @@ int ceph_init_dentry(struct dentry *dentry)
> 
> 	di->dentry = dentry;
> 	di->lease_session = NULL;
> -	dentry->d_time = jiffies;
> +	di->time = jiffies;
> 	/* avoid reordering d_fsdata setup so that the check above is safe */
> 	smp_mb();
> 	dentry->d_fsdata = di;
> @@ -1124,7 +1124,7 @@ static int ceph_rename(struct inode *old_dir, struct dentry *old_dentry,
> void ceph_invalidate_dentry_lease(struct dentry *dentry)
> {
> 	spin_lock(&dentry->d_lock);
> -	dentry->d_time = jiffies;
> +	ceph_dentry(dentry)->time = jiffies;
> 	ceph_dentry(dentry)->lease_shared_gen = 0;
> 	spin_unlock(&dentry->d_lock);
> }
> @@ -1154,7 +1154,7 @@ static int dentry_lease_is_valid(struct dentry *dentry)
> 		spin_unlock(&s->s_gen_ttl_lock);
> 
> 		if (di->lease_gen == gen &&
> -		    time_before(jiffies, dentry->d_time) &&
> +		    time_before(jiffies, di->time) &&
> 		    time_before(jiffies, ttl)) {
> 			valid = 1;
> 			if (di->lease_renew_after &&
> diff --git a/fs/ceph/inode.c b/fs/ceph/inode.c
> index f059b5997072..7a33178ef850 100644
> --- a/fs/ceph/inode.c
> +++ b/fs/ceph/inode.c
> @@ -1018,7 +1018,7 @@ static void update_dentry_lease(struct dentry *dentry,
> 		goto out_unlock;
> 
> 	if (di->lease_gen == session->s_cap_gen &&
> -	    time_before(ttl, dentry->d_time))
> +	    time_before(ttl, di->time))
> 		goto out_unlock;  /* we already have a newer lease. */
> 
> 	if (di->lease_session && di->lease_session != session)
> @@ -1032,7 +1032,7 @@ static void update_dentry_lease(struct dentry *dentry,
> 	di->lease_seq = le32_to_cpu(lease->seq);
> 	di->lease_renew_after = half_ttl;
> 	di->lease_renew_from = 0;
> -	dentry->d_time = ttl;
> +	di->time = ttl;
> out_unlock:
> 	spin_unlock(&dentry->d_lock);
> 	return;
> diff --git a/fs/ceph/mds_client.c b/fs/ceph/mds_client.c
> index 2103b823bec0..db9c654d42cd 100644
> --- a/fs/ceph/mds_client.c
> +++ b/fs/ceph/mds_client.c
> @@ -3231,7 +3231,7 @@ static void handle_lease(struct ceph_mds_client *mdsc,
> 				msecs_to_jiffies(le32_to_cpu(h->duration_ms));
> 
> 			di->lease_seq = seq;
> -			dentry->d_time = di->lease_renew_from + duration;
> +			di->time = di->lease_renew_from + duration;
> 			di->lease_renew_after = di->lease_renew_from +
> 				(duration >> 1);
> 			di->lease_renew_from = 0;
> @@ -3316,7 +3316,7 @@ void ceph_mdsc_lease_release(struct ceph_mds_client *mdsc, struct inode *inode,
> 	if (!di || !di->lease_session ||
> 	    di->lease_session->s_mds < 0 ||
> 	    di->lease_gen != di->lease_session->s_cap_gen ||
> -	    !time_before(jiffies, dentry->d_time)) {
> +	    !time_before(jiffies, di->time)) {
> 		dout("lease_release inode %p dentry %p -- "
> 		     "no lease\n",
> 		     inode, dentry);
> diff --git a/fs/ceph/super.h b/fs/ceph/super.h
> index 0168b49fb6ad..10776db93143 100644
> --- a/fs/ceph/super.h
> +++ b/fs/ceph/super.h
> @@ -246,7 +246,7 @@ struct ceph_dentry_info {
> 	unsigned long lease_renew_after, lease_renew_from;
> 	struct list_head lru;
> 	struct dentry *dentry;
> -	u64 time;
> +	unsigned long time;
> 	u64 offset;
> };
> 
> -- 
> 2.5.5
> 

[toc] | [prev] | [next] | [standalone]


#1429120

FromMiklos Szeredi <mszeredi@redhat.com>
Date2016-06-22 23:30 +0200
Message-ID<rMXSG-lY-17@gated-at.bofh.it>
In reply to#1428857
Pushed an updated one to

  git://git.kernel.org/pub/scm/linux/kernel/git/mszeredi/vfs.git d_time

Changes:

 - rename d_allocate to d_init
 - use kfree_rcu() for fuse and nfs dentry->d_fsdata

Thanks,
Miklos

---
Miklos Szeredi (8):
      vfs: new d_init method
      ceph: don't use ->d_time
      cifs: don't use ->d_time
      vfat: don't use ->d_time
      fuse: don't use ->d_time
      nfs: don't use ->d_time
      ncpfs: don't use ->d_time
      vfs: remove ->d_time

---
 Documentation/filesystems/Locking |  2 ++
 Documentation/filesystems/vfs.txt |  3 +++
 fs/ceph/dir.c                     |  6 +++---
 fs/ceph/inode.c                   |  4 ++--
 fs/ceph/mds_client.c              |  4 ++--
 fs/ceph/super.h                   |  2 +-
 fs/cifs/cifsfs.h                  | 10 +++++++++
 fs/cifs/dir.c                     |  6 +++---
 fs/cifs/inode.c                   |  2 +-
 fs/dcache.c                       | 11 ++++++++++
 fs/fat/namei_vfat.c               | 19 +++++++++++++----
 fs/fuse/dir.c                     | 43 +++++++++++++++++++++------------------
 fs/ncpfs/dir.c                    | 21 ++++++++++++++++---
 fs/ncpfs/ncplib_kernel.h          | 16 ++++++++++++---
 fs/nfs/dir.c                      | 18 ++++++++++++----
 fs/nfs/getroot.c                  |  4 ++--
 fs/nfs/namespace.c                |  2 +-
 fs/nfs/unlink.c                   | 16 +++++++--------
 include/linux/dcache.h            |  8 ++++----
 include/linux/nfs_fs.h            | 19 ++++++++++++++++-
 20 files changed, 154 insertions(+), 62 deletions(-)

[toc] | [prev] | [standalone]


Back to top | Article view | linux.kernel


csiph-web