All of lore.kernel.org
 help / color / mirror / Atom feed
From: Eric Dumazet <dada1@cosmosbay.com>
To: Ingo Molnar <mingo@elte.hu>, Christoph Hellwig <hch@infradead.org>
Cc: David Miller <davem@davemloft.net>,
	"Rafael J. Wysocki" <rjw@sisk.pl>,
	linux-kernel@vger.kernel.org,
	"kernel-testers@vger.kernel.org >> Kernel Testers List" 
	<kernel-testers@vger.kernel.org>, Mike Galbraith <efault@gmx.de>,
	Peter Zijlstra <a.p.zijlstra@chello.nl>,
	Linux Netdev List <netdev@vger.kernel.org>,
	Christoph Lameter <cl@linux-foundation.org>,
	linux-fsdevel@vger.kernel.org, Al Viro <viro@ZenIV.linux.org.uk>
Subject: [PATCH v2 4/5] fs: Introduce SINGLE dentries for pipes, socket, anon fd
Date: Sat, 29 Nov 2008 09:44:23 +0100	[thread overview]
Message-ID: <493100E7.3030907@cosmosbay.com> (raw)
In-Reply-To: <492DDB6A.8090806@cosmosbay.com>

[-- Attachment #1: Type: text/plain, Size: 1602 bytes --]


Sockets, pipes and anonymous fds have interesting properties.

Like other files, they use a dentry and an inode.

But dentries for these kind of files are not hashed into dcache,
since there is no way someone can lookup such a file in the vfs tree.
(/proc/{pid}/fd/{number} uses a different mechanism)

Still, allocating and freeing such dentries are expensive processes,
because we currently take dcache_lock inside d_alloc(), d_instantiate(),
and dput(). This lock is very contended on SMP machines.

This patch defines a new DCACHE_SINGLE flag, to mark a dentry as
a single one (for sockets, pipes, anonymous fd), and a new
d_alloc_single(const struct qstr *name, struct inode *inode)
method, called by the three subsystems.

Internally, dput() can take a fast path to dput_single() for
SINGLE dentries. No more atomic_dec_and_lock()
for such dentries.


Differences betwen an SINGLE dentry and a normal one are :

1) SINGLE dentry has the DCACHE_SINGLE flag
2) SINGLE dentry's parent is itself (DCACHE_DISCONNECTED)
This to avoid taking a reference on sb 'root' dentry, shared
by too many dentries.
3) They are not hashed into global hash table (DCACHE_UNHASHED)
4) Their d_alias list is empty

(socket8 bench result : from 25s to 19.9s)

Signed-off-by: Eric Dumazet <dada1@cosmosbay.com>
---
 fs/anon_inodes.c       |   16 ------------
 fs/dcache.c            |   51 +++++++++++++++++++++++++++++++++++++++
 fs/pipe.c              |   23 +----------------
 include/linux/dcache.h |    9 ++++++
 net/socket.c           |   24 +-----------------
 5 files changed, 65 insertions(+), 58 deletions(-)

[-- Attachment #2: dcache_single.patch --]
[-- Type: text/plain, Size: 7886 bytes --]

diff --git a/fs/anon_inodes.c b/fs/anon_inodes.c
index 3662dd4..8bf83cb 100644
--- a/fs/anon_inodes.c
+++ b/fs/anon_inodes.c
@@ -33,23 +33,12 @@ static int anon_inodefs_get_sb(struct file_system_type *fs_type, int flags,
 			     mnt);
 }
 
-static int anon_inodefs_delete_dentry(struct dentry *dentry)
-{
-	/*
-	 * We faked vfs to believe the dentry was hashed when we created it.
-	 * Now we restore the flag so that dput() will work correctly.
-	 */
-	dentry->d_flags |= DCACHE_UNHASHED;
-	return 1;
-}
-
 static struct file_system_type anon_inode_fs_type = {
 	.name		= "anon_inodefs",
 	.get_sb		= anon_inodefs_get_sb,
 	.kill_sb	= kill_anon_super,
 };
 static struct dentry_operations anon_inodefs_dentry_operations = {
-	.d_delete	= anon_inodefs_delete_dentry,
 };
 
 /**
@@ -92,7 +81,7 @@ int anon_inode_getfd(const char *name, const struct file_operations *fops,
 	this.name = name;
 	this.len = strlen(name);
 	this.hash = 0;
-	dentry = d_alloc(anon_inode_mnt->mnt_sb->s_root, &this);
+	dentry = d_alloc_single(&this, anon_inode_inode);
 	if (!dentry)
 		goto err_put_unused_fd;
 
@@ -104,9 +93,6 @@ int anon_inode_getfd(const char *name, const struct file_operations *fops,
 	atomic_inc(&anon_inode_inode->i_count);
 
 	dentry->d_op = &anon_inodefs_dentry_operations;
-	/* Do not publish this dentry inside the global dentry hash table */
-	dentry->d_flags &= ~DCACHE_UNHASHED;
-	d_instantiate(dentry, anon_inode_inode);
 
 	error = -ENFILE;
 	file = alloc_file(anon_inode_mnt, dentry,
diff --git a/fs/dcache.c b/fs/dcache.c
index 46d5d1e..35d4a25 100644
--- a/fs/dcache.c
+++ b/fs/dcache.c
@@ -219,6 +219,23 @@ static struct dentry *d_kill(struct dentry *dentry)
  */
 
 /*
+ * special version of dput() for pipes/sockets/anon.
+ * These dentries are not present in hash table, we can avoid
+ * taking/dirtying dcache_lock
+ */
+static void dput_single(struct dentry *dentry)
+{
+	struct inode *inode;
+
+	if (!atomic_dec_and_test(&dentry->d_count))
+		return;
+	inode = dentry->d_inode;
+	if (inode)
+		iput(inode);
+	d_free(dentry);
+}
+
+/*
  * dput - release a dentry
  * @dentry: dentry to release 
  *
@@ -234,6 +251,11 @@ void dput(struct dentry *dentry)
 {
 	if (!dentry)
 		return;
+	/*
+	 * single dentries (sockets/pipes/anon) fast path
+	 */
+	if (dentry->d_flags & DCACHE_SINGLE)
+		return dput_single(dentry);
 
 repeat:
 	if (atomic_read(&dentry->d_count) == 1)
@@ -1119,6 +1141,35 @@ struct dentry * d_alloc_root(struct inode * root_inode)
 	return res;
 }
 
