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,
next prev 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 -> 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 -> 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 > 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 --> 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: linkBe 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.