rcu_read_lock();
                hlist_for_each_entry_rcu(ifa, &inet_addr_lst[i], hash) {
                        unsigned long age, tstamp;
+                       u32 preferred_lft;
                        u32 valid_lft;
 
                        if (ifa->ifa_flags & IFA_F_PERMANENT)
                                continue;
 
+                       preferred_lft = READ_ONCE(ifa->ifa_preferred_lft);
                        valid_lft = READ_ONCE(ifa->ifa_valid_lft);
                        tstamp = READ_ONCE(ifa->ifa_tstamp);
                        /* We try to batch several events at once. */
                        if (valid_lft != INFINITY_LIFE_TIME &&
                            age >= valid_lft) {
                                change_needed = true;
-                       } else if (ifa->ifa_preferred_lft ==
+                       } else if (preferred_lft ==
                                   INFINITY_LIFE_TIME) {
                                continue;
-                       } else if (age >= ifa->ifa_preferred_lft) {
+                       } else if (age >= preferred_lft) {
                                if (time_before(tstamp + valid_lft * HZ, next))
                                        next = tstamp + valid_lft * HZ;
 
                                if (!(ifa->ifa_flags & IFA_F_DEPRECATED))
                                        change_needed = true;
-                       } else if (time_before(tstamp +
-                                              ifa->ifa_preferred_lft * HZ,
+                       } else if (time_before(tstamp + preferred_lft * HZ,
                                               next)) {
-                               next = tstamp +
-                                      ifa->ifa_preferred_lft * HZ;
+                               next = tstamp + preferred_lft * HZ;
                        }
                }
                rcu_read_unlock();
        if (addrconf_finite_timeout(timeout)) {
                if (timeout == 0)
                        ifa->ifa_flags |= IFA_F_DEPRECATED;
-               ifa->ifa_preferred_lft = timeout;
+               WRITE_ONCE(ifa->ifa_preferred_lft, timeout);
        }
        WRITE_ONCE(ifa->ifa_tstamp, jiffies);
        if (!ifa->ifa_cstamp)
 
        tstamp = READ_ONCE(ifa->ifa_tstamp);
        if (!(ifm->ifa_flags & IFA_F_PERMANENT)) {
-               preferred = ifa->ifa_preferred_lft;
+               preferred = READ_ONCE(ifa->ifa_preferred_lft);
                valid = READ_ONCE(ifa->ifa_valid_lft);
                if (preferred != INFINITY_LIFE_TIME) {
                        long tval = (jiffies - tstamp) / HZ;