+/**
+ * d_alloc_single - allocate SINGLE dentry
+ * @name: dentry name, given in a qstr structure
+ * @inode: inode to allocate the dentry for
+ *
+ * Allocate an SINGLE dentry for the inode given. The inode is
+ * instantiated and returned. %NULL is returned if there is insufficient
+ * memory.
+ * - SINGLE dentries have themselves as a parent.
+ * - SINGLE dentries are not hashed into global hash table
+ * - their d_alias list is empty
+ */
+struct dentry *d_alloc_single(const struct qstr *name, struct inode *inode)
+{
+	struct dentry *entry;
+
+	entry = d_alloc(NULL, name);
+	if (entry) {
+		entry->d_sb = inode->i_sb;
+		entry->d_parent = entry;
+		entry->d_flags |= DCACHE_SINGLE | DCACHE_DISCONNECTED;
+		entry->d_inode = inode;
+		fsnotify_d_instantiate(entry, inode);
+		security_d_instantiate(entry, inode);
+	}
+	return entry;
+}
+
+
 static inline struct hlist_head *d_hash(struct dentry *parent,
 					unsigned long hash)
 {
diff --git a/fs/pipe.c b/fs/pipe.c
index 7aea8b8..4de6dd5 100644
--- a/fs/pipe.c
+++ b/fs/pipe.c
@@ -849,17 +849,6 @@ void free_pipe_info(struct inode *inode)
 }
 
 static struct vfsmount *pipe_mnt __read_mostly;
-static int pipefs_delete_dentry(struct dentry *dentry)
-{
-	/*
-	 * At creation time, we pretended this dentry was hashed
-	 * (by clearing DCACHE_UNHASHED bit in d_flags)
-	 * At delete time, we restore the truth : not hashed.
-	 * (so that dput() can proceed correctly)
-	 */
-	dentry->d_flags |= DCACHE_UNHASHED;
-	return 0;
-}
 
 /*
  * pipefs_dname() is called from d_path().
@@ -871,7 +860,6 @@ static char *pipefs_dname(struct dentry *dentry, char *buffer, int buflen)
 }
 
 static struct dentry_operations pipefs_dentry_operations = {
-	.d_delete	= pipefs_delete_dentry,
 	.d_dname	= pipefs_dname,
 };
 
@@ -918,7 +906,7 @@ struct file *create_write_pipe(int flags)
 	struct inode *inode;
 	struct file *f;
 	struct dentry *dentry;
-	struct qstr name = { .name = "" };
+	static const struct qstr name = { .name = "" };
 
 	err = -ENFILE;
 	inode = get_pipe_inode();
@@ -926,18 +914,11 @@ struct file *create_write_pipe(int flags)
 		goto err;
 
 	err = -ENOMEM;
-	dentry = d_alloc(pipe_mnt->mnt_sb->s_root, &name);
+	dentry = d_alloc_single(&name, inode);
 	if (!dentry)
 		goto err_inode;
 
 	dentry->d_op = &pipefs_dentry_operations;
-	/*
-	 * We dont want to publish this dentry into global dentry hash table.
-	 * We pretend dentry is already hashed, by unsetting DCACHE_UNHASHED
-	 * This permits a working /proc/$pid/fd/XXX on pipes
-	 */
-	dentry->d_flags &= ~DCACHE_UNHASHED;
-	d_instantiate(dentry, inode);
 
 	err = -ENFILE;
 	f = alloc_file(pipe_mnt, dentry, FMODE_WRITE, &write_pipefifo_fops);
diff --git a/include/linux/dcache.h b/include/linux/dcache.h
index a37359d..ca8d269 100644
--- a/include/linux/dcache.h
+++ b/include/linux/dcache.h
@@ -176,6 +176,14 @@ d_iput:		no		no		no       yes
 #define DCACHE_UNHASHED		0x0010	
 
 #define DCACHE_INOTIFY_PARENT_WATCHED	0x0020 /* Parent inode is watched */
+#define DCACHE_SINGLE		0x0040
+	/*
+	 * socket, pipe or anonymous fd dentry
+	 * - SINGLE dentries have themselves as a parent.
+	 * - SINGLE dentries are not hashed into global hash table
+	 * - Their d_alias list is empty
+	 * - They dont need dcache_lock synchronization
+	 */
 
 extern spinlock_t dcache_lock;
 extern seqlock_t rename_lock;
@@ -235,6 +243,7 @@ extern void shrink_dcache_sb(struct super_block *);
 extern void shrink_dcache_parent(struct dentry *);
 extern void shrink_dcache_for_umount(struct super_block *);
 extern int d_invalidate(struct dentry *);
+extern struct dentry *d_alloc_single(const struct qstr *, struct inode *);
 
 /* only used at mount-time */
 extern struct dentry * d_alloc_root(struct inode *);
diff --git a/net/socket.c b/net/socket.c
index e9d65ea..231cd66 100644
--- a/net/socket.c
+++ b/net/socket.c
@@ -307,18 +307,6 @@ static struct file_system_type sock_fs_type = {
 	.kill_sb =	kill_anon_super,
 };
 
-static int sockfs_delete_dentry(struct dentry *dentry)
-{
-	/*
-	 * At creation time, we pretended this dentry was hashed
-	 * (by clearing DCACHE_UNHASHED bit in d_flags)
-	 * At delete time, we restore the truth : not hashed.
-	 * (so that dput() can proceed correctly)
-	 */
-	dentry->d_flags |= DCACHE_UNHASHED;
-	return 0;
-}
-
 /*
  * sockfs_dname() is called from d_path().
  */
@@ -329,7 +317,6 @@ static char *sockfs_dname(struct dentry *dentry, char *buffer, int buflen)
 }
 
 static struct dentry_operations sockfs_dentry_operations = {
-	.d_delete = sockfs_delete_dentry,
 	.d_dname  = sockfs_dname,
 };
 
