* [patch] cgroup fs: avoid switching ->d_op on live dentry
@ 2010-12-21 7:12 Nick Piggin
2010-12-21 9:04 ` Paul Menage
0 siblings, 1 reply; 13+ messages in thread
From: Nick Piggin @ 2010-12-21 7:12 UTC (permalink / raw)
To: Paul Menage, Li Zefan, linux-fsdevel
cgroup fs: avoid switching ->d_op on live dentry
Switching d_op on a live dentry is racy in general, so avoid it. In this case
it is a negative dentry, which is safer, but there are still concurrent ops
which may be called on d_op in that case (eg. d_revalidate). So in general
a filesystem may not do this. Fix cgroupfs so as not to do this.
This caused problematic interaction with other development work, thanks
to Sedat Dilek and Eric Paris for reporting the issue here:
http://marc.info/?l=linux-next&m=129287924727475&w=2
Signed-off-by: Nick Piggin <npiggin@kernel.dk>
---
One of the patches in my vfs scaling series tripped over this, comments?
kernel/cgroup.c | 27 ++++++++++++++++++++++-----
1 file changed, 22 insertions(+), 5 deletions(-)
Index: linux-2.6/kernel/cgroup.c
===================================================================
--- linux-2.6.orig/kernel/cgroup.c 2010-12-21 16:02:32.000000000 +1100
+++ linux-2.6/kernel/cgroup.c 2010-12-21 16:51:39.000000000 +1100
@@ -763,6 +763,8 @@ EXPORT_SYMBOL_GPL(cgroup_unlock);
* -> cgroup_mkdir.
*/
+static struct dentry *cgroup_lookup(struct inode *dir,
+ struct dentry *dentry, struct nameidata *nd);
static int cgroup_mkdir(struct inode *dir, struct dentry *dentry, int mode);
static int cgroup_rmdir(struct inode *unused_dir, struct dentry *dentry);
static int cgroup_populate_dir(struct cgroup *cgrp);
@@ -2180,7 +2182,7 @@ static const struct file_operations cgro
};
static const struct inode_operations cgroup_dir_inode_operations = {
- .lookup = simple_lookup,
+ .lookup = cgroup_lookup,
.mkdir = cgroup_mkdir,
.rmdir = cgroup_rmdir,
.rename = cgroup_rename,
@@ -2196,13 +2198,29 @@ static inline struct cftype *__file_cft(
return __d_cft(file->f_dentry);
}
-static int cgroup_create_file(struct dentry *dentry, mode_t mode,
- struct super_block *sb)
+static int cgroup_delete_dentry(struct dentry *dentry)
+{
+ return 1;
+}
+
+static struct dentry *cgroup_lookup(struct inode *dir,
+ struct dentry *dentry, struct nameidata *nd)
{
- static const struct dentry_operations cgroup_dops = {
+ static const struct dentry_operations cgroup_dentry_operations = {
+ .d_delete = cgroup_delete_dentry,
.d_iput = cgroup_diput,
};
+ if (dentry->d_name.len > NAME_MAX)
+ return ERR_PTR(-ENAMETOOLONG);
+ dentry->d_op = &cgroup_dentry_operations;
+ d_add(dentry, NULL);
+ return NULL;
+}
+
+static int cgroup_create_file(struct dentry *dentry, mode_t mode,
+ struct super_block *sb)
+{
struct inode *inode;
if (!dentry)
@@ -2228,7 +2246,6 @@ static int cgroup_create_file(struct den
inode->i_size = 0;
inode->i_fop = &cgroup_file_operations;
}
- dentry->d_op = &cgroup_dops;
d_instantiate(dentry, inode);
dget(dentry); /* Extra count - pin the dentry in core */
return 0;
^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: [patch] cgroup fs: avoid switching ->d_op on live dentry
@ 2010-12-21 8:44 Sedat Dilek
2010-12-21 8:55 ` Nick Piggin
` (2 more replies)
0 siblings, 3 replies; 13+ messages in thread
From: Sedat Dilek @ 2010-12-21 8:44 UTC (permalink / raw)
To: Nick Piggin; +Cc: systemd-devel, linux-fsdevel, linux-next, eparis
Against linux-next (next-20101210) it should look like:
$ diff -Naur cgroup-fix/cgroup-fs-avoid-switching-d_op-on-live-dentry.patch
cgroup-fix/cgroup-fs-avoid-switching-d_op-on-live-dentry-v2.patch
--- cgroup-fix/cgroup-fs-avoid-switching-d_op-on-live-dentry.patch
2010-12-21 09:31:38.649601964 +0100
+++ cgroup-fix/cgroup-fs-avoid-switching-d_op-on-live-dentry-v2.patch
2010-12-21 09:40:21.151033232 +0100
@@ -83,7 +83,7 @@
inode->i_size = 0;
inode->i_fop = &cgroup_file_operations;
}
-- dentry->d_op = &cgroup_dops;
+- d_set_d_op(dentry, &cgroup_dops);
d_instantiate(dentry, inode);
dget(dentry); /* Extra count - pin the dentry in core */
return 0;
- Sedat -
^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: [patch] cgroup fs: avoid switching ->d_op on live dentry
2010-12-21 8:44 [patch] cgroup fs: avoid switching ->d_op on live dentry Sedat Dilek
@ 2010-12-21 8:55 ` Nick Piggin
2010-12-21 13:35 ` Sedat Dilek
2010-12-21 18:25 ` Al Viro
2010-12-21 15:12 ` Sedat Dilek
2010-12-21 15:28 ` Sedat Dilek
2 siblings, 2 replies; 13+ messages in thread
From: Nick Piggin @ 2010-12-21 8:55 UTC (permalink / raw)
To: sedat.dilek; +Cc: linux-fsdevel, linux-next, systemd-devel, Nick Piggin, eparis
On Tue, Dec 21, 2010 at 09:44:40AM +0100, Sedat Dilek wrote:
> Against linux-next (next-20101210) it should look like:
Yep, I'll rebase my tree with the fix shortly.
>
> $ diff -Naur cgroup-fix/cgroup-fs-avoid-switching-d_op-on-live-dentry.patch
> cgroup-fix/cgroup-fs-avoid-switching-d_op-on-live-dentry-v2.patch
> --- cgroup-fix/cgroup-fs-avoid-switching-d_op-on-live-dentry.patch
> 2010-12-21 09:31:38.649601964 +0100
> +++ cgroup-fix/cgroup-fs-avoid-switching-d_op-on-live-dentry-v2.patch
> 2010-12-21 09:40:21.151033232 +0100
> @@ -83,7 +83,7 @@
> inode->i_size = 0;
> inode->i_fop = &cgroup_file_operations;
> }
> -- dentry->d_op = &cgroup_dops;
> +- d_set_d_op(dentry, &cgroup_dops);
> d_instantiate(dentry, inode);
> dget(dentry); /* Extra count - pin the dentry in core */
> return 0;
>
> - Sedat -
^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: [patch] cgroup fs: avoid switching ->d_op on live dentry
2010-12-21 7:12 Nick Piggin
@ 2010-12-21 9:04 ` Paul Menage
0 siblings, 0 replies; 13+ messages in thread
From: Paul Menage @ 2010-12-21 9:04 UTC (permalink / raw)
To: Nick Piggin; +Cc: Li Zefan, linux-fsdevel
On Mon, Dec 20, 2010 at 11:12 PM, Nick Piggin <npiggin@kernel.dk> wrote:
>
> cgroup fs: avoid switching ->d_op on live dentry
>
> Switching d_op on a live dentry is racy in general, so avoid it. In this case
> it is a negative dentry, which is safer, but there are still concurrent ops
> which may be called on d_op in that case (eg. d_revalidate). So in general
> a filesystem may not do this. Fix cgroupfs so as not to do this.
>
> This caused problematic interaction with other development work, thanks
> to Sedat Dilek and Eric Paris for reporting the issue here:
>
> http://marc.info/?l=linux-next&m=129287924727475&w=2
>
> Signed-off-by: Nick Piggin <npiggin@kernel.dk>
Acked-by: Paul Menage <menage@google.com>
Thanks,
Paul
>
> ---
> One of the patches in my vfs scaling series tripped over this, comments?
>
> kernel/cgroup.c | 27 ++++++++++++++++++++++-----
> 1 file changed, 22 insertions(+), 5 deletions(-)
>
> Index: linux-2.6/kernel/cgroup.c
> ===================================================================
> --- linux-2.6.orig/kernel/cgroup.c 2010-12-21 16:02:32.000000000 +1100
> +++ linux-2.6/kernel/cgroup.c 2010-12-21 16:51:39.000000000 +1100
> @@ -763,6 +763,8 @@ EXPORT_SYMBOL_GPL(cgroup_unlock);
> * -> cgroup_mkdir.
> */
>
> +static struct dentry *cgroup_lookup(struct inode *dir,
> + struct dentry *dentry, struct nameidata *nd);
> static int cgroup_mkdir(struct inode *dir, struct dentry *dentry, int mode);
> static int cgroup_rmdir(struct inode *unused_dir, struct dentry *dentry);
> static int cgroup_populate_dir(struct cgroup *cgrp);
> @@ -2180,7 +2182,7 @@ static const struct file_operations cgro
> };
>
> static const struct inode_operations cgroup_dir_inode_operations = {
> - .lookup = simple_lookup,
> + .lookup = cgroup_lookup,
> .mkdir = cgroup_mkdir,
> .rmdir = cgroup_rmdir,
> .rename = cgroup_rename,
> @@ -2196,13 +2198,29 @@ static inline struct cftype *__file_cft(
> return __d_cft(file->f_dentry);
> }
>
> -static int cgroup_create_file(struct dentry *dentry, mode_t mode,
> - struct super_block *sb)
> +static int cgroup_delete_dentry(struct dentry *dentry)
> +{
> + return 1;
> +}
> +
> +static struct dentry *cgroup_lookup(struct inode *dir,
> + struct dentry *dentry, struct nameidata *nd)
> {
> - static const struct dentry_operations cgroup_dops = {
> + static const struct dentry_operations cgroup_dentry_operations = {
> + .d_delete = cgroup_delete_dentry,
> .d_iput = cgroup_diput,
> };
>
> + if (dentry->d_name.len > NAME_MAX)
> + return ERR_PTR(-ENAMETOOLONG);
> + dentry->d_op = &cgroup_dentry_operations;
> + d_add(dentry, NULL);
> + return NULL;
> +}
> +
> +static int cgroup_create_file(struct dentry *dentry, mode_t mode,
> + struct super_block *sb)
> +{
> struct inode *inode;
>
> if (!dentry)
> @@ -2228,7 +2246,6 @@ static int cgroup_create_file(struct den
> inode->i_size = 0;
> inode->i_fop = &cgroup_file_operations;
> }
> - dentry->d_op = &cgroup_dops;
> d_instantiate(dentry, inode);
> dget(dentry); /* Extra count - pin the dentry in core */
> return 0;
>
--
To unsubscribe from this list: send the line "unsubscribe linux-fsdevel" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: [patch] cgroup fs: avoid switching ->d_op on live dentry
2010-12-21 8:55 ` Nick Piggin
@ 2010-12-21 13:35 ` Sedat Dilek
2010-12-21 18:25 ` Al Viro
1 sibling, 0 replies; 13+ messages in thread
From: Sedat Dilek @ 2010-12-21 13:35 UTC (permalink / raw)
To: Nick Piggin; +Cc: linux-fsdevel, linux-next, systemd-devel, eparis
On Tue, Dec 21, 2010 at 9:55 AM, Nick Piggin <npiggin@kernel.dk> wrote:
> On Tue, Dec 21, 2010 at 09:44:40AM +0100, Sedat Dilek wrote:
>> Against linux-next (next-20101210) it should look like:
>
> Yep, I'll rebase my tree with the fix shortly.
>
>>
>> $ diff -Naur cgroup-fix/cgroup-fs-avoid-switching-d_op-on-live-dentry.patch
>> cgroup-fix/cgroup-fs-avoid-switching-d_op-on-live-dentry-v2.patch
>> --- cgroup-fix/cgroup-fs-avoid-switching-d_op-on-live-dentry.patch
>> 2010-12-21 09:31:38.649601964 +0100
>> +++ cgroup-fix/cgroup-fs-avoid-switching-d_op-on-live-dentry-v2.patch
>> 2010-12-21 09:40:21.151033232 +0100
>> @@ -83,7 +83,7 @@
>> inode->i_size = 0;
>> inode->i_fop = &cgroup_file_operations;
>> }
>> -- dentry->d_op = &cgroup_dops;
>> +- d_set_d_op(dentry, &cgroup_dops);
>> d_instantiate(dentry, inode);
>> dget(dentry); /* Extra count - pin the dentry in core */
>> return 0;
>>
>> - Sedat -
>
I just started the compilation due to slow kernel mirrors, I see this warning:
$ egrep 'kernel/cgroup.o|kernel/cgroup.c'
build_linux-next_next20101221.dileks.1.log
CC kernel/cgroup.o
/home/sd/src/linux-2.6/linux-2.6.37-rc6/debian/build/source_i386_none/kernel/cgroup.c:
In function ‘cgroup_lookup’:
/home/sd/src/linux-2.6/linux-2.6.37-rc6/debian/build/source_i386_none/kernel/cgroup.c:2219:3:
warning: initialization from incompatible pointer type
[ kernel/cgroup.c ]
...
static int cgroup_delete_dentry(struct dentry *dentry)
{
return 1;
}
static struct dentry *cgroup_lookup(struct inode *dir,
struct dentry *dentry, struct nameidata *nd)
{
static const struct dentry_operations cgroup_dentry_operations = {
.d_delete = cgroup_delete_dentry, <--- LINE #2219
.d_iput = cgroup_diput,
};
if (dentry->d_name.len > NAME_MAX)
return ERR_PTR(-ENAMETOOLONG);
dentry->d_op = &cgroup_dentry_operations;
d_add(dentry, NULL);
return NULL;
}
...
Can you fix that with your rebasing, too?
Thanks in advance.
- Sedat -
_______________________________________________
systemd-devel mailing list
systemd-devel@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/systemd-devel
^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: [patch] cgroup fs: avoid switching ->d_op on live dentry
2010-12-21 8:44 [patch] cgroup fs: avoid switching ->d_op on live dentry Sedat Dilek
2010-12-21 8:55 ` Nick Piggin
@ 2010-12-21 15:12 ` Sedat Dilek
2010-12-21 15:28 ` Sedat Dilek
2 siblings, 0 replies; 13+ messages in thread
From: Sedat Dilek @ 2010-12-21 15:12 UTC (permalink / raw)
To: Nick Piggin; +Cc: systemd-devel, linux-fsdevel, linux-next, eparis
[-- Attachment #1: Type: text/plain, Size: 2173 bytes --]
On Tue, Dec 21, 2010 at 9:44 AM, Sedat Dilek <sedat.dilek@googlemail.com> wrote:
> Against linux-next (next-20101210) it should look like:
>
> $ diff -Naur cgroup-fix/cgroup-fs-avoid-switching-d_op-on-live-dentry.patch
> cgroup-fix/cgroup-fs-avoid-switching-d_op-on-live-dentry-v2.patch
> --- cgroup-fix/cgroup-fs-avoid-switching-d_op-on-live-dentry.patch
> 2010-12-21 09:31:38.649601964 +0100
> +++ cgroup-fix/cgroup-fs-avoid-switching-d_op-on-live-dentry-v2.patch
> 2010-12-21 09:40:21.151033232 +0100
> @@ -83,7 +83,7 @@
> inode->i_size = 0;
> inode->i_fop = &cgroup_file_operations;
> }
> -- dentry->d_op = &cgroup_dops;
> +- d_set_d_op(dentry, &cgroup_dops);
> d_instantiate(dentry, inode);
> dget(dentry); /* Extra count - pin the dentry in core */
> return 0;
>
> - Sedat -
>
YAY!!!
# dmesg | grep systemd
[ 0.000000] Kernel command line:
BOOT_IMAGE=/boot/vmlinuz-2.6.37-rc6-686
root=UUID=1ceb69a7-ecf4-47e9-a231-b74e0f0a9b62 ro ini
[ 4.124563] systemd[1]: systemd 15 running in system mode. (+PAM
-LIBWRAP -AUDIT +SELINUX +SYSVINIT -LIBCRYPTSETUP; debian)
[ 4.246090] systemd[1]: Set hostname to <tbox>.
[ 6.942949] systemd-logger[290]: Got error on stream: No such
process
[ 9.011378] systemd-fsck[524]: /dev/sda3: sauber, 128062/640848
Dateien, 1839774/2560359 Blöcke
[ 15.186112] systemd[1]: ifupdown-clean.service: control process
exited, code=exited status=209
[ 15.186941] systemd[1]: Unit ifupdown-clean.service entered failed state.
[ 15.187363] systemd[1]: mountoverflowtmp.service: control process
exited, code=exited status=209
[ 15.206223] systemd[1]: Unit mountoverflowtmp.service entered failed state.
[ 15.215739] systemd[1]: resolvconf.service: control process exited,
code=exited status=209
[ 15.235257] systemd[1]: Unit resolvconf.service entered failed state.
Feel free to add:
Reported-and-tested-by: Sedat Dilek <sedat.dilek@gmail.com>
(Tested with the above v2 patch against linux-next (next-20101221) -
see file attachment).
- Sedat -
[-- Attachment #2: cgroup-fs-avoid-switching-d_op-on-live-dentry-v2.patch --]
[-- Type: plain/text, Size: 3277 bytes --]
^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: [patch] cgroup fs: avoid switching ->d_op on live dentry
2010-12-21 8:44 [patch] cgroup fs: avoid switching ->d_op on live dentry Sedat Dilek
2010-12-21 8:55 ` Nick Piggin
2010-12-21 15:12 ` Sedat Dilek
@ 2010-12-21 15:28 ` Sedat Dilek
2010-12-21 17:56 ` Sedat Dilek
2 siblings, 1 reply; 13+ messages in thread
From: Sedat Dilek @ 2010-12-21 15:28 UTC (permalink / raw)
To: Nick Piggin; +Cc: systemd-devel, linux-fsdevel, linux-next, eparis
[-- Attachment #1: Type: text/plain, Size: 1226 bytes --]
What about using d_set_d_op() ?
- Sedat -
$ diff -Naur orig/cgroup-fs-avoid-switching-d_op-on-live-dentry.patch
cgroup-fs-avoid-switching-d_op-on-live-dentry-v3.patch
--- orig/cgroup-fs-avoid-switching-d_op-on-live-dentry.patch
2010-12-21 09:31:38.649601964 +0100
+++ cgroup-fs-avoid-switching-d_op-on-live-dentry-v3.patch
2010-12-21 16:23:29.147497577 +0100
@@ -21,6 +21,9 @@
---
One of the patches in my vfs scaling series tripped over this, comments?
+v2: Refreshed to fit linux-next (next-20101220)
+v3: Use d_set_d_op()
+
kernel/cgroup.c | 27 ++++++++++++++++++++++-----
1 file changed, 22 insertions(+), 5 deletions(-)
@@ -68,7 +71,7 @@
+ if (dentry->d_name.len > NAME_MAX)
+ return ERR_PTR(-ENAMETOOLONG);
-+ dentry->d_op = &cgroup_dentry_operations;
++ d_set_d_op(dentry, &cgroup_dentry_operations);
+ d_add(dentry, NULL);
+ return NULL;
+}
@@ -83,7 +86,7 @@
inode->i_size = 0;
inode->i_fop = &cgroup_file_operations;
}
-- dentry->d_op = &cgroup_dops;
+- d_set_d_op(dentry, &cgroup_dops);
d_instantiate(dentry, inode);
dget(dentry); /* Extra count - pin the dentry in core */
return 0;
[-- Attachment #2: cgroup-fs-avoid-switching-d_op-on-live-dentry-v3.patch --]
[-- Type: plain/text, Size: 3303 bytes --]
^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: [patch] cgroup fs: avoid switching ->d_op on live dentry
2010-12-21 15:28 ` Sedat Dilek
@ 2010-12-21 17:56 ` Sedat Dilek
0 siblings, 0 replies; 13+ messages in thread
From: Sedat Dilek @ 2010-12-21 17:56 UTC (permalink / raw)
To: Nick Piggin; +Cc: systemd-devel, linux-fsdevel, linux-next, eparis
On Tue, Dec 21, 2010 at 4:28 PM, Sedat Dilek <sedat.dilek@googlemail.com> wrote:
> What about using d_set_d_op() ?
>
> - Sedat -
>
> $ diff -Naur orig/cgroup-fs-avoid-switching-d_op-on-live-dentry.patch
> cgroup-fs-avoid-switching-d_op-on-live-dentry-v3.patch
> --- orig/cgroup-fs-avoid-switching-d_op-on-live-dentry.patch
> 2010-12-21 09:31:38.649601964 +0100
> +++ cgroup-fs-avoid-switching-d_op-on-live-dentry-v3.patch
> 2010-12-21 16:23:29.147497577 +0100
> @@ -21,6 +21,9 @@
> ---
> One of the patches in my vfs scaling series tripped over this, comments?
>
> +v2: Refreshed to fit linux-next (next-20101220)
> +v3: Use d_set_d_op()
> +
> kernel/cgroup.c | 27 ++++++++++++++++++++++-----
> 1 file changed, 22 insertions(+), 5 deletions(-)
>
> @@ -68,7 +71,7 @@
>
> + if (dentry->d_name.len > NAME_MAX)
> + return ERR_PTR(-ENAMETOOLONG);
> -+ dentry->d_op = &cgroup_dentry_operations;
> ++ d_set_d_op(dentry, &cgroup_dentry_operations);
> + d_add(dentry, NULL);
> + return NULL;
> +}
> @@ -83,7 +86,7 @@
> inode->i_size = 0;
> inode->i_fop = &cgroup_file_operations;
> }
> -- dentry->d_op = &cgroup_dops;
> +- d_set_d_op(dentry, &cgroup_dops);
> d_instantiate(dentry, inode);
> dget(dentry); /* Extra count - pin the dentry in core */
> return 0;
>
v3 compiled and running (failed systemd services needs some
investigations, but that is another story).
BTW, I have enabled some cgroup debug options:
# grep -i cgroup /boot/config-$(uname -r)
CONFIG_CGROUPS=y
CONFIG_CGROUP_DEBUG=y
CONFIG_CGROUP_NS=y
CONFIG_CGROUP_FREEZER=y
CONFIG_CGROUP_DEVICE=y
CONFIG_CGROUP_CPUACCT=y
CONFIG_CGROUP_SCHED=y
CONFIG_BLK_CGROUP=y
CONFIG_DEBUG_BLK_CGROUP=y
CONFIG_NET_CLS_CGROUP=y
- Sedat -
P.S.:
# cat /proc/version
Linux version 2.6.37-rc6-686 (Debian
2.6.37~rc6-8~next20101221.dileks.2) (sedat.dilek@gmail.com) (gcc
version 4.5.2 (Debian 4.5.2-1) ) #1 SMP Tue Dec 21 18:25:45 CET 2010
# dmesg | egrep -i 'systemd|cgroup'
[ 0.000000] Initializing cgroup subsys cpuset
[ 0.000000] Initializing cgroup subsys cpu
[ 0.000000] Kernel command line:
BOOT_IMAGE=/boot/vmlinuz-2.6.37-rc6-686
root=UUID=1ceb69a7-ecf4-47e9-a231-b74e0f0a9b62 ro init=/bin/systemd
radeon.modeset=1 lapic 3
[ 0.004574] Initializing cgroup subsys debug
[ 0.004615] Initializing cgroup subsys ns
[ 0.004651] ns_cgroup deprecated: consider using the
'clone_children' flag without the ns_cgroup.
[ 0.004700] Initializing cgroup subsys cpuacct
[ 0.004739] Initializing cgroup subsys devices
[ 0.004775] Initializing cgroup subsys freezer
[ 0.004810] Initializing cgroup subsys net_cls
[ 0.004846] Initializing cgroup subsys blkio
[ 4.111878] systemd[1]: systemd 15 running in system mode. (+PAM
-LIBWRAP -AUDIT +SELINUX +SYSVINIT -LIBCRYPTSETUP; debian)
[ 4.241710] systemd[1]: Set hostname to <tbox>.
[ 7.096444] systemd-logger[284]: Got error on stream: No such process
[ 9.123292] systemd-fsck[499]: /dev/sda3: sauber, 128016/640848
Dateien, 1788184/2560359 Blöcke
[ 15.411402] systemd[1]: ifupdown-clean.service: control process
exited, code=exited status=209
[ 15.420338] systemd[1]: Unit ifupdown-clean.service entered failed state.
[ 15.420808] systemd[1]: mountoverflowtmp.service: control process
exited, code=exited status=209
[ 15.437782] systemd[1]: Unit mountoverflowtmp.service entered failed state.
[ 15.451162] systemd[1]: resolvconf.service: control process exited,
code=exited status=209
[ 15.470512] systemd[1]: Unit resolvconf.service entered failed state.
[ 15.480271] systemd[1]: policykit.service: control process exited,
code=exited status=209
[ 15.500513] systemd[1]: Unit policykit.service entered failed state.
^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: [patch] cgroup fs: avoid switching ->d_op on live dentry
2010-12-21 8:55 ` Nick Piggin
2010-12-21 13:35 ` Sedat Dilek
@ 2010-12-21 18:25 ` Al Viro
2010-12-21 18:57 ` Sedat Dilek
` (2 more replies)
1 sibling, 3 replies; 13+ messages in thread
From: Al Viro @ 2010-12-21 18:25 UTC (permalink / raw)
To: Nick Piggin; +Cc: sedat.dilek, systemd-devel, linux-fsdevel, linux-next, eparis
On Tue, Dec 21, 2010 at 07:55:38PM +1100, Nick Piggin wrote:
> On Tue, Dec 21, 2010 at 09:44:40AM +0100, Sedat Dilek wrote:
> > Against linux-next (next-20101210) it should look like:
>
> Yep, I'll rebase my tree with the fix shortly.
>
> >
> > $ diff -Naur cgroup-fix/cgroup-fs-avoid-switching-d_op-on-live-dentry.patch
> > cgroup-fix/cgroup-fs-avoid-switching-d_op-on-live-dentry-v2.patch
> > --- cgroup-fix/cgroup-fs-avoid-switching-d_op-on-live-dentry.patch
> > 2010-12-21 09:31:38.649601964 +0100
> > +++ cgroup-fix/cgroup-fs-avoid-switching-d_op-on-live-dentry-v2.patch
> > 2010-12-21 09:40:21.151033232 +0100
> > @@ -83,7 +83,7 @@
> > inode->i_size = 0;
> > inode->i_fop = &cgroup_file_operations;
> > }
> > -- dentry->d_op = &cgroup_dops;
> > +- d_set_d_op(dentry, &cgroup_dops);
> > d_instantiate(dentry, inode);
> > dget(dentry); /* Extra count - pin the dentry in core */
> > return 0;
How about not doing that d_set_d_op() at all? See #d_op in vfs-2.6.git;
just set ->s_d_op to that once and be done with that. No need to reassign
it on a live dentry...
^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: [patch] cgroup fs: avoid switching ->d_op on live dentry
2010-12-21 18:25 ` Al Viro
@ 2010-12-21 18:57 ` Sedat Dilek
2010-12-22 3:11 ` Nick Piggin
2010-12-22 4:38 ` Sedat Dilek
2 siblings, 0 replies; 13+ messages in thread
From: Sedat Dilek @ 2010-12-21 18:57 UTC (permalink / raw)
To: Al Viro; +Cc: Nick Piggin, systemd-devel, linux-fsdevel, linux-next, eparis
On Tue, Dec 21, 2010 at 7:25 PM, Al Viro <viro@zeniv.linux.org.uk> wrote:
> On Tue, Dec 21, 2010 at 07:55:38PM +1100, Nick Piggin wrote:
>> On Tue, Dec 21, 2010 at 09:44:40AM +0100, Sedat Dilek wrote:
>> > Against linux-next (next-20101210) it should look like:
>>
>> Yep, I'll rebase my tree with the fix shortly.
>>
>> >
>> > $ diff -Naur cgroup-fix/cgroup-fs-avoid-switching-d_op-on-live-dentry.patch
>> > cgroup-fix/cgroup-fs-avoid-switching-d_op-on-live-dentry-v2.patch
>> > --- cgroup-fix/cgroup-fs-avoid-switching-d_op-on-live-dentry.patch
>> > 2010-12-21 09:31:38.649601964 +0100
>> > +++ cgroup-fix/cgroup-fs-avoid-switching-d_op-on-live-dentry-v2.patch
>> > 2010-12-21 09:40:21.151033232 +0100
>> > @@ -83,7 +83,7 @@
>> > inode->i_size = 0;
>> > inode->i_fop = &cgroup_file_operations;
>> > }
>> > -- dentry->d_op = &cgroup_dops;
>> > +- d_set_d_op(dentry, &cgroup_dops);
>> > d_instantiate(dentry, inode);
>> > dget(dentry); /* Extra count - pin the dentry in core */
>> > return 0;
>
> How about not doing that d_set_d_op() at all? See #d_op in vfs-2.6.git;
> just set ->s_d_op to that once and be done with that. No need to reassign
> it on a live dentry...
>
The kernel mirrors are very slow since yesterday.
Checking out and online-browsing your repo [1] is no fun.
On a very quick view I don't see a cgroup fix.
Can you please offer a revised full patch?
Thanks in advance.
Personally, I am glad to be able to use systemd, again.
- Sedat -
[1] http://git.kernel.org/?p=linux/kernel/git/viro/vfs-2.6.git;a=shortlog;h=refs/heads/d_op
^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: [patch] cgroup fs: avoid switching ->d_op on live dentry
2010-12-21 18:25 ` Al Viro
2010-12-21 18:57 ` Sedat Dilek
@ 2010-12-22 3:11 ` Nick Piggin
2010-12-22 3:31 ` Sedat Dilek
2010-12-22 4:38 ` Sedat Dilek
2 siblings, 1 reply; 13+ messages in thread
From: Nick Piggin @ 2010-12-22 3:11 UTC (permalink / raw)
To: Al Viro
Cc: Nick Piggin, sedat.dilek, systemd-devel, linux-fsdevel,
linux-next, eparis
On Wed, Dec 22, 2010 at 5:25 AM, Al Viro <viro@zeniv.linux.org.uk> wrote:
> On Tue, Dec 21, 2010 at 07:55:38PM +1100, Nick Piggin wrote:
>> On Tue, Dec 21, 2010 at 09:44:40AM +0100, Sedat Dilek wrote:
>> > Against linux-next (next-20101210) it should look like:
>>
>> Yep, I'll rebase my tree with the fix shortly.
>>
>> >
>> > $ diff -Naur cgroup-fix/cgroup-fs-avoid-switching-d_op-on-live-dentry.patch
>> > cgroup-fix/cgroup-fs-avoid-switching-d_op-on-live-dentry-v2.patch
>> > --- cgroup-fix/cgroup-fs-avoid-switching-d_op-on-live-dentry.patch
>> > 2010-12-21 09:31:38.649601964 +0100
>> > +++ cgroup-fix/cgroup-fs-avoid-switching-d_op-on-live-dentry-v2.patch
>> > 2010-12-21 09:40:21.151033232 +0100
>> > @@ -83,7 +83,7 @@
>> > inode->i_size = 0;
>> > inode->i_fop = &cgroup_file_operations;
>> > }
>> > -- dentry->d_op = &cgroup_dops;
>> > +- d_set_d_op(dentry, &cgroup_dops);
>> > d_instantiate(dentry, inode);
>> > dget(dentry); /* Extra count - pin the dentry in core */
>> > return 0;
>
> How about not doing that d_set_d_op() at all? See #d_op in vfs-2.6.git;
> just set ->s_d_op to that once and be done with that. No need to reassign
> it on a live dentry...
It shouldn't be live there after my patch, but either way it is fixed,
doesn't matter. Your s_d_op patch allows more reuse of code, so
that looks nicer.
^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: [patch] cgroup fs: avoid switching ->d_op on live dentry
2010-12-22 3:11 ` Nick Piggin
@ 2010-12-22 3:31 ` Sedat Dilek
0 siblings, 0 replies; 13+ messages in thread
From: Sedat Dilek @ 2010-12-22 3:31 UTC (permalink / raw)
To: Nick Piggin, Al Viro; +Cc: systemd-devel, linux-fsdevel, linux-next, eparis
On Wed, Dec 22, 2010 at 4:11 AM, Nick Piggin <npiggin@gmail.com> wrote:
> On Wed, Dec 22, 2010 at 5:25 AM, Al Viro <viro@zeniv.linux.org.uk> wrote:
>> On Tue, Dec 21, 2010 at 07:55:38PM +1100, Nick Piggin wrote:
>>> On Tue, Dec 21, 2010 at 09:44:40AM +0100, Sedat Dilek wrote:
>>> > Against linux-next (next-20101210) it should look like:
>>>
>>> Yep, I'll rebase my tree with the fix shortly.
>>>
>>> >
>>> > $ diff -Naur cgroup-fix/cgroup-fs-avoid-switching-d_op-on-live-dentry.patch
>>> > cgroup-fix/cgroup-fs-avoid-switching-d_op-on-live-dentry-v2.patch
>>> > --- cgroup-fix/cgroup-fs-avoid-switching-d_op-on-live-dentry.patch
>>> > 2010-12-21 09:31:38.649601964 +0100
>>> > +++ cgroup-fix/cgroup-fs-avoid-switching-d_op-on-live-dentry-v2.patch
>>> > 2010-12-21 09:40:21.151033232 +0100
>>> > @@ -83,7 +83,7 @@
>>> > inode->i_size = 0;
>>> > inode->i_fop = &cgroup_file_operations;
>>> > }
>>> > -- dentry->d_op = &cgroup_dops;
>>> > +- d_set_d_op(dentry, &cgroup_dops);
>>> > d_instantiate(dentry, inode);
>>> > dget(dentry); /* Extra count - pin the dentry in core */
>>> > return 0;
>>
>> How about not doing that d_set_d_op() at all? See #d_op in vfs-2.6.git;
>> just set ->s_d_op to that once and be done with that. No need to reassign
>> it on a live dentry...
>
> It shouldn't be live there after my patch, but either way it is fixed,
> doesn't matter. Your s_d_op patch allows more reuse of code, so
> that looks nicer.
>
Hi Nick, Hi Al,
IIRC that vfs-2.6.git#d_op is not in linux-next?
[2] uses "vfs git
git://git.kernel.org/pub/scm/linux/kernel/git/viro/vfs-2.6.git#for-next"?
Will this tree go into 2.6.38?
I tried to pull that tree into linux-next which resulted into many CONFLICTs.
As far as I have understood:
To use s_d_op for kernel/cgroup.c at least means to cherry-pick
"per-superblock default ->d_op" commit [2]?
If Al's tree is expected to be in 2.6.38, it would be good that both
vfs-related trees "vfs-2.6#d_op" and "vfs-scale-working" would be
coordinated.
Can you give details on the plans for 2.6.38 (for linux-next)?
Thanks.
- Sedat -
[1] http://git.kernel.org/?p=linux/kernel/git/next/linux-next.git;a=blob;f=Next/Trees#l84
[2] http://git.kernel.org/?p=linux/kernel/git/viro/vfs-2.6.git;a=commit;h=ee2d6af5897a21441f1ded8c3551da073cbcda87
--
To unsubscribe from this list: send the line "unsubscribe linux-fsdevel" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: [patch] cgroup fs: avoid switching ->d_op on live dentry
2010-12-21 18:25 ` Al Viro
2010-12-21 18:57 ` Sedat Dilek
2010-12-22 3:11 ` Nick Piggin
@ 2010-12-22 4:38 ` Sedat Dilek
2 siblings, 0 replies; 13+ messages in thread
From: Sedat Dilek @ 2010-12-22 4:38 UTC (permalink / raw)
To: Al Viro; +Cc: Nick Piggin, systemd-devel, linux-fsdevel, linux-next, eparis
On Tue, Dec 21, 2010 at 7:25 PM, Al Viro <viro@zeniv.linux.org.uk> wrote:
> On Tue, Dec 21, 2010 at 07:55:38PM +1100, Nick Piggin wrote:
>> On Tue, Dec 21, 2010 at 09:44:40AM +0100, Sedat Dilek wrote:
>> > Against linux-next (next-20101210) it should look like:
>>
>> Yep, I'll rebase my tree with the fix shortly.
>>
>> >
>> > $ diff -Naur cgroup-fix/cgroup-fs-avoid-switching-d_op-on-live-dentry.patch
>> > cgroup-fix/cgroup-fs-avoid-switching-d_op-on-live-dentry-v2.patch
>> > --- cgroup-fix/cgroup-fs-avoid-switching-d_op-on-live-dentry.patch
>> > 2010-12-21 09:31:38.649601964 +0100
>> > +++ cgroup-fix/cgroup-fs-avoid-switching-d_op-on-live-dentry-v2.patch
>> > 2010-12-21 09:40:21.151033232 +0100
>> > @@ -83,7 +83,7 @@
>> > inode->i_size = 0;
>> > inode->i_fop = &cgroup_file_operations;
>> > }
>> > -- dentry->d_op = &cgroup_dops;
>> > +- d_set_d_op(dentry, &cgroup_dops);
>> > d_instantiate(dentry, inode);
>> > dget(dentry); /* Extra count - pin the dentry in core */
>> > return 0;
>
> How about not doing that d_set_d_op() at all? See #d_op in vfs-2.6.git;
> just set ->s_d_op to that once and be done with that. No need to reassign
> it on a live dentry...
>
Hey, cool :-)!
Still waiting to see the content of "switch cgroup" commit in
vfs-2.6#d_op GIT from [1] (slow kernel-mirrors [2]).
Thank you Al for the quick execution!
- Sedat -
[1] http://git.kernel.org/?p=linux/kernel/git/viro/vfs-2.6.git;a=commit;h=0438db3de35bc969624794d6b891e2a178e24645
[2] https://lkml.org/lkml/2010/12/21/361
--
To unsubscribe from this list: send the line "unsubscribe linux-fsdevel" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
^ permalink raw reply [flat|nested] 13+ messages in thread
end of thread, other threads:[~2010-12-22 4:38 UTC | newest]
Thread overview: 13+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2010-12-21 8:44 [patch] cgroup fs: avoid switching ->d_op on live dentry Sedat Dilek
2010-12-21 8:55 ` Nick Piggin
2010-12-21 13:35 ` Sedat Dilek
2010-12-21 18:25 ` Al Viro
2010-12-21 18:57 ` Sedat Dilek
2010-12-22 3:11 ` Nick Piggin
2010-12-22 3:31 ` Sedat Dilek
2010-12-22 4:38 ` Sedat Dilek
2010-12-21 15:12 ` Sedat Dilek
2010-12-21 15:28 ` Sedat Dilek
2010-12-21 17:56 ` Sedat Dilek
-- strict thread matches above, loose matches on Subject: below --
2010-12-21 7:12 Nick Piggin
2010-12-21 9:04 ` Paul Menage
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).