{
        struct acm *acm = tty->driver_data;
        unsigned int closing_wait, close_delay;
+       unsigned int old_closing_wait, old_close_delay;
        int retval = 0;
 
        close_delay = msecs_to_jiffies(ss->close_delay * 10);
                        ASYNC_CLOSING_WAIT_NONE :
                        msecs_to_jiffies(ss->closing_wait * 10);
 
+       /* we must redo the rounding here, so that the values match */
+       old_close_delay = jiffies_to_msecs(acm->port.close_delay) / 10;
+       old_closing_wait = acm->port.closing_wait == ASYNC_CLOSING_WAIT_NONE ?
+                               ASYNC_CLOSING_WAIT_NONE :
+                               jiffies_to_msecs(acm->port.closing_wait) / 10;
+
        mutex_lock(&acm->port.mutex);
 
-       if (!capable(CAP_SYS_ADMIN)) {
-               if ((close_delay != acm->port.close_delay) ||
-                   (closing_wait != acm->port.closing_wait))
+       if ((ss->close_delay != old_close_delay) ||
+            (ss->closing_wait != old_closing_wait)) {
+               if (!capable(CAP_SYS_ADMIN))
                        retval = -EPERM;
-               else
-                       retval = -EOPNOTSUPP;
-       } else {
-               acm->port.close_delay  = close_delay;
-               acm->port.closing_wait = closing_wait;
-       }
+               else {
+                       acm->port.close_delay  = close_delay;
+                       acm->port.closing_wait = closing_wait;
+               }
+       } else
+               retval = -EOPNOTSUPP;
 
        mutex_unlock(&acm->port.mutex);
        return retval;