]> git.kernelconcepts.de Git - karo-tx-linux.git/blobdiff - include/net/sock.h
flowcache: make flow_key_size() return "unsigned int"
[karo-tx-linux.git] / include / net / sock.h
index 03252d53975de7ad0da66d35802738830b0e3367..66349e49d468646ce724485bb8e74952825f0d6c 100644 (file)
@@ -1783,11 +1783,8 @@ __sk_dst_set(struct sock *sk, struct dst_entry *dst)
 
        sk_tx_queue_clear(sk);
        sk->sk_dst_pending_confirm = 0;
-       /*
-        * This can be called while sk is owned by the caller only,
-        * with no state that can be checked in a rcu_dereference_check() cond
-        */
-       old_dst = rcu_dereference_raw(sk->sk_dst_cache);
+       old_dst = rcu_dereference_protected(sk->sk_dst_cache,
+                                           lockdep_sock_is_held(sk));
        rcu_assign_pointer(sk->sk_dst_cache, dst);
        dst_release(old_dst);
 }
@@ -2242,6 +2239,7 @@ sock_recv_timestamp(struct msghdr *msg, struct sock *sk, struct sk_buff *skb)
 void __sock_recv_ts_and_drops(struct msghdr *msg, struct sock *sk,
                              struct sk_buff *skb);
 
+#define SK_DEFAULT_STAMP (-1L * NSEC_PER_SEC)
 static inline void sock_recv_ts_and_drops(struct msghdr *msg, struct sock *sk,
                                          struct sk_buff *skb)
 {
@@ -2252,8 +2250,10 @@ static inline void sock_recv_ts_and_drops(struct msghdr *msg, struct sock *sk,
 
        if (sk->sk_flags & FLAGS_TS_OR_DROPS || sk->sk_tsflags & TSFLAGS_ANY)
                __sock_recv_ts_and_drops(msg, sk, skb);
-       else
+       else if (unlikely(sock_flag(sk, SOCK_TIMESTAMP)))
                sk->sk_stamp = skb->tstamp;
+       else if (unlikely(sk->sk_stamp == SK_DEFAULT_STAMP))
+               sk->sk_stamp = 0;
 }
 
 void __sock_tx_timestamp(__u16 tsflags, __u8 *tx_flags);
@@ -2365,6 +2365,8 @@ bool sk_ns_capable(const struct sock *sk,
 bool sk_capable(const struct sock *sk, int cap);
 bool sk_net_capable(const struct sock *sk, int cap);
 
+void sk_get_meminfo(const struct sock *sk, u32 *meminfo);
+
 extern __u32 sysctl_wmem_max;
 extern __u32 sysctl_rmem_max;