}
 
 /*
- * Set the fan speed (off, low, high). Returns the new fan status.
+ * Set the fan speed (off, low, high, ...).
  */
 static int i8k_set_fan(const struct dell_smm_data *data, int fan, int speed)
 {
        speed = (speed < 0) ? 0 : ((speed > data->i8k_fan_max) ? data->i8k_fan_max : speed);
        regs.ebx = (fan & 0xff) | (speed << 8);
 
-       return i8k_smm(®s) ? : i8k_get_fan_status(data, fan);
+       return i8k_smm(®s);
 }
 
 static int __init i8k_get_temp_type(int sensor)
 i8k_ioctl_unlocked(struct file *fp, struct dell_smm_data *data, unsigned int cmd, unsigned long arg)
 {
        int val = 0;
-       int speed;
+       int speed, err;
        unsigned char buff[16];
        int __user *argp = (int __user *)arg;
 
                if (copy_from_user(&speed, argp + 1, sizeof(int)))
                        return -EFAULT;
 
-               val = i8k_set_fan(data, val, speed);
+               err = i8k_set_fan(data, val, speed);
+               if (err < 0)
+                       return err;
+
+               val = i8k_get_fan_status(data, val);
                break;
 
        default: