}
 }
 
-static struct snd_gf1_mem_block *snd_gf1_mem_xalloc(struct snd_gf1_mem * alloc,
-                                              struct snd_gf1_mem_block * block)
+static struct snd_gf1_mem_block *
+snd_gf1_mem_xalloc(struct snd_gf1_mem *alloc, struct snd_gf1_mem_block *block,
+                  const char *name)
 {
        struct snd_gf1_mem_block *pblock, *nblock;
 
        if (nblock == NULL)
                return NULL;
        *nblock = *block;
+       nblock->name = kstrdup(name, GFP_KERNEL);
+       if (!nblock->name) {
+               kfree(nblock);
+               return NULL;
+       }
+
        pblock = alloc->first;
        while (pblock) {
                if (pblock->ptr > nblock->ptr) {
        if (share_id != NULL)
                memcpy(&block.share_id, share_id, sizeof(block.share_id));
        block.owner = owner;
-       block.name = kstrdup(name, GFP_KERNEL);
-       if (block.name == NULL) {
-               snd_gf1_mem_lock(alloc, 1);
-               return NULL;
-       }
-       nblock = snd_gf1_mem_xalloc(alloc, &block);
+       nblock = snd_gf1_mem_xalloc(alloc, &block, name);
        snd_gf1_mem_lock(alloc, 1);
        return nblock;
 }
        if (gus->gf1.enh_mode) {
                block.ptr = 0;
                block.size = 1024;
-               block.name = kstrdup("InterWave LFOs", GFP_KERNEL);
-               if (block.name == NULL || snd_gf1_mem_xalloc(alloc, &block) == NULL)
+               if (!snd_gf1_mem_xalloc(alloc, &block, "InterWave LFOs"))
                        return -ENOMEM;
        }
        block.ptr = gus->gf1.default_voice_address;
        block.size = 4;
-       block.name = kstrdup("Voice default (NULL's)", GFP_KERNEL);
-       if (block.name == NULL || snd_gf1_mem_xalloc(alloc, &block) == NULL)
+       if (!snd_gf1_mem_xalloc(alloc, &block, "Voice default (NULL's)"))
                return -ENOMEM;
 #ifdef CONFIG_SND_DEBUG
        snd_card_ro_proc_new(gus->card, "gusmem", gus, snd_gf1_mem_info_read);