X-Git-Url: http://ftp.safe.ca/?a=blobdiff_plain;f=kernel%2Futsname.c;h=8a82b4b8ea52cb3690e25bf039eaf32ff5c8c079;hb=92946bc72f2e74c3281b7fc12be9704d455fb3ed;hp=9d8180a0f0d815dbe051dbb6a710385d22f0b342;hpb=213dd266d48af90c1eec8688c1ff31aa34d21de2;p=safe%2Fjmp%2Flinux-2.6 diff --git a/kernel/utsname.c b/kernel/utsname.c index 9d8180a..8a82b4b 100644 --- a/kernel/utsname.c +++ b/kernel/utsname.c @@ -12,8 +12,18 @@ #include #include #include -#include #include +#include + +static struct uts_namespace *create_uts_ns(void) +{ + struct uts_namespace *uts_ns; + + uts_ns = kmalloc(sizeof(struct uts_namespace), GFP_KERNEL); + if (uts_ns) + kref_init(&uts_ns->kref); + return uts_ns; +} /* * Clone a new ns copying an original utsname, setting refcount to 1 @@ -24,12 +34,13 @@ static struct uts_namespace *clone_uts_ns(struct uts_namespace *old_ns) { struct uts_namespace *ns; - ns = kmalloc(sizeof(struct uts_namespace), GFP_KERNEL); + ns = create_uts_ns(); if (!ns) return ERR_PTR(-ENOMEM); + down_read(&uts_sem); memcpy(&ns->name, &old_ns->name, sizeof(ns->name)); - kref_init(&ns->kref); + up_read(&uts_sem); return ns; }