From f2630f20a689a72cf48e5df73400f1cfecea019e Mon Sep 17 00:00:00 2001 From: Theodore Ts'o Date: Sat, 20 Jun 2009 23:34:44 -0400 Subject: [PATCH] --- yaml --- r: 155431 b: refs/heads/master c: b574480507460b8e31b8d38dd4642219fc3b9a10 h: refs/heads/master i: 155429: 6603a4633e334c7a064c5f7ad349549308e21f85 155427: ea9e2be54d11300e96057f85111237677caf7eff 155423: 12773e2bf4ff00a6008b3e030e26003655e7dc47 v: v3 --- [refs] | 2 +- trunk/fs/jbd2/journal.c | 11 ++++++----- 2 files changed, 7 insertions(+), 6 deletions(-) diff --git a/[refs] b/[refs] index 0360128ddebf..239d36ce5521 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: 627ad9fd0733f0a31a266ff98a4a933eee710f0b +refs/heads/master: b574480507460b8e31b8d38dd4642219fc3b9a10 diff --git a/trunk/fs/jbd2/journal.c b/trunk/fs/jbd2/journal.c index 18bfd5dab642..7b545c3b3942 100644 --- a/trunk/fs/jbd2/journal.c +++ b/trunk/fs/jbd2/journal.c @@ -2410,6 +2410,7 @@ const char *jbd2_dev_to_name(dev_t device) int i = hash_32(device, CACHE_SIZE_BITS); char *ret; struct block_device *bd; + static struct devname_cache *new_dev; rcu_read_lock(); if (devcache[i] && devcache[i]->device == device) { @@ -2419,20 +2420,20 @@ const char *jbd2_dev_to_name(dev_t device) } rcu_read_unlock(); + new_dev = kmalloc(sizeof(struct devname_cache), GFP_KERNEL); + if (!new_dev) + return "NODEV-ALLOCFAILURE"; /* Something non-NULL */ spin_lock(&devname_cache_lock); if (devcache[i]) { if (devcache[i]->device == device) { + kfree(new_dev); ret = devcache[i]->devname; spin_unlock(&devname_cache_lock); return ret; } call_rcu(&devcache[i]->rcu, free_devcache); } - devcache[i] = kmalloc(sizeof(struct devname_cache), GFP_KERNEL); - if (!devcache[i]) { - spin_unlock(&devname_cache_lock); - return "NODEV-ALLOCFAILURE"; /* Something non-NULL */ - } + devcache[i] = new_dev; devcache[i]->device = device; bd = bdget(device); if (bd) {