diff options
| author | Greg Kroah-Hartman <gregkh@linuxfoundation.org> | 2015-09-28 20:14:46 -0400 |
|---|---|---|
| committer | Greg Kroah-Hartman <gregkh@linuxfoundation.org> | 2015-09-28 20:14:46 -0400 |
| commit | 60f593977b28fd3acbe4c3ca5eb6acf8ddf34d9e (patch) | |
| tree | e879802c040d2748a25f2f95a5254dca2f82bcc8 /include | |
| parent | ff8e2c560eca32043ed097099debac488a4bd99f (diff) | |
| parent | 9ffecb10283508260936b96022d4ee43a7798b4c (diff) | |
Merge 4.3-rc3 into usb-next
We want the USB fixes in here as well.
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Diffstat (limited to 'include')
| -rw-r--r-- | include/linux/backing-dev.h | 11 | ||||
| -rw-r--r-- | include/linux/cgroup-defs.h | 27 | ||||
| -rw-r--r-- | include/linux/init_task.h | 8 | ||||
| -rw-r--r-- | include/linux/netdevice.h | 1 | ||||
| -rw-r--r-- | include/linux/phy.h | 6 | ||||
| -rw-r--r-- | include/linux/sched.h | 12 | ||||
| -rw-r--r-- | include/linux/security.h | 2 | ||||
| -rw-r--r-- | include/linux/skbuff.h | 9 | ||||
| -rw-r--r-- | include/linux/spi/spi.h | 2 | ||||
| -rw-r--r-- | include/linux/sunrpc/xprtsock.h | 3 | ||||
| -rw-r--r-- | include/linux/thermal.h | 8 | ||||
| -rw-r--r-- | include/linux/wait.h | 5 | ||||
| -rw-r--r-- | include/net/flow.h | 1 | ||||
| -rw-r--r-- | include/net/inet_timewait_sock.h | 14 | ||||
| -rw-r--r-- | include/net/ip6_fib.h | 3 | ||||
| -rw-r--r-- | include/net/ip6_tunnel.h | 17 | ||||
| -rw-r--r-- | include/net/ip_fib.h | 30 | ||||
| -rw-r--r-- | include/net/ip_tunnels.h | 2 | ||||
| -rw-r--r-- | include/net/route.h | 2 | ||||
| -rw-r--r-- | include/target/target_core_base.h | 1 | ||||
| -rw-r--r-- | include/uapi/asm-generic/unistd.h | 8 | ||||
| -rw-r--r-- | include/uapi/linux/lwtunnel.h | 4 |
22 files changed, 113 insertions, 63 deletions
diff --git a/include/linux/backing-dev.h b/include/linux/backing-dev.h index 5a5d79ee256f..d5eb4ad1c534 100644 --- a/include/linux/backing-dev.h +++ b/include/linux/backing-dev.h | |||
| @@ -13,6 +13,7 @@ | |||
| 13 | #include <linux/sched.h> | 13 | #include <linux/sched.h> |
| 14 | #include <linux/blkdev.h> | 14 | #include <linux/blkdev.h> |
| 15 | #include <linux/writeback.h> | 15 | #include <linux/writeback.h> |
| 16 | #include <linux/memcontrol.h> | ||
| 16 | #include <linux/blk-cgroup.h> | 17 | #include <linux/blk-cgroup.h> |
| 17 | #include <linux/backing-dev-defs.h> | 18 | #include <linux/backing-dev-defs.h> |
| 18 | #include <linux/slab.h> | 19 | #include <linux/slab.h> |
| @@ -252,13 +253,19 @@ int inode_congested(struct inode *inode, int cong_bits); | |||
| 252 | * @inode: inode of interest | 253 | * @inode: inode of interest |
| 253 | * | 254 | * |
| 254 | * cgroup writeback requires support from both the bdi and filesystem. | 255 | * cgroup writeback requires support from both the bdi and filesystem. |
| 255 | * Test whether @inode has both. | 256 | * Also, both memcg and iocg have to be on the default hierarchy. Test |
| 257 | * whether all conditions are met. | ||
| 258 | * | ||
| 259 | * Note that the test result may change dynamically on the same inode | ||
| 260 | * depending on how memcg and iocg are configured. | ||
| 256 | */ | 261 | */ |
| 257 | static inline bool inode_cgwb_enabled(struct inode *inode) | 262 | static inline bool inode_cgwb_enabled(struct inode *inode) |
| 258 | { | 263 | { |
| 259 | struct backing_dev_info *bdi = inode_to_bdi(inode); | 264 | struct backing_dev_info *bdi = inode_to_bdi(inode); |
| 260 | 265 | ||
| 261 | return bdi_cap_account_dirty(bdi) && | 266 | return cgroup_on_dfl(mem_cgroup_root_css->cgroup) && |
| 267 | cgroup_on_dfl(blkcg_root_css->cgroup) && | ||
| 268 | bdi_cap_account_dirty(bdi) && | ||
| 262 | (bdi->capabilities & BDI_CAP_CGROUP_WRITEBACK) && | 269 | (bdi->capabilities & BDI_CAP_CGROUP_WRITEBACK) && |
| 263 | (inode->i_sb->s_iflags & SB_I_CGROUPWB); | 270 | (inode->i_sb->s_iflags & SB_I_CGROUPWB); |
| 264 | } | 271 | } |
diff --git a/include/linux/cgroup-defs.h b/include/linux/cgroup-defs.h index 4d8fcf2187dc..8492721b39be 100644 --- a/include/linux/cgroup-defs.h +++ b/include/linux/cgroup-defs.h | |||
| @@ -473,31 +473,8 @@ struct cgroup_subsys { | |||
| 473 | unsigned int depends_on; | 473 | unsigned int depends_on; |
| 474 | }; | 474 | }; |
| 475 | 475 | ||
| 476 | extern struct percpu_rw_semaphore cgroup_threadgroup_rwsem; | 476 | void cgroup_threadgroup_change_begin(struct task_struct *tsk); |
| 477 | 477 | void cgroup_threadgroup_change_end(struct task_struct *tsk); | |
| 478 | /** | ||
| 479 | * cgroup_threadgroup_change_begin - threadgroup exclusion for cgroups | ||
| 480 | * @tsk: target task | ||
| 481 | * | ||
| 482 | * Called from threadgroup_change_begin() and allows cgroup operations to | ||
| 483 | * synchronize against threadgroup changes using a percpu_rw_semaphore. | ||
| 484 | */ | ||
| 485 | static inline void cgroup_threadgroup_change_begin(struct task_struct *tsk) | ||
| 486 | { | ||
| 487 | percpu_down_read(&cgroup_threadgroup_rwsem); | ||
| 488 | } | ||
| 489 | |||
| 490 | /** | ||
| 491 | * cgroup_threadgroup_change_end - threadgroup exclusion for cgroups | ||
| 492 | * @tsk: target task | ||
| 493 | * | ||
| 494 | * Called from threadgroup_change_end(). Counterpart of | ||
| 495 | * cgroup_threadcgroup_change_begin(). | ||
| 496 | */ | ||
| 497 | static inline void cgroup_threadgroup_change_end(struct task_struct *tsk) | ||
| 498 | { | ||
| 499 | percpu_up_read(&cgroup_threadgroup_rwsem); | ||
| 500 | } | ||
| 501 | 478 | ||
| 502 | #else /* CONFIG_CGROUPS */ | 479 | #else /* CONFIG_CGROUPS */ |
| 503 | 480 | ||
diff --git a/include/linux/init_task.h b/include/linux/init_task.h index d0b380ee7d67..e38681f4912d 100644 --- a/include/linux/init_task.h +++ b/include/linux/init_task.h | |||
| @@ -25,6 +25,13 @@ | |||
| 25 | extern struct files_struct init_files; | 25 | extern struct files_struct init_files; |
| 26 | extern struct fs_struct init_fs; | 26 | extern struct fs_struct init_fs; |
| 27 | 27 | ||
| 28 | #ifdef CONFIG_CGROUPS | ||
| 29 | #define INIT_GROUP_RWSEM(sig) \ | ||
| 30 | .group_rwsem = __RWSEM_INITIALIZER(sig.group_rwsem), | ||
| 31 | #else | ||
| 32 | #define INIT_GROUP_RWSEM(sig) | ||
| 33 | #endif | ||
| 34 | |||
| 28 | #ifdef CONFIG_CPUSETS | 35 | #ifdef CONFIG_CPUSETS |
| 29 | #define INIT_CPUSET_SEQ(tsk) \ | 36 | #define INIT_CPUSET_SEQ(tsk) \ |
| 30 | .mems_allowed_seq = SEQCNT_ZERO(tsk.mems_allowed_seq), | 37 | .mems_allowed_seq = SEQCNT_ZERO(tsk.mems_allowed_seq), |
| @@ -57,6 +64,7 @@ extern struct fs_struct init_fs; | |||
| 57 | INIT_PREV_CPUTIME(sig) \ | 64 | INIT_PREV_CPUTIME(sig) \ |
| 58 | .cred_guard_mutex = \ | 65 | .cred_guard_mutex = \ |
| 59 | __MUTEX_INITIALIZER(sig.cred_guard_mutex), \ | 66 | __MUTEX_INITIALIZER(sig.cred_guard_mutex), \ |
| 67 | INIT_GROUP_RWSEM(sig) \ | ||
| 60 | } | 68 | } |
| 61 | 69 | ||
| 62 | extern struct nsproxy init_nsproxy; | 70 | extern struct nsproxy init_nsproxy; |
diff --git a/include/linux/netdevice.h b/include/linux/netdevice.h index 88a00694eda5..2d15e3831440 100644 --- a/include/linux/netdevice.h +++ b/include/linux/netdevice.h | |||
| @@ -507,6 +507,7 @@ static inline void napi_enable(struct napi_struct *n) | |||
| 507 | BUG_ON(!test_bit(NAPI_STATE_SCHED, &n->state)); | 507 | BUG_ON(!test_bit(NAPI_STATE_SCHED, &n->state)); |
| 508 | smp_mb__before_atomic(); | 508 | smp_mb__before_atomic(); |
| 509 | clear_bit(NAPI_STATE_SCHED, &n->state); | 509 | clear_bit(NAPI_STATE_SCHED, &n->state); |
| 510 | clear_bit(NAPI_STATE_NPSVC, &n->state); | ||
| 510 | } | 511 | } |
| 511 | 512 | ||
| 512 | #ifdef CONFIG_SMP | 513 | #ifdef CONFIG_SMP |
diff --git a/include/linux/phy.h b/include/linux/phy.h index 962387a192f1..4a4e3a092337 100644 --- a/include/linux/phy.h +++ b/include/linux/phy.h | |||
| @@ -19,6 +19,7 @@ | |||
| 19 | #include <linux/spinlock.h> | 19 | #include <linux/spinlock.h> |
| 20 | #include <linux/ethtool.h> | 20 | #include <linux/ethtool.h> |
| 21 | #include <linux/mii.h> | 21 | #include <linux/mii.h> |
| 22 | #include <linux/module.h> | ||
| 22 | #include <linux/timer.h> | 23 | #include <linux/timer.h> |
| 23 | #include <linux/workqueue.h> | 24 | #include <linux/workqueue.h> |
| 24 | #include <linux/mod_devicetable.h> | 25 | #include <linux/mod_devicetable.h> |
| @@ -153,6 +154,7 @@ struct sk_buff; | |||
| 153 | * PHYs should register using this structure | 154 | * PHYs should register using this structure |
| 154 | */ | 155 | */ |
| 155 | struct mii_bus { | 156 | struct mii_bus { |
| 157 | struct module *owner; | ||
| 156 | const char *name; | 158 | const char *name; |
| 157 | char id[MII_BUS_ID_SIZE]; | 159 | char id[MII_BUS_ID_SIZE]; |
| 158 | void *priv; | 160 | void *priv; |
| @@ -198,7 +200,8 @@ static inline struct mii_bus *mdiobus_alloc(void) | |||
| 198 | return mdiobus_alloc_size(0); | 200 | return mdiobus_alloc_size(0); |
| 199 | } | 201 | } |
| 200 | 202 | ||
| 201 | int mdiobus_register(struct mii_bus *bus); | 203 | int __mdiobus_register(struct mii_bus *bus, struct module *owner); |
| 204 | #define mdiobus_register(bus) __mdiobus_register(bus, THIS_MODULE) | ||
| 202 | void mdiobus_unregister(struct mii_bus *bus); | 205 | void mdiobus_unregister(struct mii_bus *bus); |
| 203 | void mdiobus_free(struct mii_bus *bus); | 206 | void mdiobus_free(struct mii_bus *bus); |
| 204 | struct mii_bus *devm_mdiobus_alloc_size(struct device *dev, int sizeof_priv); | 207 | struct mii_bus *devm_mdiobus_alloc_size(struct device *dev, int sizeof_priv); |
| @@ -742,6 +745,7 @@ struct phy_device *phy_device_create(struct mii_bus *bus, int addr, int phy_id, | |||
| 742 | struct phy_c45_device_ids *c45_ids); | 745 | struct phy_c45_device_ids *c45_ids); |
| 743 | struct phy_device *get_phy_device(struct mii_bus *bus, int addr, bool is_c45); | 746 | struct phy_device *get_phy_device(struct mii_bus *bus, int addr, bool is_c45); |
| 744 | int phy_device_register(struct phy_device *phy); | 747 | int phy_device_register(struct phy_device *phy); |
| 748 | void phy_device_remove(struct phy_device *phydev); | ||
| 745 | int phy_init_hw(struct phy_device *phydev); | 749 | int phy_init_hw(struct phy_device *phydev); |
| 746 | int phy_suspend(struct phy_device *phydev); | 750 | int phy_suspend(struct phy_device *phydev); |
| 747 | int phy_resume(struct phy_device *phydev); | 751 | int phy_resume(struct phy_device *phydev); |
diff --git a/include/linux/sched.h b/include/linux/sched.h index a4ab9daa387c..b7b9501b41af 100644 --- a/include/linux/sched.h +++ b/include/linux/sched.h | |||
| @@ -762,6 +762,18 @@ struct signal_struct { | |||
| 762 | unsigned audit_tty_log_passwd; | 762 | unsigned audit_tty_log_passwd; |
| 763 | struct tty_audit_buf *tty_audit_buf; | 763 | struct tty_audit_buf *tty_audit_buf; |
| 764 | #endif | 764 | #endif |
| 765 | #ifdef CONFIG_CGROUPS | ||
| 766 | /* | ||
| 767 | * group_rwsem prevents new tasks from entering the threadgroup and | ||
| 768 | * member tasks from exiting,a more specifically, setting of | ||
| 769 | * PF_EXITING. fork and exit paths are protected with this rwsem | ||
| 770 | * using threadgroup_change_begin/end(). Users which require | ||
| 771 | * threadgroup to remain stable should use threadgroup_[un]lock() | ||
| 772 | * which also takes care of exec path. Currently, cgroup is the | ||
| 773 | * only user. | ||
| 774 | */ | ||
| 775 | struct rw_semaphore group_rwsem; | ||
| 776 | #endif | ||
| 765 | 777 | ||
| 766 | oom_flags_t oom_flags; | 778 | oom_flags_t oom_flags; |
| 767 | short oom_score_adj; /* OOM kill score adjustment */ | 779 | short oom_score_adj; /* OOM kill score adjustment */ |
diff --git a/include/linux/security.h b/include/linux/security.h index 79d85ddf8093..2f4c1f7aa7db 100644 --- a/include/linux/security.h +++ b/include/linux/security.h | |||
| @@ -946,7 +946,7 @@ static inline int security_task_prctl(int option, unsigned long arg2, | |||
| 946 | unsigned long arg4, | 946 | unsigned long arg4, |
| 947 | unsigned long arg5) | 947 | unsigned long arg5) |
| 948 | { | 948 | { |
| 949 | return cap_task_prctl(option, arg2, arg3, arg3, arg5); | 949 | return cap_task_prctl(option, arg2, arg3, arg4, arg5); |
| 950 | } | 950 | } |
| 951 | 951 | ||
| 952 | static inline void security_task_to_inode(struct task_struct *p, struct inode *inode) | 952 | static inline void security_task_to_inode(struct task_struct *p, struct inode *inode) |
diff --git a/include/linux/skbuff.h b/include/linux/skbuff.h index 2738d355cdf9..2b0a30a6e31c 100644 --- a/include/linux/skbuff.h +++ b/include/linux/skbuff.h | |||
| @@ -179,6 +179,9 @@ struct nf_bridge_info { | |||
| 179 | u8 bridged_dnat:1; | 179 | u8 bridged_dnat:1; |
| 180 | __u16 frag_max_size; | 180 | __u16 frag_max_size; |
| 181 | struct net_device *physindev; | 181 | struct net_device *physindev; |
| 182 | |||
| 183 | /* always valid & non-NULL from FORWARD on, for physdev match */ | ||
| 184 | struct net_device *physoutdev; | ||
| 182 | union { | 185 | union { |
| 183 | /* prerouting: detect dnat in orig/reply direction */ | 186 | /* prerouting: detect dnat in orig/reply direction */ |
| 184 | __be32 ipv4_daddr; | 187 | __be32 ipv4_daddr; |
| @@ -189,9 +192,6 @@ struct nf_bridge_info { | |||
| 189 | * skb is out in neigh layer. | 192 | * skb is out in neigh layer. |
| 190 | */ | 193 | */ |
| 191 | char neigh_header[8]; | 194 | char neigh_header[8]; |
| 192 | |||
| 193 | /* always valid & non-NULL from FORWARD on, for physdev match */ | ||
| 194 | struct net_device *physoutdev; | ||
| 195 | }; | 195 | }; |
| 196 | }; | 196 | }; |
| 197 | #endif | 197 | #endif |
| @@ -2707,6 +2707,9 @@ static inline void skb_postpull_rcsum(struct sk_buff *skb, | |||
| 2707 | { | 2707 | { |
| 2708 | if (skb->ip_summed == CHECKSUM_COMPLETE) | 2708 | if (skb->ip_summed == CHECKSUM_COMPLETE) |
| 2709 | skb->csum = csum_sub(skb->csum, csum_partial(start, len, 0)); | 2709 | skb->csum = csum_sub(skb->csum, csum_partial(start, len, 0)); |
| 2710 | else if (skb->ip_summed == CHECKSUM_PARTIAL && | ||
| 2711 | skb_checksum_start_offset(skb) <= len) | ||
| 2712 | skb->ip_summed = CHECKSUM_NONE; | ||
| 2710 | } | 2713 | } |
| 2711 | 2714 | ||
| 2712 | unsigned char *skb_pull_rcsum(struct sk_buff *skb, unsigned int len); | 2715 | unsigned char *skb_pull_rcsum(struct sk_buff *skb, unsigned int len); |
diff --git a/include/linux/spi/spi.h b/include/linux/spi/spi.h index 269e8afd3e2a..6b00f18f5e6b 100644 --- a/include/linux/spi/spi.h +++ b/include/linux/spi/spi.h | |||
| @@ -34,7 +34,7 @@ extern struct bus_type spi_bus_type; | |||
| 34 | 34 | ||
| 35 | /** | 35 | /** |
| 36 | * struct spi_statistics - statistics for spi transfers | 36 | * struct spi_statistics - statistics for spi transfers |
| 37 | * @clock: lock protecting this structure | 37 | * @lock: lock protecting this structure |
| 38 | * | 38 | * |
| 39 | * @messages: number of spi-messages handled | 39 | * @messages: number of spi-messages handled |
| 40 | * @transfers: number of spi_transfers handled | 40 | * @transfers: number of spi_transfers handled |
diff --git a/include/linux/sunrpc/xprtsock.h b/include/linux/sunrpc/xprtsock.h index 7591788e9fbf..357e44c1a46b 100644 --- a/include/linux/sunrpc/xprtsock.h +++ b/include/linux/sunrpc/xprtsock.h | |||
| @@ -42,6 +42,7 @@ struct sock_xprt { | |||
| 42 | /* | 42 | /* |
| 43 | * Connection of transports | 43 | * Connection of transports |
| 44 | */ | 44 | */ |
| 45 | unsigned long sock_state; | ||
| 45 | struct delayed_work connect_worker; | 46 | struct delayed_work connect_worker; |
| 46 | struct sockaddr_storage srcaddr; | 47 | struct sockaddr_storage srcaddr; |
| 47 | unsigned short srcport; | 48 | unsigned short srcport; |
| @@ -76,6 +77,8 @@ struct sock_xprt { | |||
| 76 | */ | 77 | */ |
| 77 | #define TCP_RPC_REPLY (1UL << 6) | 78 | #define TCP_RPC_REPLY (1UL << 6) |
| 78 | 79 | ||
| 80 | #define XPRT_SOCK_CONNECTING 1U | ||
| 81 | |||
| 79 | #endif /* __KERNEL__ */ | 82 | #endif /* __KERNEL__ */ |
| 80 | 83 | ||
| 81 | #endif /* _LINUX_SUNRPC_XPRTSOCK_H */ | 84 | #endif /* _LINUX_SUNRPC_XPRTSOCK_H */ |
diff --git a/include/linux/thermal.h b/include/linux/thermal.h index 17292fee8686..157d366e761b 100644 --- a/include/linux/thermal.h +++ b/include/linux/thermal.h | |||
| @@ -360,7 +360,7 @@ static inline struct thermal_zone_device * | |||
| 360 | thermal_zone_of_sensor_register(struct device *dev, int id, void *data, | 360 | thermal_zone_of_sensor_register(struct device *dev, int id, void *data, |
| 361 | const struct thermal_zone_of_device_ops *ops) | 361 | const struct thermal_zone_of_device_ops *ops) |
| 362 | { | 362 | { |
| 363 | return NULL; | 363 | return ERR_PTR(-ENODEV); |
| 364 | } | 364 | } |
| 365 | 365 | ||
| 366 | static inline | 366 | static inline |
| @@ -380,6 +380,8 @@ static inline bool cdev_is_power_actor(struct thermal_cooling_device *cdev) | |||
| 380 | 380 | ||
| 381 | int power_actor_get_max_power(struct thermal_cooling_device *, | 381 | int power_actor_get_max_power(struct thermal_cooling_device *, |
| 382 | struct thermal_zone_device *tz, u32 *max_power); | 382 | struct thermal_zone_device *tz, u32 *max_power); |
| 383 | int power_actor_get_min_power(struct thermal_cooling_device *, | ||
| 384 | struct thermal_zone_device *tz, u32 *min_power); | ||
| 383 | int power_actor_set_power(struct thermal_cooling_device *, | 385 | int power_actor_set_power(struct thermal_cooling_device *, |
| 384 | struct thermal_instance *, u32); | 386 | struct thermal_instance *, u32); |
| 385 | struct thermal_zone_device *thermal_zone_device_register(const char *, int, int, | 387 | struct thermal_zone_device *thermal_zone_device_register(const char *, int, int, |
| @@ -415,6 +417,10 @@ static inline bool cdev_is_power_actor(struct thermal_cooling_device *cdev) | |||
| 415 | static inline int power_actor_get_max_power(struct thermal_cooling_device *cdev, | 417 | static inline int power_actor_get_max_power(struct thermal_cooling_device *cdev, |
| 416 | struct thermal_zone_device *tz, u32 *max_power) | 418 | struct thermal_zone_device *tz, u32 *max_power) |
| 417 | { return 0; } | 419 | { return 0; } |
| 420 | static inline int power_actor_get_min_power(struct thermal_cooling_device *cdev, | ||
| 421 | struct thermal_zone_device *tz, | ||
| 422 | u32 *min_power) | ||
| 423 | { return -ENODEV; } | ||
| 418 | static inline int power_actor_set_power(struct thermal_cooling_device *cdev, | 424 | static inline int power_actor_set_power(struct thermal_cooling_device *cdev, |
| 419 | struct thermal_instance *tz, u32 power) | 425 | struct thermal_instance *tz, u32 power) |
| 420 | { return 0; } | 426 | { return 0; } |
diff --git a/include/linux/wait.h b/include/linux/wait.h index d3d077228d4c..1e1bf9f963a9 100644 --- a/include/linux/wait.h +++ b/include/linux/wait.h | |||
| @@ -147,8 +147,7 @@ __remove_wait_queue(wait_queue_head_t *head, wait_queue_t *old) | |||
| 147 | 147 | ||
| 148 | typedef int wait_bit_action_f(struct wait_bit_key *); | 148 | typedef int wait_bit_action_f(struct wait_bit_key *); |
| 149 | void __wake_up(wait_queue_head_t *q, unsigned int mode, int nr, void *key); | 149 | void __wake_up(wait_queue_head_t *q, unsigned int mode, int nr, void *key); |
| 150 | void __wake_up_locked_key(wait_queue_head_t *q, unsigned int mode, int nr, | 150 | void __wake_up_locked_key(wait_queue_head_t *q, unsigned int mode, void *key); |
| 151 | void *key); | ||
| 152 | void __wake_up_sync_key(wait_queue_head_t *q, unsigned int mode, int nr, void *key); | 151 | void __wake_up_sync_key(wait_queue_head_t *q, unsigned int mode, int nr, void *key); |
| 153 | void __wake_up_locked(wait_queue_head_t *q, unsigned int mode, int nr); | 152 | void __wake_up_locked(wait_queue_head_t *q, unsigned int mode, int nr); |
| 154 | void __wake_up_sync(wait_queue_head_t *q, unsigned int mode, int nr); | 153 | void __wake_up_sync(wait_queue_head_t *q, unsigned int mode, int nr); |
| @@ -180,7 +179,7 @@ wait_queue_head_t *bit_waitqueue(void *, int); | |||
| 180 | #define wake_up_poll(x, m) \ | 179 | #define wake_up_poll(x, m) \ |
| 181 | __wake_up(x, TASK_NORMAL, 1, (void *) (m)) | 180 | __wake_up(x, TASK_NORMAL, 1, (void *) (m)) |
| 182 | #define wake_up_locked_poll(x, m) \ | 181 | #define wake_up_locked_poll(x, m) \ |
| 183 | __wake_up_locked_key((x), TASK_NORMAL, 1, (void *) (m)) | 182 | __wake_up_locked_key((x), TASK_NORMAL, (void *) (m)) |
| 184 | #define wake_up_interruptible_poll(x, m) \ | 183 | #define wake_up_interruptible_poll(x, m) \ |
| 185 | __wake_up(x, TASK_INTERRUPTIBLE, 1, (void *) (m)) | 184 | __wake_up(x, TASK_INTERRUPTIBLE, 1, (void *) (m)) |
| 186 | #define wake_up_interruptible_sync_poll(x, m) \ | 185 | #define wake_up_interruptible_sync_poll(x, m) \ |
diff --git a/include/net/flow.h b/include/net/flow.h index acd6a096250e..9b85db85f13c 100644 --- a/include/net/flow.h +++ b/include/net/flow.h | |||
| @@ -35,6 +35,7 @@ struct flowi_common { | |||
| 35 | #define FLOWI_FLAG_ANYSRC 0x01 | 35 | #define FLOWI_FLAG_ANYSRC 0x01 |
| 36 | #define FLOWI_FLAG_KNOWN_NH 0x02 | 36 | #define FLOWI_FLAG_KNOWN_NH 0x02 |
| 37 | #define FLOWI_FLAG_VRFSRC 0x04 | 37 | #define FLOWI_FLAG_VRFSRC 0x04 |
| 38 | #define FLOWI_FLAG_SKIP_NH_OIF 0x08 | ||
| 38 | __u32 flowic_secid; | 39 | __u32 flowic_secid; |
| 39 | struct flowi_tunnel flowic_tun_key; | 40 | struct flowi_tunnel flowic_tun_key; |
| 40 | }; | 41 | }; |
diff --git a/include/net/inet_timewait_sock.h b/include/net/inet_timewait_sock.h index 879d6e5a973b..186f3a1e1b1f 100644 --- a/include/net/inet_timewait_sock.h +++ b/include/net/inet_timewait_sock.h | |||
| @@ -110,7 +110,19 @@ struct inet_timewait_sock *inet_twsk_alloc(const struct sock *sk, | |||
| 110 | void __inet_twsk_hashdance(struct inet_timewait_sock *tw, struct sock *sk, | 110 | void __inet_twsk_hashdance(struct inet_timewait_sock *tw, struct sock *sk, |
| 111 | struct inet_hashinfo *hashinfo); | 111 | struct inet_hashinfo *hashinfo); |
| 112 | 112 | ||
| 113 | void inet_twsk_schedule(struct inet_timewait_sock *tw, const int timeo); | 113 | void __inet_twsk_schedule(struct inet_timewait_sock *tw, int timeo, |
| 114 | bool rearm); | ||
| 115 | |||
| 116 | static void inline inet_twsk_schedule(struct inet_timewait_sock *tw, int timeo) | ||
| 117 | { | ||
| 118 | __inet_twsk_schedule(tw, timeo, false); | ||
| 119 | } | ||
| 120 | |||
| 121 | static void inline inet_twsk_reschedule(struct inet_timewait_sock *tw, int timeo) | ||
| 122 | { | ||
| 123 | __inet_twsk_schedule(tw, timeo, true); | ||
| 124 | } | ||
| 125 | |||
| 114 | void inet_twsk_deschedule_put(struct inet_timewait_sock *tw); | 126 | void inet_twsk_deschedule_put(struct inet_timewait_sock *tw); |
| 115 | 127 | ||
| 116 | void inet_twsk_purge(struct inet_hashinfo *hashinfo, | 128 | void inet_twsk_purge(struct inet_hashinfo *hashinfo, |
diff --git a/include/net/ip6_fib.h b/include/net/ip6_fib.h index 063d30474cf6..aaf9700fc9e5 100644 --- a/include/net/ip6_fib.h +++ b/include/net/ip6_fib.h | |||
| @@ -275,7 +275,8 @@ int fib6_add(struct fib6_node *root, struct rt6_info *rt, | |||
| 275 | struct nl_info *info, struct mx6_config *mxc); | 275 | struct nl_info *info, struct mx6_config *mxc); |
| 276 | int fib6_del(struct rt6_info *rt, struct nl_info *info); | 276 | int fib6_del(struct rt6_info *rt, struct nl_info *info); |
| 277 | 277 | ||
| 278 | void inet6_rt_notify(int event, struct rt6_info *rt, struct nl_info *info); | 278 | void inet6_rt_notify(int event, struct rt6_info *rt, struct nl_info *info, |
| 279 | unsigned int flags); | ||
| 279 | 280 | ||
| 280 | void fib6_run_gc(unsigned long expires, struct net *net, bool force); | 281 | void fib6_run_gc(unsigned long expires, struct net *net, bool force); |
| 281 | 282 | ||
diff --git a/include/net/ip6_tunnel.h b/include/net/ip6_tunnel.h index b8529aa1dae7..fa915fa0f703 100644 --- a/include/net/ip6_tunnel.h +++ b/include/net/ip6_tunnel.h | |||
| @@ -32,6 +32,12 @@ struct __ip6_tnl_parm { | |||
| 32 | __be32 o_key; | 32 | __be32 o_key; |
| 33 | }; | 33 | }; |
| 34 | 34 | ||
| 35 | struct ip6_tnl_dst { | ||
| 36 | seqlock_t lock; | ||
| 37 | struct dst_entry __rcu *dst; | ||
| 38 | u32 cookie; | ||
| 39 | }; | ||
| 40 | |||
| 35 | /* IPv6 tunnel */ | 41 | /* IPv6 tunnel */ |
| 36 | struct ip6_tnl { | 42 | struct ip6_tnl { |
| 37 | struct ip6_tnl __rcu *next; /* next tunnel in list */ | 43 | struct ip6_tnl __rcu *next; /* next tunnel in list */ |
| @@ -39,8 +45,7 @@ struct ip6_tnl { | |||
| 39 | struct net *net; /* netns for packet i/o */ | 45 | struct net *net; /* netns for packet i/o */ |
| 40 | struct __ip6_tnl_parm parms; /* tunnel configuration parameters */ | 46 | struct __ip6_tnl_parm parms; /* tunnel configuration parameters */ |
| 41 | struct flowi fl; /* flowi template for xmit */ | 47 | struct flowi fl; /* flowi template for xmit */ |
| 42 | struct dst_entry *dst_cache; /* cached dst */ | 48 | struct ip6_tnl_dst __percpu *dst_cache; /* cached dst */ |
| 43 | u32 dst_cookie; | ||
| 44 | 49 | ||
| 45 | int err_count; | 50 | int err_count; |
| 46 | unsigned long err_time; | 51 | unsigned long err_time; |
| @@ -60,9 +65,11 @@ struct ipv6_tlv_tnl_enc_lim { | |||
| 60 | __u8 encap_limit; /* tunnel encapsulation limit */ | 65 | __u8 encap_limit; /* tunnel encapsulation limit */ |
| 61 | } __packed; | 66 | } __packed; |
| 62 | 67 | ||
| 63 | struct dst_entry *ip6_tnl_dst_check(struct ip6_tnl *t); | 68 | struct dst_entry *ip6_tnl_dst_get(struct ip6_tnl *t); |
| 69 | int ip6_tnl_dst_init(struct ip6_tnl *t); | ||
| 70 | void ip6_tnl_dst_destroy(struct ip6_tnl *t); | ||
| 64 | void ip6_tnl_dst_reset(struct ip6_tnl *t); | 71 | void ip6_tnl_dst_reset(struct ip6_tnl *t); |
| 65 | void ip6_tnl_dst_store(struct ip6_tnl *t, struct dst_entry *dst); | 72 | void ip6_tnl_dst_set(struct ip6_tnl *t, struct dst_entry *dst); |
| 66 | int ip6_tnl_rcv_ctl(struct ip6_tnl *t, const struct in6_addr *laddr, | 73 | int ip6_tnl_rcv_ctl(struct ip6_tnl *t, const struct in6_addr *laddr, |
| 67 | const struct in6_addr *raddr); | 74 | const struct in6_addr *raddr); |
| 68 | int ip6_tnl_xmit_ctl(struct ip6_tnl *t, const struct in6_addr *laddr, | 75 | int ip6_tnl_xmit_ctl(struct ip6_tnl *t, const struct in6_addr *laddr, |
| @@ -79,7 +86,7 @@ static inline void ip6tunnel_xmit(struct sock *sk, struct sk_buff *skb, | |||
| 79 | struct net_device_stats *stats = &dev->stats; | 86 | struct net_device_stats *stats = &dev->stats; |
| 80 | int pkt_len, err; | 87 | int pkt_len, err; |
| 81 | 88 | ||
| 82 | pkt_len = skb->len; | 89 | pkt_len = skb->len - skb_inner_network_offset(skb); |
| 83 | err = ip6_local_out_sk(sk, skb); | 90 | err = ip6_local_out_sk(sk, skb); |
| 84 | 91 | ||
| 85 | if (net_xmit_eval(err) == 0) { | 92 | if (net_xmit_eval(err) == 0) { |
diff --git a/include/net/ip_fib.h b/include/net/ip_fib.h index a37d0432bebd..727d6e9a9685 100644 --- a/include/net/ip_fib.h +++ b/include/net/ip_fib.h | |||
| @@ -236,8 +236,11 @@ static inline int fib_lookup(struct net *net, const struct flowi4 *flp, | |||
| 236 | rcu_read_lock(); | 236 | rcu_read_lock(); |
| 237 | 237 | ||
| 238 | tb = fib_get_table(net, RT_TABLE_MAIN); | 238 | tb = fib_get_table(net, RT_TABLE_MAIN); |
| 239 | if (tb && !fib_table_lookup(tb, flp, res, flags | FIB_LOOKUP_NOREF)) | 239 | if (tb) |
| 240 | err = 0; | 240 | err = fib_table_lookup(tb, flp, res, flags | FIB_LOOKUP_NOREF); |
| 241 | |||
| 242 | if (err == -EAGAIN) | ||
| 243 | err = -ENETUNREACH; | ||
| 241 | 244 | ||
| 242 | rcu_read_unlock(); | 245 | rcu_read_unlock(); |
| 243 | 246 | ||
| @@ -258,7 +261,7 @@ static inline int fib_lookup(struct net *net, struct flowi4 *flp, | |||
| 258 | struct fib_result *res, unsigned int flags) | 261 | struct fib_result *res, unsigned int flags) |
| 259 | { | 262 | { |
| 260 | struct fib_table *tb; | 263 | struct fib_table *tb; |
| 261 | int err; | 264 | int err = -ENETUNREACH; |
| 262 | 265 | ||
| 263 | flags |= FIB_LOOKUP_NOREF; | 266 | flags |= FIB_LOOKUP_NOREF; |
| 264 | if (net->ipv4.fib_has_custom_rules) | 267 | if (net->ipv4.fib_has_custom_rules) |
| @@ -268,15 +271,20 @@ static inline int fib_lookup(struct net *net, struct flowi4 *flp, | |||
| 268 | 271 | ||
| 269 | res->tclassid = 0; | 272 | res->tclassid = 0; |
| 270 | 273 | ||
| 271 | for (err = 0; !err; err = -ENETUNREACH) { | 274 | tb = rcu_dereference_rtnl(net->ipv4.fib_main); |
| 272 | tb = rcu_dereference_rtnl(net->ipv4.fib_main); | 275 | if (tb) |
| 273 | if (tb && !fib_table_lookup(tb, flp, res, flags)) | 276 | err = fib_table_lookup(tb, flp, res, flags); |
| 274 | break; | 277 | |
| 278 | if (!err) | ||
| 279 | goto out; | ||
| 280 | |||
| 281 | tb = rcu_dereference_rtnl(net->ipv4.fib_default); | ||
| 282 | if (tb) | ||
| 283 | err = fib_table_lookup(tb, flp, res, flags); | ||
| 275 | 284 | ||
| 276 | tb = rcu_dereference_rtnl(net->ipv4.fib_default); | 285 | out: |
| 277 | if (tb && !fib_table_lookup(tb, flp, res, flags)) | 286 | if (err == -EAGAIN) |
| 278 | break; | 287 | err = -ENETUNREACH; |
| 279 | } | ||
| 280 | 288 | ||
| 281 | rcu_read_unlock(); | 289 | rcu_read_unlock(); |
| 282 | 290 | ||
diff --git a/include/net/ip_tunnels.h b/include/net/ip_tunnels.h index 9a6a3ba888e8..f6dafec9102c 100644 --- a/include/net/ip_tunnels.h +++ b/include/net/ip_tunnels.h | |||
| @@ -276,6 +276,8 @@ int iptunnel_pull_header(struct sk_buff *skb, int hdr_len, __be16 inner_proto); | |||
| 276 | int iptunnel_xmit(struct sock *sk, struct rtable *rt, struct sk_buff *skb, | 276 | int iptunnel_xmit(struct sock *sk, struct rtable *rt, struct sk_buff *skb, |
| 277 | __be32 src, __be32 dst, u8 proto, | 277 | __be32 src, __be32 dst, u8 proto, |
| 278 | u8 tos, u8 ttl, __be16 df, bool xnet); | 278 | u8 tos, u8 ttl, __be16 df, bool xnet); |
| 279 | struct metadata_dst *iptunnel_metadata_reply(struct metadata_dst *md, | ||
| 280 | gfp_t flags); | ||
| 279 | 281 | ||
| 280 | struct sk_buff *iptunnel_handle_offloads(struct sk_buff *skb, bool gre_csum, | 282 | struct sk_buff *iptunnel_handle_offloads(struct sk_buff *skb, bool gre_csum, |
| 281 | int gso_type_mask); | 283 | int gso_type_mask); |
diff --git a/include/net/route.h b/include/net/route.h index cc61cb95f059..f46af256880c 100644 --- a/include/net/route.h +++ b/include/net/route.h | |||
| @@ -255,7 +255,7 @@ static inline void ip_route_connect_init(struct flowi4 *fl4, __be32 dst, __be32 | |||
| 255 | flow_flags |= FLOWI_FLAG_ANYSRC; | 255 | flow_flags |= FLOWI_FLAG_ANYSRC; |
| 256 | 256 | ||
| 257 | if (netif_index_is_vrf(sock_net(sk), oif)) | 257 | if (netif_index_is_vrf(sock_net(sk), oif)) |
| 258 | flow_flags |= FLOWI_FLAG_VRFSRC; | 258 | flow_flags |= FLOWI_FLAG_VRFSRC | FLOWI_FLAG_SKIP_NH_OIF; |
| 259 | 259 | ||
| 260 | flowi4_init_output(fl4, oif, sk->sk_mark, tos, RT_SCOPE_UNIVERSE, | 260 | flowi4_init_output(fl4, oif, sk->sk_mark, tos, RT_SCOPE_UNIVERSE, |
| 261 | protocol, flow_flags, dst, src, dport, sport); | 261 | protocol, flow_flags, dst, src, dport, sport); |
diff --git a/include/target/target_core_base.h b/include/target/target_core_base.h index ac9bf1c0e42d..5f48754dc36a 100644 --- a/include/target/target_core_base.h +++ b/include/target/target_core_base.h | |||
| @@ -730,6 +730,7 @@ struct se_device { | |||
| 730 | #define DF_EMULATED_VPD_UNIT_SERIAL 0x00000004 | 730 | #define DF_EMULATED_VPD_UNIT_SERIAL 0x00000004 |
| 731 | #define DF_USING_UDEV_PATH 0x00000008 | 731 | #define DF_USING_UDEV_PATH 0x00000008 |
| 732 | #define DF_USING_ALIAS 0x00000010 | 732 | #define DF_USING_ALIAS 0x00000010 |
| 733 | #define DF_READ_ONLY 0x00000020 | ||
| 733 | /* Physical device queue depth */ | 734 | /* Physical device queue depth */ |
| 734 | u32 queue_depth; | 735 | u32 queue_depth; |
| 735 | /* Used for SPC-2 reservations enforce of ISIDs */ | 736 | /* Used for SPC-2 reservations enforce of ISIDs */ |
diff --git a/include/uapi/asm-generic/unistd.h b/include/uapi/asm-generic/unistd.h index 8da542a2874d..ee124009e12a 100644 --- a/include/uapi/asm-generic/unistd.h +++ b/include/uapi/asm-generic/unistd.h | |||
| @@ -709,17 +709,19 @@ __SYSCALL(__NR_memfd_create, sys_memfd_create) | |||
| 709 | __SYSCALL(__NR_bpf, sys_bpf) | 709 | __SYSCALL(__NR_bpf, sys_bpf) |
| 710 | #define __NR_execveat 281 | 710 | #define __NR_execveat 281 |
| 711 | __SC_COMP(__NR_execveat, sys_execveat, compat_sys_execveat) | 711 | __SC_COMP(__NR_execveat, sys_execveat, compat_sys_execveat) |
| 712 | #define __NR_membarrier 282 | 712 | #define __NR_userfaultfd 282 |
| 713 | __SYSCALL(__NR_userfaultfd, sys_userfaultfd) | ||
| 714 | #define __NR_membarrier 283 | ||
| 713 | __SYSCALL(__NR_membarrier, sys_membarrier) | 715 | __SYSCALL(__NR_membarrier, sys_membarrier) |
| 714 | 716 | ||
| 715 | #undef __NR_syscalls | 717 | #undef __NR_syscalls |
| 716 | #define __NR_syscalls 283 | 718 | #define __NR_syscalls 284 |
| 717 | 719 | ||
| 718 | /* | 720 | /* |
| 719 | * All syscalls below here should go away really, | 721 | * All syscalls below here should go away really, |
| 720 | * these are provided for both review and as a porting | 722 | * these are provided for both review and as a porting |
| 721 | * help for the C library version. | 723 | * help for the C library version. |
| 722 | * | 724 | * |
| 723 | * Last chance: are any of these important enough to | 725 | * Last chance: are any of these important enough to |
| 724 | * enable by default? | 726 | * enable by default? |
| 725 | */ | 727 | */ |
diff --git a/include/uapi/linux/lwtunnel.h b/include/uapi/linux/lwtunnel.h index 34141a5dfe74..f8b01887a495 100644 --- a/include/uapi/linux/lwtunnel.h +++ b/include/uapi/linux/lwtunnel.h | |||
| @@ -21,8 +21,6 @@ enum lwtunnel_ip_t { | |||
| 21 | LWTUNNEL_IP_SRC, | 21 | LWTUNNEL_IP_SRC, |
| 22 | LWTUNNEL_IP_TTL, | 22 | LWTUNNEL_IP_TTL, |
| 23 | LWTUNNEL_IP_TOS, | 23 | LWTUNNEL_IP_TOS, |
| 24 | LWTUNNEL_IP_SPORT, | ||
| 25 | LWTUNNEL_IP_DPORT, | ||
| 26 | LWTUNNEL_IP_FLAGS, | 24 | LWTUNNEL_IP_FLAGS, |
| 27 | __LWTUNNEL_IP_MAX, | 25 | __LWTUNNEL_IP_MAX, |
| 28 | }; | 26 | }; |
| @@ -36,8 +34,6 @@ enum lwtunnel_ip6_t { | |||
| 36 | LWTUNNEL_IP6_SRC, | 34 | LWTUNNEL_IP6_SRC, |
| 37 | LWTUNNEL_IP6_HOPLIMIT, | 35 | LWTUNNEL_IP6_HOPLIMIT, |
| 38 | LWTUNNEL_IP6_TC, | 36 | LWTUNNEL_IP6_TC, |
| 39 | LWTUNNEL_IP6_SPORT, | ||
| 40 | LWTUNNEL_IP6_DPORT, | ||
| 41 | LWTUNNEL_IP6_FLAGS, | 37 | LWTUNNEL_IP6_FLAGS, |
| 42 | __LWTUNNEL_IP6_MAX, | 38 | __LWTUNNEL_IP6_MAX, |
| 43 | }; | 39 | }; |
