{
        struct property **next, *oldprop;
        unsigned long flags;
-       int rc, found = 0;
+       int rc = 0;
 
        rc = of_property_notify(OF_RECONFIG_UPDATE_PROPERTY, np, newprop);
        if (rc)
        if (!newprop->name)
                return -EINVAL;
 
-       oldprop = of_find_property(np, newprop->name, NULL);
-       if (!oldprop)
-               return of_add_property(np, newprop);
-
        raw_spin_lock_irqsave(&devtree_lock, flags);
-       next = &np->properties;
-       while (*next) {
-               if (*next == oldprop) {
-                       /* found the node */
-                       newprop->next = oldprop->next;
-                       *next = newprop;
-                       oldprop->next = np->deadprops;
-                       np->deadprops = oldprop;
-                       found = 1;
-                       break;
-               }
-               next = &(*next)->next;
+       oldprop = __of_find_property(np, newprop->name, NULL);
+       if (!oldprop) {
+               /* add the node */
+               rc = __of_add_property(np, newprop);
+       } else {
+               /* replace the node */
+               next = &oldprop;
+               newprop->next = oldprop->next;
+               *next = newprop;
+               oldprop->next = np->deadprops;
+               np->deadprops = oldprop;
        }
        raw_spin_unlock_irqrestore(&devtree_lock, flags);
 
-       if (!found)
-               return -ENODEV;
-
 #ifdef CONFIG_PROC_DEVICETREE
        /* try to add to proc as well if it was initialized */
-       if (np->pde)
+       if (!rc && np->pde)
                proc_device_tree_update_prop(np->pde, newprop, oldprop);
 #endif /* CONFIG_PROC_DEVICETREE */
 
-       return 0;
+       return rc;
 }
 
 #if defined(CONFIG_OF_DYNAMIC)