OSDN Git Service

kvm_main: Use common error handling code in kvm_dev_ioctl_create_vm()
authorMarkus Elfring <elfring@users.sourceforge.net>
Tue, 21 Nov 2017 12:40:17 +0000 (13:40 +0100)
committerPaolo Bonzini <pbonzini@redhat.com>
Thu, 14 Dec 2017 08:26:44 +0000 (09:26 +0100)
Add a jump target so that a bit of exception handling can be better reused
at the end of this function.

This issue was detected by using the Coccinelle software.

Signed-off-by: Markus Elfring <elfring@users.sourceforge.net>
Signed-off-by: Radim Krčmář <rkrcmar@redhat.com>
virt/kvm/kvm_main.c

index 210bf82..bc092e3 100644 (file)
@@ -3186,21 +3186,18 @@ static int kvm_dev_ioctl_create_vm(unsigned long type)
                return PTR_ERR(kvm);
 #ifdef CONFIG_KVM_MMIO
        r = kvm_coalesced_mmio_init(kvm);
-       if (r < 0) {
-               kvm_put_kvm(kvm);
-               return r;
-       }
+       if (r < 0)
+               goto put_kvm;
 #endif
        r = get_unused_fd_flags(O_CLOEXEC);
-       if (r < 0) {
-               kvm_put_kvm(kvm);
-               return r;
-       }
+       if (r < 0)
+               goto put_kvm;
+
        file = anon_inode_getfile("kvm-vm", &kvm_vm_fops, kvm, O_RDWR);
        if (IS_ERR(file)) {
                put_unused_fd(r);
-               kvm_put_kvm(kvm);
-               return PTR_ERR(file);
+               r = PTR_ERR(file);
+               goto put_kvm;
        }
 
        /*
@@ -3218,6 +3215,10 @@ static int kvm_dev_ioctl_create_vm(unsigned long type)
 
        fd_install(r, file);
        return r;
+
+put_kvm:
+       kvm_put_kvm(kvm);
+       return r;
 }
 
 static long kvm_dev_ioctl(struct file *filp,