Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]
Groups > linux.kernel > #1428857 > unrolled thread
| Started by | Miklos Szeredi <mszeredi@redhat.com> |
|---|---|
| First post | 2016-06-22 16:40 +0200 |
| Last post | 2016-06-22 23:30 +0200 |
| Articles | 5 — 2 participants |
Back to article view | Back to linux.kernel
[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
| From | Miklos Szeredi <mszeredi@redhat.com> |
|---|---|
| Date | 2016-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]
| From | Miklos Szeredi <mszeredi@redhat.com> |
|---|---|
| Date | 2016-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]
| From | Miklos Szeredi <mszeredi@redhat.com> |
|---|---|
| Date | 2016-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]
| From | "Yan, Zheng" <zyan@redhat.com> |
|---|---|
| Date | 2016-06-23 08:30 +0200 |
| Subject | Re: [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]
| From | Miklos Szeredi <mszeredi@redhat.com> |
|---|---|
| Date | 2016-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