@@ -371,20 +358,13 @@ static int sock_alloc_fd(struct file **filep, int flags)
 static int sock_attach_fd(struct socket *sock, struct file *file, int flags)
 {
 	struct dentry *dentry;
-	struct qstr name = { .name = "" };
+	static const struct qstr name = { .name = "" };
 
-	dentry = d_alloc(sock_mnt->mnt_sb->s_root, &name);
+	dentry = d_alloc_single(&name, SOCK_INODE(sock));
 	if (unlikely(!dentry))
 		return -ENOMEM;
 
 	dentry->d_op = &sockfs_dentry_operations;
-	/*
-	 * We dont want to push this dentry into global dentry hash table.
-	 * We pretend dentry is already hashed, by unsetting DCACHE_UNHASHED
-	 * This permits a working /proc/$pid/fd/XXX on sockets
-	 */
-	dentry->d_flags &= ~DCACHE_UNHASHED;
-	d_instantiate(dentry, SOCK_INODE(sock));
 
 	sock->file = file;
 	init_file(file, sock_mnt, dentry, FMODE_READ | FMODE_WRITE,

WARNING: multiple messages have this Message-ID (diff)
From: Eric Dumazet <dada1-fPLkHRcR87vqlBn2x/YWAg@public.gmane.org>
To: Ingo Molnar <mingo-X9Un+BFzKDI@public.gmane.org>,
	Christoph Hellwig <hch-wEGCiKHe2LqWVfeAwA7xHQ@public.gmane.org>
Cc: David Miller <davem-fT/PcQaiUtIeIZ0/mPfg9Q@public.gmane.org>,
	"Rafael J. Wysocki" <rjw-KKrjLPT3xs0@public.gmane.org>,
	linux-kernel-u79uwXL29TY76Z2rM5mHXA@public.gmane.org,
	"kernel-testers-u79uwXL29TY76Z2rM5mHXA@public.gmane.org >>
	Kernel Testers List"
	<kernel-testers-u79uwXL29TY76Z2rM5mHXA@public.gmane.org>,
	Mike Galbraith <efault-Mmb7MZpHnFY@public.gmane.org>,
	Peter Zijlstra
	<a.p.zijlstra-/NLkJaSkS4VmR6Xm/wNWPw@public.gmane.org>,
	Linux Netdev List
	<netdev-u79uwXL29TY76Z2rM5mHXA@public.gmane.org>,
	Christoph Lameter
	<cl-de/tnXTf+JLsfHDXvbKv3WD2FQJk+8+b@public.gmane.org>,
	linux-fsdevel-u79uwXL29TY76Z2rM5mHXA@public.gmane.org,
	Al Viro <viro-3bDd1+5oDREiFSDQTTA3OLVCufUGDwFn@public.gmane.org>
Subject: [PATCH v2 4/5] fs: Introduce SINGLE dentries for pipes, socket, anon fd
Date: Sat, 29 Nov 2008 09:44:23 +0100	[thread overview]
Message-ID: <493100E7.3030907@cosmosbay.com> (raw)
In-Reply-To: <492DDB6A.8090806-fPLkHRcR87vqlBn2x/YWAg@public.gmane.org>

[-- Attachment #1: Type: text/plain, Size: 1628 bytes --]


Sockets, pipes and anonymous fds have interesting properties.

Like other files, they use a dentry and an inode.

But dentries for these kind of files are not hashed into dcache,
since there is no way someone can lookup such a file in the vfs tree.
(/proc/{pid}/fd/{number} uses a different mechanism)

Still, allocating and freeing such dentries are expensive processes,
because we currently take dcache_lock inside d_alloc(), d_instantiate(),
and dput(). This lock is very contended on SMP machines.

This patch defines a new DCACHE_SINGLE flag, to mark a dentry as
a single one (for sockets, pipes, anonymous fd), and a new
d_alloc_single(const struct qstr *name, struct inode *inode)
method, called by the three subsystems.

Internally, dput() can take a fast path to dput_single() for
SINGLE dentries. No more atomic_dec_and_lock()
for such dentries.


Differences betwen an SINGLE dentry and a normal one are :

1) SINGLE dentry has the DCACHE_SINGLE flag
2) SINGLE dentry's parent is itself (DCACHE_DISCONNECTED)
This to avoid taking a reference on sb 'root' dentry, shared
by too many dentries.
3) They are not hashed into global hash table (DCACHE_UNHASHED)
4) Their d_alias list is empty

(socket8 bench result : from 25s to 19.9s)

Signed-off-by: Eric Dumazet <dada1-fPLkHRcR87vqlBn2x/YWAg@public.gmane.org>
---
 fs/anon_inodes.c       |   16 ------------
 fs/dcache.c            |   51 +++++++++++++++++++++++++++++++++++++++
 fs/pipe.c              |   23 +----------------
 include/linux/dcache.h |    9 ++++++
 net/socket.c           |   24 +-----------------
 5 files changed, 65 insertions(+), 58 deletions(-)

[-- Attachment #2: dcache_single.patch --]
[-- Type: text/plain, Size: 7886 bytes --]

diff --git a/fs/anon_inodes.c b/fs/anon_inodes.c
index 3662dd4..8bf83cb 100644
--- a/fs/anon_inodes.c
+++ b/fs/anon_inodes.c
@@ -33,23 +33,12 @@ static int anon_inodefs_get_sb(struct file_system_type *fs_type, int flags,
 			     mnt);
 }
 
-static int anon_inodefs_delete_dentry(struct dentry *dentry)
-{
-	/*
-	 * We faked vfs to believe the dentry was hashed when we created it.
-	 * Now we restore the flag so that dput() will work correctly.
-	 */
-	dentry->d_flags |= DCACHE_UNHASHED;
-	return 1;
-}
-
 static struct file_system_type anon_inode_fs_type = {
 	.name		= "anon_inodefs",
 	.get_sb		= anon_inodefs_get_sb,
 	.kill_sb	= kill_anon_super,
 };
 static struct dentry_operations anon_inodefs_dentry_operations = {
-	.d_delete	= anon_inodefs_delete_dentry,
 };
 
 /**
@@ -92,7 +81,7 @@ int anon_inode_getfd(const char *name, const struct file_operations *fops,
 	this.name = name;
 	this.len = strlen(name);
 	this.hash = 0;
-	dentry = d_alloc(anon_inode_mnt->mnt_sb->s_root, &this);
+	dentry = d_alloc_single(&this, anon_inode_inode);
 	if (!dentry)
 		goto err_put_unused_fd;
 
@@ -104,9 +93,6 @@ int anon_inode_getfd(const char *name, const struct file_operations *fops,
 	atomic_inc(&anon_inode_inode->i_count);
 
 	dentry->d_op = &anon_inodefs_dentry_operations;
-	/* Do not publish this dentry inside the global dentry hash table */
-	dentry->d_flags &= ~DCACHE_UNHASHED;
-	d_instantiate(dentry, anon_inode_inode);
 
 	error = -ENFILE;
 	file = alloc_file(anon_inode_mnt, dentry,
diff --git a/fs/dcache.c b/fs/dcache.c
index 46d5d1e..35d4a25 100644
--- a/fs/dcache.c
+++ b/fs/dcache.c
@@ -219,6 +219,23 @@ static struct dentry *d_kill(struct dentry *dentry)
  */
 
 /*
+ * special version of dput() for pipes/sockets/anon.
+ * These dentries are not present in hash table, we can avoid
+ * taking/dirtying dcache_lock
+ */
+static void dput_single(struct dentry *dentry)
+{
+	struct inode *inode;
+
+	if (!atomic_dec_and_test(&dentry->d_count))
+		return;
+	inode = dentry->d_inode;
+	if (inode)
+		iput(inode);
+	d_free(dentry);
+}
+
+/*
  * dput - release a dentry
  * @dentry: dentry to release 
  *
@@ -234,6 +251,11 @@ void dput(struct dentry *dentry)
 {
 	if (!dentry)
 		return;
+	/*
+	 * single dentries (sockets/pipes/anon) fast path
+	 */
+	if (dentry->d_flags & DCACHE_SINGLE)
+		return dput_single(dentry);
 
 repeat:
 	if (atomic_read(&dentry->d_count) == 1)
@@ -1119,6 +1141,35 @@ struct dentry * d_alloc_root(struct inode * root_inode)
 	return res;
 }
 
+/**
+ * d_alloc_single - allocate SINGLE dentry
+ * @name: dentry name, given in a qstr structure
+ * @inode: inode to allocate the dentry for
+ *
+ * Allocate an SINGLE dentry for the inode given. The inode is
+ * instantiated and returned. %NULL is returned if there is insufficient
+ * memory.
+ * - SINGLE dentries have themselves as a parent.
+ * - SINGLE dentries are not hashed into global hash table
+ * - their d_alias list is empty
+ */
+struct dentry *d_alloc_single(const struct qstr *name, struct inode *inode)
+{
+	struct dentry *entry;
+
+	entry = d_alloc(NULL, name);
+	if (entry) {
+		entry->d_sb = inode->i_sb;
+		entry->d_parent = entry;
+		entry->d_flags |= DCACHE_SINGLE | DCACHE_DISCONNECTED;
+		entry->d_inode = inode;
+		fsnotify_d_instantiate(entry, inode);
+		security_d_instantiate(entry, inode);
+	}
+	return entry;
+}
+
+
 static inline struct hlist_head *d_hash(struct dentry *parent,
 					unsigned long hash)
 {
diff --git a/fs/pipe.c b/fs/pipe.c
index 7aea8b8..4de6dd5 100644
--- a/fs/pipe.c
+++ b/fs/pipe.c
@@ -849,17 +849,6 @@ void free_pipe_info(struct inode *inode)
 }
 
 static struct vfsmount *pipe_mnt __read_mostly;
-static int pipefs_delete_dentry(struct dentry *dentry)
-{
-	/*
-	 * At creation time, we pretended this dentry was hashed
-	 * (by clearing DCACHE_UNHASHED bit in d_flags)
-	 * At delete time, we restore the truth : not hashed.
-	 * (so that dput() can proceed correctly)
-	 */
-	dentry->d_flags |= DCACHE_UNHASHED;
-	return 0;
-}
 
 /*
  * pipefs_dname() is called from d_path().
@@ -871,7 +860,6 @@ static char *pipefs_dname(struct dentry *dentry, char *buffer, int buflen)
 }
 
 static struct dentry_operations pipefs_dentry_operations = {
-	.d_delete	= pipefs_delete_dentry,
 	.d_dname	= pipefs_dname,
 };
 
@@ -918,7 +906,7 @@ struct file *create_write_pipe(int flags)
 	struct inode *inode;
 	struct file *f;
 	struct dentry *dentry;
-	struct qstr name = { .name = "" };
+	static const struct qstr name = { .name = "" };
 
 	err = -ENFILE;
 	inode = get_pipe_inode();
@@ -926,18 +914,11 @@ struct file *create_write_pipe(int flags)
 		goto err;
 
 	err = -ENOMEM;
-	dentry = d_alloc(pipe_mnt->mnt_sb->s_root, &name);
+	dentry = d_alloc_single(&name, inode);
 	if (!dentry)
 		goto err_inode;
 
 	dentry->d_op = &pipefs_dentry_operations;
-	/*
-	 * We dont want to publish this dentry into global dentry hash table.
-	 * We pretend dentry is already hashed, by unsetting DCACHE_UNHASHED
-	 * This permits a working /proc/$pid/fd/XXX on pipes
-	 */
-	dentry->d_flags &= ~DCACHE_UNHASHED;
-	d_instantiate(dentry, inode);
 
 	err = -ENFILE;
 	f = alloc_file(pipe_mnt, dentry, FMODE_WRITE, &write_pipefifo_fops);
diff --git a/include/linux/dcache.h b/include/linux/dcache.h
index a37359d..ca8d269 100644
--- a/include/linux/dcache.h
+++ b/include/linux/dcache.h
@@ -176,6 +176,14 @@ d_iput:		no		no		no       yes
 #define DCACHE_UNHASHED		0x0010	
 
 #define DCACHE_INOTIFY_PARENT_WATCHED	0x0020 /* Parent inode is watched */
+#define DCACHE_SINGLE		0x0040
+	/*
+	 * socket, pipe or anonymous fd dentry
+	 * - SINGLE dentries have themselves as a parent.
+	 * - SINGLE dentries are not hashed into global hash table
+	 * - Their d_alias list is empty
+	 * - They dont need dcache_lock synchronization
+	 */
 
 extern spinlock_t dcache_lock;
 extern seqlock_t rename_lock;
@@ -235,6 +243,7 @@ extern void shrink_dcache_sb(struct super_block *);
 extern void shrink_dcache_parent(struct dentry *);
 extern void shrink_dcache_for_umount(struct super_block *);
 extern int d_invalidate(struct dentry *);
+extern struct dentry *d_alloc_single(const struct qstr *, struct inode *);
 
 /* only used at mount-time */
 extern struct dentry * d_alloc_root(struct inode *);
diff --git a/net/socket.c b/net/socket.c
index e9d65ea..231cd66 100644
--- a/net/socket.c
+++ b/net/socket.c
@@ -307,18 +307,6 @@ static struct file_system_type sock_fs_type = {
 	.kill_sb =	kill_anon_super,
 };
 
-static int sockfs_delete_dentry(struct dentry *dentry)
-{
-	/*
-	 * At creation time, we pretended this dentry was hashed
-	 * (by clearing DCACHE_UNHASHED bit in d_flags)
-	 * At delete time, we restore the truth : not hashed.
-	 * (so that dput() can proceed correctly)
-	 */
-	dentry->d_flags |= DCACHE_UNHASHED;
-	return 0;
-}
-
 /*
  * sockfs_dname() is called from d_path().
  */
@@ -329,7 +317,6 @@ static char *sockfs_dname(struct dentry *dentry, char *buffer, int buflen)
 }
 
 static struct dentry_operations sockfs_dentry_operations = {
-	.d_delete = sockfs_delete_dentry,
 	.d_dname  = sockfs_dname,
 };
 
@@ -371,20 +358,13 @@ static int sock_alloc_fd(struct file **filep, int flags)
 static int sock_attach_fd(struct socket *sock, struct file *file, int flags)
 {
 	struct dentry *dentry;
-	struct qstr name = { .name = "" };
+	static const struct qstr name = { .name = "" };
 
-	dentry = d_alloc(sock_mnt->mnt_sb->s_root, &name);
+	dentry = d_alloc_single(&name, SOCK_INODE(sock));
 	if (unlikely(!dentry))
 		return -ENOMEM;
 
 	dentry->d_op = &sockfs_dentry_operations;
-	/*
-	 * We dont want to push this dentry into global dentry hash table.
-	 * We pretend dentry is already hashed, by unsetting DCACHE_UNHASHED
-	 * This permits a working /proc/$pid/fd/XXX on sockets
-	 */
-	dentry->d_flags &= ~DCACHE_UNHASHED;
-	d_instantiate(dentry, SOCK_INODE(sock));
 
 	sock->file = file;
 	init_file(file, sock_mnt, dentry, FMODE_READ | FMODE_WRITE,

  parent reply	other threads:[~2008-11-29  8:46 UTC|newest]

Thread overview: 349+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2008-11-16 17:38 2.6.28-rc5: Reported regressions 2.6.26 -> 2.6.27 Rafael J. Wysocki
2008-11-16 17:38 ` Rafael J. Wysocki
2008-11-16 17:38 ` [Bug #11207] VolanoMark regression with 2.6.27-rc1 Rafael J. Wysocki
2008-11-16 17:38   ` Rafael J. Wysocki
2008-11-16 17:40 ` [Bug #11215] INFO: possible recursive locking detected ps2_command Rafael J. Wysocki
2008-11-16 17:40   ` Rafael J. Wysocki
2008-11-16 17:40 ` [Bug #11308] tbench regression on each kernel release from 2.6.22 -&gt; 2.6.28 Rafael J. Wysocki
2008-11-16 17:40   ` Rafael J. Wysocki
2008-11-17  9:06   ` Ingo Molnar
2008-11-17  9:06     ` Ingo Molnar
2008-11-17  9:14     ` David Miller
2008-11-17  9:14       ` David Miller
2008-11-17 11:01       ` Ingo Molnar
2008-11-17 11:01         ` Ingo Molnar
2008-11-17 11:20         ` Eric Dumazet
2008-11-17 16:11           ` Ingo Molnar
2008-11-17 16:11             ` Ingo Molnar
2008-11-17 16:35             ` Eric Dumazet
2008-11-17 16:35               ` Eric Dumazet
2008-11-17 17:08               ` Ingo Molnar
2008-11-17 17:08                 ` Ingo Molnar
2008-11-17 17:25                 ` Ingo Molnar
2008-11-17 17:25                   ` Ingo Molnar
2008-11-17 17:33                   ` Eric Dumazet
2008-11-17 17:33                     ` Eric Dumazet
2008-11-17 17:38                     ` Linus Torvalds
2008-11-17 17:38                       ` Linus Torvalds
2008-11-17 17:42                       ` Eric Dumazet
2008-11-17 17:42                         ` Eric Dumazet
2008-11-17 18:23                       ` Ingo Molnar
2008-11-17 18:23                         ` Ingo Molnar
2008-11-17 18:33                         ` Linus Torvalds
2008-11-17 18:33                           ` Linus Torvalds
2008-11-17 18:49                         ` Ingo Molnar
2008-11-17 18:49                           ` Ingo Molnar
2008-11-17 19:30                           ` Eric Dumazet
2008-11-17 19:30                             ` Eric Dumazet
2008-11-17 19:39                           ` David Miller
2008-11-17 19:39                             ` David Miller
2008-11-17 19:43                             ` Eric Dumazet
2008-11-17 19:43                               ` Eric Dumazet
2008-11-17 19:55                             ` Linus Torvalds
2008-11-17 19:55                               ` Linus Torvalds
2008-11-17 20:16                               ` David Miller
2008-11-17 20:16                                 ` David Miller
2008-11-17 20:30                                 ` Linus Torvalds
2008-11-17 20:30                                   ` Linus Torvalds
2008-11-17 20:58                                   ` David Miller
2008-11-17 20:58                                     ` David Miller
2008-11-18  9:44                                     ` Nick Piggin
2008-11-18  9:44                                       ` Nick Piggin
2008-11-18 15:58                                       ` Linus Torvalds
2008-11-18 15:58                                         ` Linus Torvalds
2008-11-19  4:31                                         ` Nick Piggin
2008-11-20  9:14                                         ` David Miller
2008-11-20  9:14                                           ` David Miller
2008-11-20  9:06                                       ` David Miller
2008-11-20  9:06                                         ` David Miller
2008-11-18 12:29                             ` Mike Galbraith
2008-11-18 12:29                               ` Mike Galbraith
2008-11-17 19:57                           ` Ingo Molnar
2008-11-17 19:57                             ` Ingo Molnar
2008-11-17 20:20                           ` (avc_has_perm_noaudit()) " Ingo Molnar
2008-11-17 20:20                             ` Ingo Molnar
2008-11-17 20:32                           ` ip_queue_xmit(): " Ingo Molnar
2008-11-17 20:32                             ` Ingo Molnar
2008-11-17 20:57                             ` Eric Dumazet
2008-11-17 20:57                               ` Eric Dumazet
2008-11-18  9:12                             ` Nick Piggin
2008-11-17 20:47                           ` Ingo Molnar
2008-11-17 20:47                             ` Ingo Molnar
2008-11-17 20:56                             ` Eric Dumazet
2008-11-17 20:56                               ` Eric Dumazet
2008-11-17 20:55                           ` skb_release_head_state(): " Ingo Molnar
2008-11-17 20:55                             ` Ingo Molnar
2008-11-17 21:01                             ` David Miller
2008-11-17 21:01                               ` David Miller
2008-11-17 21:04                             ` Eric Dumazet
2008-11-17 21:04                               ` Eric Dumazet
2008-11-17 21:34                             ` Linus Torvalds
2008-11-17 21:34                               ` Linus Torvalds
2008-11-17 21:38                               ` Ingo Molnar
2008-11-17 21:38                                 ` Ingo Molnar
2008-11-17 21:09                           ` tcp_ack(): " Ingo Molnar
2008-11-17 21:09                             ` Ingo Molnar
2008-11-17 21:19                           ` tcp_recvmsg(): " Ingo Molnar
2008-11-17 21:19                             ` Ingo Molnar
2008-11-17 21:26                           ` eth_type_trans(): " Ingo Molnar
2008-11-17 21:26                             ` Ingo Molnar
2008-11-17 21:40                             ` Eric Dumazet
2008-11-17 21:40                               ` Eric Dumazet
2008-11-17 23:41                               ` Eric Dumazet
2008-11-17 23:41                                 ` Eric Dumazet
2008-11-18  0:01                                 ` Linus Torvalds
2008-11-18  0:01                                   ` Linus Torvalds
2008-11-18  8:35                                   ` Eric Dumazet
2008-11-17 21:52                             ` Linus Torvalds
2008-11-17 21:52                               ` Linus Torvalds
2008-11-18  5:16                             ` David Miller
2008-11-18  5:16                               ` David Miller
2008-11-18  5:35                               ` Eric Dumazet
2008-11-18  7:00                                 ` David Miller
2008-11-18  7:00                                   ` David Miller
2008-11-18  8:30                               ` Ingo Molnar
2008-11-18  8:30                                 ` Ingo Molnar
2008-11-18  8:49                                 ` Eric Dumazet
2008-11-18  8:49                                   ` Eric Dumazet
2008-11-17 21:35                           ` __inet_lookup_established(): " Ingo Molnar
2008-11-17 21:35                             ` Ingo Molnar
2008-11-17 22:14                             ` Eric Dumazet
2008-11-17 22:14                               ` Eric Dumazet
2008-11-17 21:59                           ` system_call() - " Ingo Molnar
2008-11-17 21:59                             ` Ingo Molnar
2008-11-17 22:09                             ` Linus Torvalds
2008-11-17 22:09                               ` Linus Torvalds
2008-11-17 22:08                           ` Ingo Molnar
2008-11-17 22:15                             ` Eric Dumazet
2008-11-17 22:15                               ` Eric Dumazet
2008-11-17 22:26                               ` Ingo Molnar
2008-11-17 22:26                                 ` Ingo Molnar
2008-11-17 22:39                                 ` Eric Dumazet
2008-11-17 22:39                                   ` Eric Dumazet
2008-11-18  5:23                               ` David Miller
2008-11-18  5:23                                 ` David Miller
2008-11-18  8:45                                 ` Ingo Molnar
2008-11-18  8:45                                   ` Ingo Molnar
2008-11-17 22:14                           ` tcp_transmit_skb() - " Ingo Molnar
2008-11-17 22:14                             ` Ingo Molnar
2008-11-17 22:19                           ` Ingo Molnar
2008-11-17 22:19                             ` Ingo Molnar
2008-11-17 19:36                 ` David Miller
2008-11-17 19:36                   ` David Miller
2008-11-17 19:31             ` David Miller
2008-11-17 19:31               ` David Miller
2008-11-17 19:47               ` Linus Torvalds
2008-11-17 19:47                 ` Linus Torvalds
2008-11-17 19:51                 ` David Miller
2008-11-17 19:51                   ` David Miller
2008-11-17 19:53                 ` Ingo Molnar
2008-11-17 19:53                   ` Ingo Molnar
2008-11-17 22:47               ` Ingo Molnar
2008-11-17 22:47                 ` Ingo Molnar
2008-11-17 19:21         ` David Miller
2008-11-17 19:21           ` David Miller
2008-11-17 19:48           ` Linus Torvalds
2008-11-17 19:48             ` Linus Torvalds
2008-11-17 19:52             ` David Miller
2008-11-17 19:52               ` David Miller
2008-11-17 19:57               ` Linus Torvalds
2008-11-17 19:57                 ` Linus Torvalds
2008-11-17 20:18                 ` David Miller
2008-11-17 20:18                   ` David Miller
2008-11-19 19:43     ` Christoph Lameter
2008-11-19 19:43       ` Christoph Lameter
2008-11-19 20:14       ` Ingo Molnar
2008-11-19 20:14         ` Ingo Molnar
2008-11-20 23:52       ` Christoph Lameter
2008-11-20 23:52         ` Christoph Lameter
2008-11-21  8:30         ` Ingo Molnar
2008-11-21  8:30           ` Ingo Molnar
2008-11-21  8:51           ` Eric Dumazet
2008-11-21  8:51             ` Eric Dumazet
2008-11-21  9:05             ` David Miller
2008-11-21  9:05               ` David Miller
2008-11-21 12:51               ` Eric Dumazet
2008-11-21 12:51                 ` Eric Dumazet
2008-11-21 15:13                 ` [PATCH] fs: pipe/sockets/anon dentries should not have a parent Eric Dumazet
2008-11-21 15:13                   ` Eric Dumazet
2008-11-21 15:21                   ` Ingo Molnar
2008-11-21 15:21                     ` Ingo Molnar
2008-11-21 15:28                     ` Eric Dumazet
2008-11-21 15:28                       ` Eric Dumazet
2008-11-21 15:34                       ` Ingo Molnar
2008-11-21 15:34                         ` Ingo Molnar
2008-11-26 23:27                         ` [PATCH 0/6] fs: Scalability of sockets/pipes allocation/deallocation on SMP Eric Dumazet
2008-11-27  1:37                           ` Christoph Lameter
2008-11-27  1:37                             ` Christoph Lameter
2008-11-27  6:27                             ` Eric Dumazet
2008-11-27  6:27                               ` Eric Dumazet
2008-11-27 14:44                               ` Christoph Lameter
2008-11-27 14:44                                 ` Christoph Lameter
2008-11-27  9:39                           ` Christoph Hellwig
2008-11-28 18:03                           ` Ingo Molnar
2008-11-28 18:47                             ` Peter Zijlstra
2008-11-28 18:47                               ` Peter Zijlstra
2008-11-29  6:38                               ` Christoph Hellwig
2008-11-29  6:38                                 ` Christoph Hellwig
2008-11-29  8:07                                 ` Eric Dumazet
2008-11-29  8:07                                   ` Eric Dumazet
2008-11-29  8:43                           ` [PATCH v2 0/5] " Eric Dumazet
2008-11-29  8:43                             ` Eric Dumazet
2008-12-11 22:38                             ` [PATCH v3 0/7] " Eric Dumazet
2008-12-11 22:38                               ` Eric Dumazet
2008-12-11 22:38                             ` [PATCH v3 1/7] fs: Use a percpu_counter to track nr_dentry Eric Dumazet
2008-12-11 22:38                               ` Eric Dumazet
2007-07-24  1:24                               ` Nick Piggin
2007-07-24  1:24                                 ` Nick Piggin
2008-12-16 21:04                               ` Paul E. McKenney
2008-12-16 21:04                                 ` Paul E. McKenney
2008-12-11 22:39                             ` [PATCH v3 2/7] fs: Use a percpu_counter to track nr_inodes Eric Dumazet
2008-12-11 22:39                               ` Eric Dumazet
2007-07-24  1:30                               ` Nick Piggin
2007-07-24  1:30                                 ` Nick Piggin
2008-12-12  5:11                                 ` Eric Dumazet
2008-12-12  5:11                                   ` Eric Dumazet
2008-12-16 21:10                               ` Paul E. McKenney
2008-12-16 21:10                                 ` Paul E. McKenney
2008-12-11 22:39                             ` [PATCH v3 3/7] fs: Introduce a per_cpu last_ino allocator Eric Dumazet
2008-12-11 22:39                               ` Eric Dumazet
2007-07-24  1:34                               ` Nick Piggin
2007-07-24  1:34                                 ` Nick Piggin
2008-12-16 21:26                               ` Paul E. McKenney
2008-12-16 21:26                                 ` Paul E. McKenney
2008-12-11 22:39                             ` [PATCH v3 4/7] fs: Introduce SINGLE dentries for pipes, socket, anon fd Eric Dumazet
2008-12-11 22:39                               ` Eric Dumazet
2008-12-16 21:40                               ` Paul E. McKenney
2008-12-16 21:40                                 ` Paul E. McKenney
2008-12-11 22:40                             ` [PATCH v3 5/7] fs: new_inode_single() and iput_single() Eric Dumazet
2008-12-11 22:40                               ` Eric Dumazet
2008-12-16 21:41                               ` Paul E. McKenney
2008-12-16 21:41                                 ` Paul E. McKenney
2008-12-11 22:40                             ` [PATCH v3 6/7] fs: struct file move from call_rcu() to SLAB_DESTROY_BY_RCU Eric Dumazet
2008-12-11 22:40                               ` Eric Dumazet
2007-07-24  1:13                               ` Nick Piggin
2007-07-24  1:13                                 ` Nick Piggin
2007-07-24  1:13                                 ` Nick Piggin
2008-12-12  2:50                                 ` Nick Piggin
2008-12-12  2:50                                   ` Nick Piggin
2008-12-12  4:45                                 ` Eric Dumazet
2008-12-12  4:45                                   ` Eric Dumazet
2008-12-12 16:48                                   ` Eric Dumazet
2008-12-12 16:48                                     ` Eric Dumazet
2008-12-13  2:07                                     ` Christoph Lameter
2008-12-13  2:07                                       ` Christoph Lameter
2008-12-17 20:25                                       ` Eric Dumazet
2008-12-17 20:25                                         ` Eric Dumazet
2008-12-13  1:41                                   ` Christoph Lameter
2008-12-13  1:41                                     ` Christoph Lameter
2008-12-11 22:41                             ` [PATCH v3 7/7] fs: MS_NOREFCOUNT Eric Dumazet
2008-12-11 22:41                               ` Eric Dumazet
2008-11-29  8:43                           ` [PATCH v2 1/5] fs: Use a percpu_counter to track nr_dentry Eric Dumazet
2008-11-29  8:43                             ` Eric Dumazet
2008-11-29  8:43                           ` [PATCH v2 2/5] fs: Use a percpu_counter to track nr_inodes Eric Dumazet
2008-11-29  8:43                             ` Eric Dumazet
2008-11-29  8:44                           ` [PATCH v2 3/5] fs: Introduce a per_cpu last_ino allocator Eric Dumazet
2008-11-29  8:44                             ` Eric Dumazet
2008-11-29  8:44                           ` Eric Dumazet [this message]
2008-11-29  8:44                             ` [PATCH v2 4/5] fs: Introduce SINGLE dentries for pipes, socket, anon fd Eric Dumazet
2008-11-29 10:38                             ` Jörn Engel
2008-11-29 10:38                               ` Jörn Engel
2008-11-29 10:38                               ` Jörn Engel
2008-11-29 11:14                               ` Eric Dumazet
2008-11-29 11:14                                 ` Eric Dumazet
2008-11-29  8:45                           ` [PATCH v2 5/5] fs: new_inode_single() and iput_single() Eric Dumazet
2008-11-29  8:45                             ` Eric Dumazet
2008-11-29 11:14                             ` Jörn Engel
2008-11-29 11:14                               ` Jörn Engel
2008-11-29 11:14                               ` Jörn Engel
2008-11-26 23:30                         ` [PATCH 1/6] fs: Introduce a per_cpu nr_dentry Eric Dumazet
2008-11-26 23:30                           ` Eric Dumazet
2008-11-27  9:41                           ` Christoph Hellwig
2008-11-27  9:41                             ` Christoph Hellwig
2008-11-26 23:32                         ` [PATCH 3/6] fs: Introduce a per_cpu last_ino allocator Eric Dumazet
2008-11-27  9:46                           ` Christoph Hellwig
2008-11-27  9:46                             ` Christoph Hellwig
2008-11-26 23:32                         ` [PATCH 4/6] fs: Introduce a per_cpu nr_inodes Eric Dumazet
2008-11-26 23:32                           ` Eric Dumazet
2008-11-27  9:32                           ` Peter Zijlstra
2008-11-27  9:39                             ` Peter Zijlstra
2008-11-27  9:39                               ` Peter Zijlstra
2008-11-27  9:48                               ` Christoph Hellwig
2008-11-27 10:01                             ` Eric Dumazet
2008-11-27 10:01                               ` Eric Dumazet
2008-11-27 10:07                             ` Andi Kleen
2008-11-27 14:46                             ` Christoph Lameter
2008-11-26 23:32                         ` [PATCH 5/6] fs: Introduce special inodes Eric Dumazet
2008-11-26 23:32                           ` Eric Dumazet
2008-11-27  8:20                           ` David Miller
2008-11-27  8:20                             ` David Miller
2008-11-26 23:32                         ` [PATCH 6/6] fs: Introduce kern_mount_special() to mount special vfs Eric Dumazet
2008-11-27  8:21                           ` David Miller
2008-11-27  8:21                             ` David Miller
2008-11-27  9:53                           ` Christoph Hellwig
2008-11-27 10:04                             ` Eric Dumazet
2008-11-27 10:04                               ` Eric Dumazet
2008-11-27 10:10                               ` Christoph Hellwig
2008-11-27 10:10                                 ` Christoph Hellwig
2008-11-28  9:26                           ` Al Viro
2008-11-28  9:26                             ` Al Viro
2008-11-28  9:34                             ` Al Viro
2008-11-28  9:34                               ` Al Viro
2008-11-28 18:02                             ` Ingo Molnar
2008-11-28 18:02                               ` Ingo Molnar
2008-11-28 18:58                               ` Ingo Molnar
2008-11-28 22:20                               ` Eric Dumazet
2008-11-28 22:20                                 ` Eric Dumazet
2008-11-28 22:37                             ` Eric Dumazet
2008-11-28 22:43                               ` Eric Dumazet
2008-11-21 15:36                   ` [PATCH] fs: pipe/sockets/anon dentries should not have a parent Christoph Hellwig
2008-11-21 17:58                     ` [PATCH] fs: pipe/sockets/anon dentries should have themselves as parent Eric Dumazet
2008-11-21 18:43                       ` Matthew Wilcox
2008-11-21 18:43                         ` Matthew Wilcox
2008-11-23  3:53                         ` Eric Dumazet
2008-11-21  9:18             ` [Bug #11308] tbench regression on each kernel release from 2.6.22 -&gt; 2.6.28 Ingo Molnar
2008-11-21  9:18               ` Ingo Molnar
2008-11-21  9:03           ` David Miller
2008-11-21  9:03             ` David Miller
2008-11-21 16:11           ` Christoph Lameter
2008-11-21 16:11             ` Christoph Lameter
2008-11-21 18:06             ` Christoph Lameter
2008-11-21 18:06               ` Christoph Lameter
2008-11-21 18:16               ` Eric Dumazet
2008-11-21 18:16                 ` Eric Dumazet
2008-11-21 18:19                 ` Eric Dumazet
2008-11-21 18:19                   ` Eric Dumazet
2008-11-16 17:40 ` [Bug #11664] acpi errors and random freeze on sony vaio sr Rafael J. Wysocki
2008-11-16 17:40   ` Rafael J. Wysocki
2008-11-16 17:40 ` [Bug #11698] 2.6.27-rc7, freezes with &gt; 1 s2ram cycle Rafael J. Wysocki
2008-11-16 17:40   ` Rafael J. Wysocki
2008-11-16 17:40 ` [Bug #11404] BUG: in 2.6.23-rc3-git7 in do_cciss_intr Rafael J. Wysocki
2008-11-16 17:40   ` Rafael J. Wysocki
2008-11-17 16:19   ` Randy Dunlap
2008-11-16 17:40 ` [Bug #11569] Panic stop CPUs regression Rafael J. Wysocki
2008-11-16 17:40   ` Rafael J. Wysocki
2008-11-16 17:40 ` [Bug #11543] kernel panic: softlockup in tick_periodic() ??? Rafael J. Wysocki
2008-11-16 17:40   ` Rafael J. Wysocki
2008-11-16 17:40 ` [Bug #11836] Scheduler on C2D CPU and latest 2.6.27 kernel Rafael J. Wysocki
2008-11-16 17:40   ` Rafael J. Wysocki
2008-11-16 17:40 ` [Bug #11805] mounting XFS produces a segfault Rafael J. Wysocki
2008-11-16 17:40   ` Rafael J. Wysocki
2008-11-17 14:44   ` Christoph Hellwig
2008-11-17 14:44     ` Christoph Hellwig
2008-11-16 17:40 ` [Bug #11795] ks959-sir dongle no longer works under 2.6.27 (REGRESSION) Rafael J. Wysocki
2008-11-16 17:40   ` Rafael J. Wysocki
2008-11-16 17:40 ` [Bug #11865] WOL for E100 Doesn't Work Anymore Rafael J. Wysocki
2008-11-16 17:40   ` Rafael J. Wysocki
2008-11-16 17:40 ` [Bug #11843] usb hdd problems with 2.6.27.2 Rafael J. Wysocki
2008-11-16 17:40   ` Rafael J. Wysocki
2008-11-16 21:37   ` Luciano Rocha
2008-11-16 17:40 ` [Bug #11876] RCU hang on cpu re-hotplug with 2.6.27rc8 Rafael J. Wysocki
2008-11-16 17:40   ` Rafael J. Wysocki
2008-11-16 17:40 ` [Bug #11886] without serial console system doesn't poweroff Rafael J. Wysocki
2008-11-16 17:40   ` Rafael J. Wysocki
2008-11-16 17:41 ` [Bug #12039] Regression: USB/DVB 2.6.26.8 --&gt; 2.6.27.6 Rafael J. Wysocki
2008-11-16 17:41   ` Rafael J. Wysocki
2008-11-16 17:41 ` [Bug #11983] iwlagn: wrong command queue 31, command id 0x0 Rafael J. Wysocki
2008-11-16 17:41   ` Rafael J. Wysocki
2008-11-16 17:41 ` [Bug #12048] Regression in bonding between 2.6.26.8 and 2.6.27.6 Rafael J. Wysocki
2008-11-16 17:41   ` Rafael J. Wysocki

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=493100E7.3030907@cosmosbay.com \
    --to=dada1@cosmosbay.com \
    --cc=a.p.zijlstra@chello.nl \
    --cc=cl@linux-foundation.org \
    --cc=davem@davemloft.net \
    --cc=efault@gmx.de \
    --cc=hch@infradead.org \
    --cc=kernel-testers@vger.kernel.org \
    --cc=linux-fsdevel@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=mingo@elte.hu \
    --cc=netdev@vger.kernel.org \
    --cc=rjw@sisk.pl \
    --cc=viro@ZenIV.linux.org.uk \
    /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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.