diff options
| author | Linus Torvalds <torvalds@linux-foundation.org> | 2013-02-27 23:58:09 -0500 |
|---|---|---|
| committer | Linus Torvalds <torvalds@linux-foundation.org> | 2013-02-27 23:58:09 -0500 |
| commit | 2a7d2b96d5cba7568139d9ab157a0e97ab32440f (patch) | |
| tree | ad029d8cc7b7068b7250e914360ec6315fdfa114 /include | |
| parent | e3c4877de8b9d93bd47b6ee88eb594b1c1e10da5 (diff) | |
| parent | b67bfe0d42cac56c512dd5da4b1b347a23f4b70a (diff) | |
Merge branch 'akpm' (final batch from Andrew)
Merge third patch-bumb from Andrew Morton:
"This wraps me up for -rc1.
- Lots of misc stuff and things which were deferred/missed from
patchbombings 1 & 2.
- ocfs2 things
- lib/scatterlist
- hfsplus
- fatfs
- documentation
- signals
- procfs
- lockdep
- coredump
- seqfile core
- kexec
- Tejun's large IDR tree reworkings
- ipmi
- partitions
- nbd
- random() things
- kfifo
- tools/testing/selftests updates
- Sasha's large and pointless hlist cleanup"
* emailed patches from Andrew Morton <akpm@linux-foundation.org>: (163 commits)
hlist: drop the node parameter from iterators
kcmp: make it depend on CHECKPOINT_RESTORE
selftests: add a simple doc
tools/testing/selftests/Makefile: rearrange targets
selftests/efivarfs: add create-read test
selftests/efivarfs: add empty file creation test
selftests: add tests for efivarfs
kfifo: fix kfifo_alloc() and kfifo_init()
kfifo: move kfifo.c from kernel/ to lib/
arch Kconfig: centralise CONFIG_ARCH_NO_VIRT_TO_BUS
w1: add support for DS2413 Dual Channel Addressable Switch
memstick: move the dereference below the NULL test
drivers/pps/clients/pps-gpio.c: use devm_kzalloc
Documentation/DMA-API-HOWTO.txt: fix typo
include/linux/eventfd.h: fix incorrect filename is a comment
mtd: mtd_stresstest: use prandom_bytes()
mtd: mtd_subpagetest: convert to use prandom library
mtd: mtd_speedtest: use prandom_bytes
mtd: mtd_pagetest: convert to use prandom library
mtd: mtd_oobtest: convert to use prandom library
...
Diffstat (limited to 'include')
| -rw-r--r-- | include/linux/debug_locks.h | 4 | ||||
| -rw-r--r-- | include/linux/eventfd.h | 2 | ||||
| -rw-r--r-- | include/linux/freezer.h | 3 | ||||
| -rw-r--r-- | include/linux/hashtable.h | 40 | ||||
| -rw-r--r-- | include/linux/idr.h | 170 | ||||
| -rw-r--r-- | include/linux/if_team.h | 6 | ||||
| -rw-r--r-- | include/linux/ipmi.h | 4 | ||||
| -rw-r--r-- | include/linux/list.h | 49 | ||||
| -rw-r--r-- | include/linux/mfd/lp8788.h | 24 | ||||
| -rw-r--r-- | include/linux/pid.h | 3 | ||||
| -rw-r--r-- | include/linux/rculist.h | 56 | ||||
| -rw-r--r-- | include/linux/scatterlist.h | 41 | ||||
| -rw-r--r-- | include/linux/sched.h | 5 | ||||
| -rw-r--r-- | include/net/ax25.h | 8 | ||||
| -rw-r--r-- | include/net/inet_hashtables.h | 4 | ||||
| -rw-r--r-- | include/net/inet_timewait_sock.h | 8 | ||||
| -rw-r--r-- | include/net/netrom.h | 16 | ||||
| -rw-r--r-- | include/net/sch_generic.h | 3 | ||||
| -rw-r--r-- | include/net/sctp/sctp.h | 4 | ||||
| -rw-r--r-- | include/net/sock.h | 21 | ||||
| -rw-r--r-- | include/uapi/linux/ipmi.h | 10 | ||||
| -rw-r--r-- | include/uapi/linux/msdos_fs.h | 38 | ||||
| -rw-r--r-- | include/uapi/linux/nbd.h | 3 | ||||
| -rw-r--r-- | include/uapi/linux/xattr.h | 13 |
24 files changed, 299 insertions, 236 deletions
diff --git a/include/linux/debug_locks.h b/include/linux/debug_locks.h index 3bd46f766751..a975de1ff59f 100644 --- a/include/linux/debug_locks.h +++ b/include/linux/debug_locks.h | |||
| @@ -51,7 +51,7 @@ struct task_struct; | |||
| 51 | extern void debug_show_all_locks(void); | 51 | extern void debug_show_all_locks(void); |
| 52 | extern void debug_show_held_locks(struct task_struct *task); | 52 | extern void debug_show_held_locks(struct task_struct *task); |
| 53 | extern void debug_check_no_locks_freed(const void *from, unsigned long len); | 53 | extern void debug_check_no_locks_freed(const void *from, unsigned long len); |
| 54 | extern void debug_check_no_locks_held(struct task_struct *task); | 54 | extern void debug_check_no_locks_held(void); |
| 55 | #else | 55 | #else |
| 56 | static inline void debug_show_all_locks(void) | 56 | static inline void debug_show_all_locks(void) |
| 57 | { | 57 | { |
| @@ -67,7 +67,7 @@ debug_check_no_locks_freed(const void *from, unsigned long len) | |||
| 67 | } | 67 | } |
| 68 | 68 | ||
| 69 | static inline void | 69 | static inline void |
| 70 | debug_check_no_locks_held(struct task_struct *task) | 70 | debug_check_no_locks_held(void) |
| 71 | { | 71 | { |
| 72 | } | 72 | } |
| 73 | #endif | 73 | #endif |
diff --git a/include/linux/eventfd.h b/include/linux/eventfd.h index 3c3ef19a625a..cf5d2af61b81 100644 --- a/include/linux/eventfd.h +++ b/include/linux/eventfd.h | |||
| @@ -13,7 +13,7 @@ | |||
| 13 | #include <linux/wait.h> | 13 | #include <linux/wait.h> |
| 14 | 14 | ||
| 15 | /* | 15 | /* |
| 16 | * CAREFUL: Check include/asm-generic/fcntl.h when defining | 16 | * CAREFUL: Check include/uapi/asm-generic/fcntl.h when defining |
| 17 | * new flags, since they might collide with O_* ones. We want | 17 | * new flags, since they might collide with O_* ones. We want |
| 18 | * to re-use O_* flags that couldn't possibly have a meaning | 18 | * to re-use O_* flags that couldn't possibly have a meaning |
| 19 | * from eventfd, in order to leave a free define-space for | 19 | * from eventfd, in order to leave a free define-space for |
diff --git a/include/linux/freezer.h b/include/linux/freezer.h index e70df40d84f6..043a5cf8b5ba 100644 --- a/include/linux/freezer.h +++ b/include/linux/freezer.h | |||
| @@ -3,6 +3,7 @@ | |||
| 3 | #ifndef FREEZER_H_INCLUDED | 3 | #ifndef FREEZER_H_INCLUDED |
| 4 | #define FREEZER_H_INCLUDED | 4 | #define FREEZER_H_INCLUDED |
| 5 | 5 | ||
| 6 | #include <linux/debug_locks.h> | ||
| 6 | #include <linux/sched.h> | 7 | #include <linux/sched.h> |
| 7 | #include <linux/wait.h> | 8 | #include <linux/wait.h> |
| 8 | #include <linux/atomic.h> | 9 | #include <linux/atomic.h> |
| @@ -48,6 +49,8 @@ extern void thaw_kernel_threads(void); | |||
| 48 | 49 | ||
| 49 | static inline bool try_to_freeze(void) | 50 | static inline bool try_to_freeze(void) |
| 50 | { | 51 | { |
| 52 | if (!(current->flags & PF_NOFREEZE)) | ||
| 53 | debug_check_no_locks_held(); | ||
| 51 | might_sleep(); | 54 | might_sleep(); |
| 52 | if (likely(!freezing(current))) | 55 | if (likely(!freezing(current))) |
| 53 | return false; | 56 | return false; |
diff --git a/include/linux/hashtable.h b/include/linux/hashtable.h index 227c62424f3c..a9df51f5d54c 100644 --- a/include/linux/hashtable.h +++ b/include/linux/hashtable.h | |||
| @@ -115,51 +115,50 @@ static inline void hash_del_rcu(struct hlist_node *node) | |||
| 115 | * hash_for_each - iterate over a hashtable | 115 | * hash_for_each - iterate over a hashtable |
| 116 | * @name: hashtable to iterate | 116 | * @name: hashtable to iterate |
| 117 | * @bkt: integer to use as bucket loop cursor | 117 | * @bkt: integer to use as bucket loop cursor |
| 118 | * @node: the &struct list_head to use as a loop cursor for each entry | ||
| 119 | * @obj: the type * to use as a loop cursor for each entry | 118 | * @obj: the type * to use as a loop cursor for each entry |
| 120 | * @member: the name of the hlist_node within the struct | 119 | * @member: the name of the hlist_node within the struct |
| 121 | */ | 120 | */ |
| 122 | #define hash_for_each(name, bkt, node, obj, member) \ | 121 | #define hash_for_each(name, bkt, obj, member) \ |
| 123 | for ((bkt) = 0, node = NULL; node == NULL && (bkt) < HASH_SIZE(name); (bkt)++)\ | 122 | for ((bkt) = 0, obj = NULL; obj == NULL && (bkt) < HASH_SIZE(name);\ |
| 124 | hlist_for_each_entry(obj, node, &name[bkt], member) | 123 | (bkt)++)\ |
| 124 | hlist_for_each_entry(obj, &name[bkt], member) | ||
| 125 | 125 | ||
| 126 | /** | 126 | /** |
| 127 | * hash_for_each_rcu - iterate over a rcu enabled hashtable | 127 | * hash_for_each_rcu - iterate over a rcu enabled hashtable |
| 128 | * @name: hashtable to iterate | 128 | * @name: hashtable to iterate |
| 129 | * @bkt: integer to use as bucket loop cursor | 129 | * @bkt: integer to use as bucket loop cursor |
| 130 | * @node: the &struct list_head to use as a loop cursor for each entry | ||
| 131 | * @obj: the type * to use as a loop cursor for each entry | 130 | * @obj: the type * to use as a loop cursor for each entry |
| 132 | * @member: the name of the hlist_node within the struct | 131 | * @member: the name of the hlist_node within the struct |
| 133 | */ | 132 | */ |
| 134 | #define hash_for_each_rcu(name, bkt, node, obj, member) \ | 133 | #define hash_for_each_rcu(name, bkt, obj, member) \ |
| 135 | for ((bkt) = 0, node = NULL; node == NULL && (bkt) < HASH_SIZE(name); (bkt)++)\ | 134 | for ((bkt) = 0, obj = NULL; obj == NULL && (bkt) < HASH_SIZE(name);\ |
| 136 | hlist_for_each_entry_rcu(obj, node, &name[bkt], member) | 135 | (bkt)++)\ |
| 136 | hlist_for_each_entry_rcu(obj, &name[bkt], member) | ||
| 137 | 137 | ||
| 138 | /** | 138 | /** |
| 139 | * hash_for_each_safe - iterate over a hashtable safe against removal of | 139 | * hash_for_each_safe - iterate over a hashtable safe against removal of |
| 140 | * hash entry | 140 | * hash entry |
| 141 | * @name: hashtable to iterate | 141 | * @name: hashtable to iterate |
| 142 | * @bkt: integer to use as bucket loop cursor | 142 | * @bkt: integer to use as bucket loop cursor |
| 143 | * @node: the &struct list_head to use as a loop cursor for each entry | ||
| 144 | * @tmp: a &struct used for temporary storage | 143 | * @tmp: a &struct used for temporary storage |
| 145 | * @obj: the type * to use as a loop cursor for each entry | 144 | * @obj: the type * to use as a loop cursor for each entry |
| 146 | * @member: the name of the hlist_node within the struct | 145 | * @member: the name of the hlist_node within the struct |
| 147 | */ | 146 | */ |
| 148 | #define hash_for_each_safe(name, bkt, node, tmp, obj, member) \ | 147 | #define hash_for_each_safe(name, bkt, tmp, obj, member) \ |
| 149 | for ((bkt) = 0, node = NULL; node == NULL && (bkt) < HASH_SIZE(name); (bkt)++)\ | 148 | for ((bkt) = 0, obj = NULL; obj == NULL && (bkt) < HASH_SIZE(name);\ |
| 150 | hlist_for_each_entry_safe(obj, node, tmp, &name[bkt], member) | 149 | (bkt)++)\ |
| 150 | hlist_for_each_entry_safe(obj, tmp, &name[bkt], member) | ||
| 151 | 151 | ||
| 152 | /** | 152 | /** |
| 153 | * hash_for_each_possible - iterate over all possible objects hashing to the | 153 | * hash_for_each_possible - iterate over all possible objects hashing to the |
| 154 | * same bucket | 154 | * same bucket |
| 155 | * @name: hashtable to iterate | 155 | * @name: hashtable to iterate |
| 156 | * @obj: the type * to use as a loop cursor for each entry | 156 | * @obj: the type * to use as a loop cursor for each entry |
| 157 | * @node: the &struct list_head to use as a loop cursor for each entry | ||
| 158 | * @member: the name of the hlist_node within the struct | 157 | * @member: the name of the hlist_node within the struct |
| 159 | * @key: the key of the objects to iterate over | 158 | * @key: the key of the objects to iterate over |
| 160 | */ | 159 | */ |
| 161 | #define hash_for_each_possible(name, obj, node, member, key) \ | 160 | #define hash_for_each_possible(name, obj, member, key) \ |
| 162 | hlist_for_each_entry(obj, node, &name[hash_min(key, HASH_BITS(name))], member) | 161 | hlist_for_each_entry(obj, &name[hash_min(key, HASH_BITS(name))], member) |
| 163 | 162 | ||
| 164 | /** | 163 | /** |
| 165 | * hash_for_each_possible_rcu - iterate over all possible objects hashing to the | 164 | * hash_for_each_possible_rcu - iterate over all possible objects hashing to the |
| @@ -167,25 +166,24 @@ static inline void hash_del_rcu(struct hlist_node *node) | |||
| 167 | * in a rcu enabled hashtable | 166 | * in a rcu enabled hashtable |
| 168 | * @name: hashtable to iterate | 167 | * @name: hashtable to iterate |
| 169 | * @obj: the type * to use as a loop cursor for each entry | 168 | * @obj: the type * to use as a loop cursor for each entry |
| 170 | * @node: the &struct list_head to use as a loop cursor for each entry | ||
| 171 | * @member: the name of the hlist_node within the struct | 169 | * @member: the name of the hlist_node within the struct |
| 172 | * @key: the key of the objects to iterate over | 170 | * @key: the key of the objects to iterate over |
| 173 | */ | 171 | */ |
| 174 | #define hash_for_each_possible_rcu(name, obj, node, member, key) \ | 172 | #define hash_for_each_possible_rcu(name, obj, member, key) \ |
| 175 | hlist_for_each_entry_rcu(obj, node, &name[hash_min(key, HASH_BITS(name))], member) | 173 | hlist_for_each_entry_rcu(obj, &name[hash_min(key, HASH_BITS(name))],\ |
| 174 | member) | ||
| 176 | 175 | ||
| 177 | /** | 176 | /** |
| 178 | * hash_for_each_possible_safe - iterate over all possible objects hashing to the | 177 | * hash_for_each_possible_safe - iterate over all possible objects hashing to the |
| 179 | * same bucket safe against removals | 178 | * same bucket safe against removals |
| 180 | * @name: hashtable to iterate | 179 | * @name: hashtable to iterate |
| 181 | * @obj: the type * to use as a loop cursor for each entry | 180 | * @obj: the type * to use as a loop cursor for each entry |
| 182 | * @node: the &struct list_head to use as a loop cursor for each entry | ||
| 183 | * @tmp: a &struct used for temporary storage | 181 | * @tmp: a &struct used for temporary storage |
| 184 | * @member: the name of the hlist_node within the struct | 182 | * @member: the name of the hlist_node within the struct |
| 185 | * @key: the key of the objects to iterate over | 183 | * @key: the key of the objects to iterate over |
| 186 | */ | 184 | */ |
| 187 | #define hash_for_each_possible_safe(name, obj, node, tmp, member, key) \ | 185 | #define hash_for_each_possible_safe(name, obj, tmp, member, key) \ |
| 188 | hlist_for_each_entry_safe(obj, node, tmp, \ | 186 | hlist_for_each_entry_safe(obj, tmp,\ |
| 189 | &name[hash_min(key, HASH_BITS(name))], member) | 187 | &name[hash_min(key, HASH_BITS(name))], member) |
| 190 | 188 | ||
| 191 | 189 | ||
diff --git a/include/linux/idr.h b/include/linux/idr.h index e5eb125effe6..a6f38b5c34e4 100644 --- a/include/linux/idr.h +++ b/include/linux/idr.h | |||
| @@ -17,69 +17,40 @@ | |||
| 17 | #include <linux/init.h> | 17 | #include <linux/init.h> |
| 18 | #include <linux/rcupdate.h> | 18 | #include <linux/rcupdate.h> |
| 19 | 19 | ||
| 20 | #if BITS_PER_LONG == 32 | 20 | /* |
| 21 | # define IDR_BITS 5 | 21 | * We want shallower trees and thus more bits covered at each layer. 8 |
| 22 | # define IDR_FULL 0xfffffffful | 22 | * bits gives us large enough first layer for most use cases and maximum |
| 23 | /* We can only use two of the bits in the top level because there is | 23 | * tree depth of 4. Each idr_layer is slightly larger than 2k on 64bit and |
| 24 | only one possible bit in the top level (5 bits * 7 levels = 35 | 24 | * 1k on 32bit. |
| 25 | bits, but you only use 31 bits in the id). */ | 25 | */ |
| 26 | # define TOP_LEVEL_FULL (IDR_FULL >> 30) | 26 | #define IDR_BITS 8 |
| 27 | #elif BITS_PER_LONG == 64 | ||
| 28 | # define IDR_BITS 6 | ||
| 29 | # define IDR_FULL 0xfffffffffffffffful | ||
| 30 | /* We can only use two of the bits in the top level because there is | ||
| 31 | only one possible bit in the top level (6 bits * 6 levels = 36 | ||
| 32 | bits, but you only use 31 bits in the id). */ | ||
| 33 | # define TOP_LEVEL_FULL (IDR_FULL >> 62) | ||
| 34 | #else | ||
| 35 | # error "BITS_PER_LONG is not 32 or 64" | ||
| 36 | #endif | ||
| 37 | |||
| 38 | #define IDR_SIZE (1 << IDR_BITS) | 27 | #define IDR_SIZE (1 << IDR_BITS) |
| 39 | #define IDR_MASK ((1 << IDR_BITS)-1) | 28 | #define IDR_MASK ((1 << IDR_BITS)-1) |
| 40 | 29 | ||
| 41 | #define MAX_IDR_SHIFT (sizeof(int)*8 - 1) | ||
| 42 | #define MAX_IDR_BIT (1U << MAX_IDR_SHIFT) | ||
| 43 | #define MAX_IDR_MASK (MAX_IDR_BIT - 1) | ||
| 44 | |||
| 45 | /* Leave the possibility of an incomplete final layer */ | ||
| 46 | #define MAX_IDR_LEVEL ((MAX_IDR_SHIFT + IDR_BITS - 1) / IDR_BITS) | ||
| 47 | |||
| 48 | /* Number of id_layer structs to leave in free list */ | ||
| 49 | #define MAX_IDR_FREE (MAX_IDR_LEVEL * 2) | ||
| 50 | |||
| 51 | struct idr_layer { | 30 | struct idr_layer { |
| 52 | unsigned long bitmap; /* A zero bit means "space here" */ | 31 | int prefix; /* the ID prefix of this idr_layer */ |
| 32 | DECLARE_BITMAP(bitmap, IDR_SIZE); /* A zero bit means "space here" */ | ||
| 53 | struct idr_layer __rcu *ary[1<<IDR_BITS]; | 33 | struct idr_layer __rcu *ary[1<<IDR_BITS]; |
| 54 | int count; /* When zero, we can release it */ | 34 | int count; /* When zero, we can release it */ |
| 55 | int layer; /* distance from leaf */ | 35 | int layer; /* distance from leaf */ |
| 56 | struct rcu_head rcu_head; | 36 | struct rcu_head rcu_head; |
| 57 | }; | 37 | }; |
| 58 | 38 | ||
| 59 | struct idr { | 39 | struct idr { |
| 60 | struct idr_layer __rcu *top; | 40 | struct idr_layer __rcu *hint; /* the last layer allocated from */ |
| 61 | struct idr_layer *id_free; | 41 | struct idr_layer __rcu *top; |
| 62 | int layers; /* only valid without concurrent changes */ | 42 | struct idr_layer *id_free; |
| 63 | int id_free_cnt; | 43 | int layers; /* only valid w/o concurrent changes */ |
| 64 | spinlock_t lock; | 44 | int id_free_cnt; |
| 45 | spinlock_t lock; | ||
| 65 | }; | 46 | }; |
| 66 | 47 | ||
| 67 | #define IDR_INIT(name) \ | 48 | #define IDR_INIT(name) \ |
| 68 | { \ | 49 | { \ |
| 69 | .top = NULL, \ | 50 | .lock = __SPIN_LOCK_UNLOCKED(name.lock), \ |
| 70 | .id_free = NULL, \ | ||
| 71 | .layers = 0, \ | ||
| 72 | .id_free_cnt = 0, \ | ||
| 73 | .lock = __SPIN_LOCK_UNLOCKED(name.lock), \ | ||
| 74 | } | 51 | } |
| 75 | #define DEFINE_IDR(name) struct idr name = IDR_INIT(name) | 52 | #define DEFINE_IDR(name) struct idr name = IDR_INIT(name) |
| 76 | 53 | ||
| 77 | /* Actions to be taken after a call to _idr_sub_alloc */ | ||
| 78 | #define IDR_NEED_TO_GROW -2 | ||
| 79 | #define IDR_NOMORE_SPACE -3 | ||
| 80 | |||
| 81 | #define _idr_rc_to_errno(rc) ((rc) == -1 ? -EAGAIN : -ENOSPC) | ||
| 82 | |||
| 83 | /** | 54 | /** |
| 84 | * DOC: idr sync | 55 | * DOC: idr sync |
| 85 | * idr synchronization (stolen from radix-tree.h) | 56 | * idr synchronization (stolen from radix-tree.h) |
| @@ -101,19 +72,90 @@ struct idr { | |||
| 101 | * This is what we export. | 72 | * This is what we export. |
| 102 | */ | 73 | */ |
| 103 | 74 | ||
| 104 | void *idr_find(struct idr *idp, int id); | 75 | void *idr_find_slowpath(struct idr *idp, int id); |
| 105 | int idr_pre_get(struct idr *idp, gfp_t gfp_mask); | 76 | int idr_pre_get(struct idr *idp, gfp_t gfp_mask); |
| 106 | int idr_get_new(struct idr *idp, void *ptr, int *id); | ||
| 107 | int idr_get_new_above(struct idr *idp, void *ptr, int starting_id, int *id); | 77 | int idr_get_new_above(struct idr *idp, void *ptr, int starting_id, int *id); |
| 78 | void idr_preload(gfp_t gfp_mask); | ||
| 79 | int idr_alloc(struct idr *idp, void *ptr, int start, int end, gfp_t gfp_mask); | ||
| 108 | int idr_for_each(struct idr *idp, | 80 | int idr_for_each(struct idr *idp, |
| 109 | int (*fn)(int id, void *p, void *data), void *data); | 81 | int (*fn)(int id, void *p, void *data), void *data); |
| 110 | void *idr_get_next(struct idr *idp, int *nextid); | 82 | void *idr_get_next(struct idr *idp, int *nextid); |
| 111 | void *idr_replace(struct idr *idp, void *ptr, int id); | 83 | void *idr_replace(struct idr *idp, void *ptr, int id); |
| 112 | void idr_remove(struct idr *idp, int id); | 84 | void idr_remove(struct idr *idp, int id); |
| 113 | void idr_remove_all(struct idr *idp); | 85 | void idr_free(struct idr *idp, int id); |
| 114 | void idr_destroy(struct idr *idp); | 86 | void idr_destroy(struct idr *idp); |
| 115 | void idr_init(struct idr *idp); | 87 | void idr_init(struct idr *idp); |
| 116 | 88 | ||
| 89 | /** | ||
| 90 | * idr_preload_end - end preload section started with idr_preload() | ||
| 91 | * | ||
| 92 | * Each idr_preload() should be matched with an invocation of this | ||
| 93 | * function. See idr_preload() for details. | ||
| 94 | */ | ||
| 95 | static inline void idr_preload_end(void) | ||
| 96 | { | ||
| 97 | preempt_enable(); | ||
| 98 | } | ||
| 99 | |||
| 100 | /** | ||
| 101 | * idr_find - return pointer for given id | ||
| 102 | * @idp: idr handle | ||
| 103 | * @id: lookup key | ||
| 104 | * | ||
| 105 | * Return the pointer given the id it has been registered with. A %NULL | ||
| 106 | * return indicates that @id is not valid or you passed %NULL in | ||
| 107 | * idr_get_new(). | ||
| 108 | * | ||
| 109 | * This function can be called under rcu_read_lock(), given that the leaf | ||
| 110 | * pointers lifetimes are correctly managed. | ||
| 111 | */ | ||
| 112 | static inline void *idr_find(struct idr *idr, int id) | ||
| 113 | { | ||
| 114 | struct idr_layer *hint = rcu_dereference_raw(idr->hint); | ||
| 115 | |||
| 116 | if (hint && (id & ~IDR_MASK) == hint->prefix) | ||
| 117 | return rcu_dereference_raw(hint->ary[id & IDR_MASK]); | ||
| 118 | |||
| 119 | return idr_find_slowpath(idr, id); | ||
| 120 | } | ||
| 121 | |||
| 122 | /** | ||
| 123 | * idr_get_new - allocate new idr entry | ||
| 124 | * @idp: idr handle | ||
| 125 | * @ptr: pointer you want associated with the id | ||
| 126 | * @id: pointer to the allocated handle | ||
| 127 | * | ||
| 128 | * Simple wrapper around idr_get_new_above() w/ @starting_id of zero. | ||
| 129 | */ | ||
| 130 | static inline int idr_get_new(struct idr *idp, void *ptr, int *id) | ||
| 131 | { | ||
| 132 | return idr_get_new_above(idp, ptr, 0, id); | ||
| 133 | } | ||
| 134 | |||
| 135 | /** | ||
| 136 | * idr_for_each_entry - iterate over an idr's elements of a given type | ||
| 137 | * @idp: idr handle | ||
| 138 | * @entry: the type * to use as cursor | ||
| 139 | * @id: id entry's key | ||
| 140 | */ | ||
| 141 | #define idr_for_each_entry(idp, entry, id) \ | ||
| 142 | for (id = 0, entry = (typeof(entry))idr_get_next((idp), &(id)); \ | ||
| 143 | entry != NULL; \ | ||
| 144 | ++id, entry = (typeof(entry))idr_get_next((idp), &(id))) | ||
| 145 | |||
| 146 | void __idr_remove_all(struct idr *idp); /* don't use */ | ||
| 147 | |||
| 148 | /** | ||
| 149 | * idr_remove_all - remove all ids from the given idr tree | ||
| 150 | * @idp: idr handle | ||
| 151 | * | ||
| 152 | * If you're trying to destroy @idp, calling idr_destroy() is enough. | ||
| 153 | * This is going away. Don't use. | ||
| 154 | */ | ||
| 155 | static inline void __deprecated idr_remove_all(struct idr *idp) | ||
| 156 | { | ||
| 157 | __idr_remove_all(idp); | ||
| 158 | } | ||
| 117 | 159 | ||
| 118 | /* | 160 | /* |
| 119 | * IDA - IDR based id allocator, use when translation from id to | 161 | * IDA - IDR based id allocator, use when translation from id to |
| @@ -141,7 +183,6 @@ struct ida { | |||
| 141 | 183 | ||
| 142 | int ida_pre_get(struct ida *ida, gfp_t gfp_mask); | 184 | int ida_pre_get(struct ida *ida, gfp_t gfp_mask); |
| 143 | int ida_get_new_above(struct ida *ida, int starting_id, int *p_id); | 185 | int ida_get_new_above(struct ida *ida, int starting_id, int *p_id); |
| 144 | int ida_get_new(struct ida *ida, int *p_id); | ||
| 145 | void ida_remove(struct ida *ida, int id); | 186 | void ida_remove(struct ida *ida, int id); |
| 146 | void ida_destroy(struct ida *ida); | 187 | void ida_destroy(struct ida *ida); |
| 147 | void ida_init(struct ida *ida); | 188 | void ida_init(struct ida *ida); |
| @@ -150,17 +191,18 @@ int ida_simple_get(struct ida *ida, unsigned int start, unsigned int end, | |||
| 150 | gfp_t gfp_mask); | 191 | gfp_t gfp_mask); |
| 151 | void ida_simple_remove(struct ida *ida, unsigned int id); | 192 | void ida_simple_remove(struct ida *ida, unsigned int id); |
| 152 | 193 | ||
| 153 | void __init idr_init_cache(void); | ||
| 154 | |||
| 155 | /** | 194 | /** |
| 156 | * idr_for_each_entry - iterate over an idr's elements of a given type | 195 | * ida_get_new - allocate new ID |
| 157 | * @idp: idr handle | 196 | * @ida: idr handle |
| 158 | * @entry: the type * to use as cursor | 197 | * @p_id: pointer to the allocated handle |
| 159 | * @id: id entry's key | 198 | * |
| 199 | * Simple wrapper around ida_get_new_above() w/ @starting_id of zero. | ||
| 160 | */ | 200 | */ |
| 161 | #define idr_for_each_entry(idp, entry, id) \ | 201 | static inline int ida_get_new(struct ida *ida, int *p_id) |
| 162 | for (id = 0, entry = (typeof(entry))idr_get_next((idp), &(id)); \ | 202 | { |
| 163 | entry != NULL; \ | 203 | return ida_get_new_above(ida, 0, p_id); |
| 164 | ++id, entry = (typeof(entry))idr_get_next((idp), &(id))) | 204 | } |
| 205 | |||
| 206 | void __init idr_init_cache(void); | ||
| 165 | 207 | ||
| 166 | #endif /* __IDR_H__ */ | 208 | #endif /* __IDR_H__ */ |
diff --git a/include/linux/if_team.h b/include/linux/if_team.h index 4648d8021244..cfd21e3d5506 100644 --- a/include/linux/if_team.h +++ b/include/linux/if_team.h | |||
| @@ -216,11 +216,10 @@ static inline struct hlist_head *team_port_index_hash(struct team *team, | |||
| 216 | static inline struct team_port *team_get_port_by_index(struct team *team, | 216 | static inline struct team_port *team_get_port_by_index(struct team *team, |
| 217 | int port_index) | 217 | int port_index) |
| 218 | { | 218 | { |
| 219 | struct hlist_node *p; | ||
| 220 | struct team_port *port; | 219 | struct team_port *port; |
| 221 | struct hlist_head *head = team_port_index_hash(team, port_index); | 220 | struct hlist_head *head = team_port_index_hash(team, port_index); |
| 222 | 221 | ||
| 223 | hlist_for_each_entry(port, p, head, hlist) | 222 | hlist_for_each_entry(port, head, hlist) |
| 224 | if (port->index == port_index) | 223 | if (port->index == port_index) |
| 225 | return port; | 224 | return port; |
| 226 | return NULL; | 225 | return NULL; |
| @@ -228,11 +227,10 @@ static inline struct team_port *team_get_port_by_index(struct team *team, | |||
| 228 | static inline struct team_port *team_get_port_by_index_rcu(struct team *team, | 227 | static inline struct team_port *team_get_port_by_index_rcu(struct team *team, |
| 229 | int port_index) | 228 | int port_index) |
| 230 | { | 229 | { |
| 231 | struct hlist_node *p; | ||
| 232 | struct team_port *port; | 230 | struct team_port *port; |
| 233 | struct hlist_head *head = team_port_index_hash(team, port_index); | 231 | struct hlist_head *head = team_port_index_hash(team, port_index); |
| 234 | 232 | ||
| 235 | hlist_for_each_entry_rcu(port, p, head, hlist) | 233 | hlist_for_each_entry_rcu(port, head, hlist) |
| 236 | if (port->index == port_index) | 234 | if (port->index == port_index) |
| 237 | return port; | 235 | return port; |
| 238 | return NULL; | 236 | return NULL; |
diff --git a/include/linux/ipmi.h b/include/linux/ipmi.h index 1487e7906bbd..1f9f56e28851 100644 --- a/include/linux/ipmi.h +++ b/include/linux/ipmi.h | |||
| @@ -35,10 +35,6 @@ | |||
| 35 | 35 | ||
| 36 | #include <uapi/linux/ipmi.h> | 36 | #include <uapi/linux/ipmi.h> |
| 37 | 37 | ||
| 38 | |||
| 39 | /* | ||
| 40 | * The in-kernel interface. | ||
| 41 | */ | ||
| 42 | #include <linux/list.h> | 38 | #include <linux/list.h> |
| 43 | #include <linux/proc_fs.h> | 39 | #include <linux/proc_fs.h> |
| 44 | 40 | ||
diff --git a/include/linux/list.h b/include/linux/list.h index cc6d2aa6b415..d991cc147c98 100644 --- a/include/linux/list.h +++ b/include/linux/list.h | |||
| @@ -666,54 +666,49 @@ static inline void hlist_move_list(struct hlist_head *old, | |||
| 666 | for (pos = (head)->first; pos && ({ n = pos->next; 1; }); \ | 666 | for (pos = (head)->first; pos && ({ n = pos->next; 1; }); \ |
| 667 | pos = n) | 667 | pos = n) |
| 668 | 668 | ||
| 669 | #define hlist_entry_safe(ptr, type, member) \ | ||
| 670 | (ptr) ? hlist_entry(ptr, type, member) : NULL | ||
| 671 | |||
| 669 | /** | 672 | /** |
| 670 | * hlist_for_each_entry - iterate over list of given type | 673 | * hlist_for_each_entry - iterate over list of given type |
| 671 | * @tpos: the type * to use as a loop cursor. | 674 | * @pos: the type * to use as a loop cursor. |
| 672 | * @pos: the &struct hlist_node to use as a loop cursor. | ||
| 673 | * @head: the head for your list. | 675 | * @head: the head for your list. |
| 674 | * @member: the name of the hlist_node within the struct. | 676 | * @member: the name of the hlist_node within the struct. |
| 675 | */ | 677 | */ |
| 676 | #define hlist_for_each_entry(tpos, pos, head, member) \ | 678 | #define hlist_for_each_entry(pos, head, member) \ |
| 677 | for (pos = (head)->first; \ | 679 | for (pos = hlist_entry_safe((head)->first, typeof(*(pos)), member);\ |
| 678 | pos && \ | 680 | pos; \ |
| 679 | ({ tpos = hlist_entry(pos, typeof(*tpos), member); 1;}); \ | 681 | pos = hlist_entry_safe((pos)->member.next, typeof(*(pos)), member)) |
| 680 | pos = pos->next) | ||
| 681 | 682 | ||
| 682 | /** | 683 | /** |
| 683 | * hlist_for_each_entry_continue - iterate over a hlist continuing after current point | 684 | * hlist_for_each_entry_continue - iterate over a hlist continuing after current point |
| 684 | * @tpos: the type * to use as a loop cursor. | 685 | * @pos: the type * to use as a loop cursor. |
| 685 | * @pos: the &struct hlist_node to use as a loop cursor. | ||
| 686 | * @member: the name of the hlist_node within the struct. | 686 | * @member: the name of the hlist_node within the struct. |
| 687 | */ | 687 | */ |
| 688 | #define hlist_for_each_entry_continue(tpos, pos, member) \ | 688 | #define hlist_for_each_entry_continue(pos, member) \ |
| 689 | for (pos = (pos)->next; \ | 689 | for (pos = hlist_entry_safe((pos)->member.next, typeof(*(pos)), member);\ |
| 690 | pos && \ | 690 | pos; \ |
| 691 | ({ tpos = hlist_entry(pos, typeof(*tpos), member); 1;}); \ | 691 | pos = hlist_entry_safe((pos)->member.next, typeof(*(pos)), member)) |
| 692 | pos = pos->next) | ||
| 693 | 692 | ||
| 694 | /** | 693 | /** |
| 695 | * hlist_for_each_entry_from - iterate over a hlist continuing from current point | 694 | * hlist_for_each_entry_from - iterate over a hlist continuing from current point |
| 696 | * @tpos: the type * to use as a loop cursor. | 695 | * @pos: the type * to use as a loop cursor. |
| 697 | * @pos: the &struct hlist_node to use as a loop cursor. | ||
| 698 | * @member: the name of the hlist_node within the struct. | 696 | * @member: the name of the hlist_node within the struct. |
| 699 | */ | 697 | */ |
| 700 | #define hlist_for_each_entry_from(tpos, pos, member) \ | 698 | #define hlist_for_each_entry_from(pos, member) \ |
| 701 | for (; pos && \ | 699 | for (; pos; \ |
| 702 | ({ tpos = hlist_entry(pos, typeof(*tpos), member); 1;}); \ | 700 | pos = hlist_entry_safe((pos)->member.next, typeof(*(pos)), member)) |
| 703 | pos = pos->next) | ||
| 704 | 701 | ||
| 705 | /** | 702 | /** |
| 706 | * hlist_for_each_entry_safe - iterate over list of given type safe against removal of list entry | 703 | * hlist_for_each_entry_safe - iterate over list of given type safe against removal of list entry |
| 707 | * @tpos: the type * to use as a loop cursor. | 704 | * @pos: the type * to use as a loop cursor. |
| 708 | * @pos: the &struct hlist_node to use as a loop cursor. | ||
| 709 | * @n: another &struct hlist_node to use as temporary storage | 705 | * @n: another &struct hlist_node to use as temporary storage |
| 710 | * @head: the head for your list. | 706 | * @head: the head for your list. |
| 711 | * @member: the name of the hlist_node within the struct. | 707 | * @member: the name of the hlist_node within the struct. |
| 712 | */ | 708 | */ |
| 713 | #define hlist_for_each_entry_safe(tpos, pos, n, head, member) \ | 709 | #define hlist_for_each_entry_safe(pos, n, head, member) \ |
| 714 | for (pos = (head)->first; \ | 710 | for (pos = hlist_entry_safe((head)->first, typeof(*pos), member);\ |
| 715 | pos && ({ n = pos->next; 1; }) && \ | 711 | pos && ({ n = pos->member.next; 1; }); \ |
| 716 | ({ tpos = hlist_entry(pos, typeof(*tpos), member); 1;}); \ | 712 | pos = hlist_entry_safe(n, typeof(*pos), member)) |
| 717 | pos = n) | ||
| 718 | 713 | ||
| 719 | #endif | 714 | #endif |
diff --git a/include/linux/mfd/lp8788.h b/include/linux/mfd/lp8788.h index 2a32b16f79cb..786bf6679a28 100644 --- a/include/linux/mfd/lp8788.h +++ b/include/linux/mfd/lp8788.h | |||
| @@ -16,6 +16,7 @@ | |||
| 16 | 16 | ||
| 17 | #include <linux/gpio.h> | 17 | #include <linux/gpio.h> |
| 18 | #include <linux/irqdomain.h> | 18 | #include <linux/irqdomain.h> |
| 19 | #include <linux/pwm.h> | ||
| 19 | #include <linux/regmap.h> | 20 | #include <linux/regmap.h> |
| 20 | 21 | ||
| 21 | #define LP8788_DEV_BUCK "lp8788-buck" | 22 | #define LP8788_DEV_BUCK "lp8788-buck" |
| @@ -124,11 +125,6 @@ enum lp8788_bl_ramp_step { | |||
| 124 | LP8788_RAMP_65538us, | 125 | LP8788_RAMP_65538us, |
| 125 | }; | 126 | }; |
| 126 | 127 | ||
| 127 | enum lp8788_bl_pwm_polarity { | ||
| 128 | LP8788_PWM_ACTIVE_HIGH, | ||
| 129 | LP8788_PWM_ACTIVE_LOW, | ||
| 130 | }; | ||
| 131 | |||
| 132 | enum lp8788_isink_scale { | 128 | enum lp8788_isink_scale { |
| 133 | LP8788_ISINK_SCALE_100mA, | 129 | LP8788_ISINK_SCALE_100mA, |
| 134 | LP8788_ISINK_SCALE_120mA, | 130 | LP8788_ISINK_SCALE_120mA, |
| @@ -229,16 +225,6 @@ struct lp8788_charger_platform_data { | |||
| 229 | }; | 225 | }; |
| 230 | 226 | ||
| 231 | /* | 227 | /* |
| 232 | * struct lp8788_bl_pwm_data | ||
| 233 | * @pwm_set_intensity : set duty of pwm | ||
| 234 | * @pwm_get_intensity : get current duty of pwm | ||
| 235 | */ | ||
| 236 | struct lp8788_bl_pwm_data { | ||
| 237 | void (*pwm_set_intensity) (int brightness, int max_brightness); | ||
| 238 | int (*pwm_get_intensity) (int max_brightness); | ||
| 239 | }; | ||
| 240 | |||
| 241 | /* | ||
| 242 | * struct lp8788_backlight_platform_data | 228 | * struct lp8788_backlight_platform_data |
| 243 | * @name : backlight driver name. (default: "lcd-backlight") | 229 | * @name : backlight driver name. (default: "lcd-backlight") |
| 244 | * @initial_brightness : initial value of backlight brightness | 230 | * @initial_brightness : initial value of backlight brightness |
| @@ -248,8 +234,8 @@ struct lp8788_bl_pwm_data { | |||
| 248 | * @rise_time : brightness ramp up step time | 234 | * @rise_time : brightness ramp up step time |
| 249 | * @fall_time : brightness ramp down step time | 235 | * @fall_time : brightness ramp down step time |
| 250 | * @pwm_pol : pwm polarity setting when bl_mode is pwm based | 236 | * @pwm_pol : pwm polarity setting when bl_mode is pwm based |
| 251 | * @pwm_data : platform specific pwm generation functions | 237 | * @period_ns : platform specific pwm period value. unit is nano. |
| 252 | * only valid when bl_mode is pwm based | 238 | Only valid when bl_mode is LP8788_BL_COMB_PWM_BASED |
| 253 | */ | 239 | */ |
| 254 | struct lp8788_backlight_platform_data { | 240 | struct lp8788_backlight_platform_data { |
| 255 | char *name; | 241 | char *name; |
| @@ -259,8 +245,8 @@ struct lp8788_backlight_platform_data { | |||
| 259 | enum lp8788_bl_full_scale_current full_scale; | 245 | enum lp8788_bl_full_scale_current full_scale; |
| 260 | enum lp8788_bl_ramp_step rise_time; | 246 | enum lp8788_bl_ramp_step rise_time; |
| 261 | enum lp8788_bl_ramp_step fall_time; | 247 | enum lp8788_bl_ramp_step fall_time; |
| 262 | enum lp8788_bl_pwm_polarity pwm_pol; | 248 | enum pwm_polarity pwm_pol; |
| 263 | struct lp8788_bl_pwm_data pwm_data; | 249 | unsigned int period_ns; |
| 264 | }; | 250 | }; |
| 265 | 251 | ||
| 266 | /* | 252 | /* |
diff --git a/include/linux/pid.h b/include/linux/pid.h index 2381c973d897..a089a3c447fc 100644 --- a/include/linux/pid.h +++ b/include/linux/pid.h | |||
| @@ -176,9 +176,8 @@ pid_t pid_vnr(struct pid *pid); | |||
| 176 | 176 | ||
| 177 | #define do_each_pid_task(pid, type, task) \ | 177 | #define do_each_pid_task(pid, type, task) \ |
| 178 | do { \ | 178 | do { \ |
| 179 | struct hlist_node *pos___; \ | ||
| 180 | if ((pid) != NULL) \ | 179 | if ((pid) != NULL) \ |
| 181 | hlist_for_each_entry_rcu((task), pos___, \ | 180 | hlist_for_each_entry_rcu((task), \ |
| 182 | &(pid)->tasks[type], pids[type].node) { | 181 | &(pid)->tasks[type], pids[type].node) { |
| 183 | 182 | ||
| 184 | /* | 183 | /* |
diff --git a/include/linux/rculist.h b/include/linux/rculist.h index c92dd28eaa6c..8089e35d47ac 100644 --- a/include/linux/rculist.h +++ b/include/linux/rculist.h | |||
| @@ -445,8 +445,7 @@ static inline void hlist_add_after_rcu(struct hlist_node *prev, | |||
| 445 | 445 | ||
| 446 | /** | 446 | /** |
| 447 | * hlist_for_each_entry_rcu - iterate over rcu list of given type | 447 | * hlist_for_each_entry_rcu - iterate over rcu list of given type |
| 448 | * @tpos: the type * to use as a loop cursor. | 448 | * @pos: the type * to use as a loop cursor. |
| 449 | * @pos: the &struct hlist_node to use as a loop cursor. | ||
| 450 | * @head: the head for your list. | 449 | * @head: the head for your list. |
| 451 | * @member: the name of the hlist_node within the struct. | 450 | * @member: the name of the hlist_node within the struct. |
| 452 | * | 451 | * |
| @@ -454,16 +453,16 @@ static inline void hlist_add_after_rcu(struct hlist_node *prev, | |||
| 454 | * the _rcu list-mutation primitives such as hlist_add_head_rcu() | 453 | * the _rcu list-mutation primitives such as hlist_add_head_rcu() |
| 455 | * as long as the traversal is guarded by rcu_read_lock(). | 454 | * as long as the traversal is guarded by rcu_read_lock(). |
| 456 | */ | 455 | */ |
| 457 | #define hlist_for_each_entry_rcu(tpos, pos, head, member) \ | 456 | #define hlist_for_each_entry_rcu(pos, head, member) \ |
| 458 | for (pos = rcu_dereference_raw(hlist_first_rcu(head)); \ | 457 | for (pos = hlist_entry_safe (rcu_dereference_raw(hlist_first_rcu(head)),\ |
| 459 | pos && \ | 458 | typeof(*(pos)), member); \ |
| 460 | ({ tpos = hlist_entry(pos, typeof(*tpos), member); 1; }); \ | 459 | pos; \ |
| 461 | pos = rcu_dereference_raw(hlist_next_rcu(pos))) | 460 | pos = hlist_entry_safe(rcu_dereference_raw(hlist_next_rcu(\ |
| 461 | &(pos)->member)), typeof(*(pos)), member)) | ||
| 462 | 462 | ||
| 463 | /** | 463 | /** |
| 464 | * hlist_for_each_entry_rcu_bh - iterate over rcu list of given type | 464 | * hlist_for_each_entry_rcu_bh - iterate over rcu list of given type |
| 465 | * @tpos: the type * to use as a loop cursor. | 465 | * @pos: the type * to use as a loop cursor. |
| 466 | * @pos: the &struct hlist_node to use as a loop cursor. | ||
| 467 | * @head: the head for your list. | 466 | * @head: the head for your list. |
| 468 | * @member: the name of the hlist_node within the struct. | 467 | * @member: the name of the hlist_node within the struct. |
| 469 | * | 468 | * |
| @@ -471,35 +470,36 @@ static inline void hlist_add_after_rcu(struct hlist_node *prev, | |||
| 471 | * the _rcu list-mutation primitives such as hlist_add_head_rcu() | 470 | * the _rcu list-mutation primitives such as hlist_add_head_rcu() |
| 472 | * as long as the traversal is guarded by rcu_read_lock(). | 471 | * as long as the traversal is guarded by rcu_read_lock(). |
| 473 | */ | 472 | */ |
| 474 | #define hlist_for_each_entry_rcu_bh(tpos, pos, head, member) \ | 473 | #define hlist_for_each_entry_rcu_bh(pos, head, member) \ |
| 475 | for (pos = rcu_dereference_bh((head)->first); \ | 474 | for (pos = hlist_entry_safe(rcu_dereference_bh(hlist_first_rcu(head)),\ |
| 476 | pos && \ | 475 | typeof(*(pos)), member); \ |
| 477 | ({ tpos = hlist_entry(pos, typeof(*tpos), member); 1; }); \ | 476 | pos; \ |
| 478 | pos = rcu_dereference_bh(pos->next)) | 477 | pos = hlist_entry_safe(rcu_dereference_bh(hlist_next_rcu(\ |
| 478 | &(pos)->member)), typeof(*(pos)), member)) | ||
| 479 | 479 | ||
| 480 | /** | 480 | /** |
| 481 | * hlist_for_each_entry_continue_rcu - iterate over a hlist continuing after current point | 481 | * hlist_for_each_entry_continue_rcu - iterate over a hlist continuing after current point |
| 482 | * @tpos: the type * to use as a loop cursor. | 482 | * @pos: the type * to use as a loop cursor. |
| 483 | * @pos: the &struct hlist_node to use as a loop cursor. | ||
| 484 | * @member: the name of the hlist_node within the struct. | 483 | * @member: the name of the hlist_node within the struct. |
| 485 | */ | 484 | */ |
| 486 | #define hlist_for_each_entry_continue_rcu(tpos, pos, member) \ | 485 | #define hlist_for_each_entry_continue_rcu(pos, member) \ |
| 487 | for (pos = rcu_dereference((pos)->next); \ | 486 | for (pos = hlist_entry_safe(rcu_dereference((pos)->member.next),\ |
| 488 | pos && \ | 487 | typeof(*(pos)), member); \ |
| 489 | ({ tpos = hlist_entry(pos, typeof(*tpos), member); 1; }); \ | 488 | pos; \ |
| 490 | pos = rcu_dereference(pos->next)) | 489 | pos = hlist_entry_safe(rcu_dereference((pos)->member.next),\ |
| 490 | typeof(*(pos)), member)) | ||
| 491 | 491 | ||
| 492 | /** | 492 | /** |
| 493 | * hlist_for_each_entry_continue_rcu_bh - iterate over a hlist continuing after current point | 493 | * hlist_for_each_entry_continue_rcu_bh - iterate over a hlist continuing after current point |
| 494 | * @tpos: the type * to use as a loop cursor. | 494 | * @pos: the type * to use as a loop cursor. |
| 495 | * @pos: the &struct hlist_node to use as a loop cursor. | ||
| 496 | * @member: the name of the hlist_node within the struct. | 495 | * @member: the name of the hlist_node within the struct. |
| 497 | */ | 496 | */ |
| 498 | #define hlist_for_each_entry_continue_rcu_bh(tpos, pos, member) \ | 497 | #define hlist_for_each_entry_continue_rcu_bh(pos, member) \ |
| 499 | for (pos = rcu_dereference_bh((pos)->next); \ | 498 | for (pos = hlist_entry_safe(rcu_dereference_bh((pos)->member.next),\ |
| 500 | pos && \ | 499 | typeof(*(pos)), member); \ |
| 501 | ({ tpos = hlist_entry(pos, typeof(*tpos), member); 1; }); \ | 500 | pos; \ |
| 502 | pos = rcu_dereference_bh(pos->next)) | 501 | pos = hlist_entry_safe(rcu_dereference_bh((pos)->member.next),\ |
| 502 | typeof(*(pos)), member)) | ||
| 503 | 503 | ||
| 504 | 504 | ||
| 505 | #endif /* __KERNEL__ */ | 505 | #endif /* __KERNEL__ */ |
diff --git a/include/linux/scatterlist.h b/include/linux/scatterlist.h index 4bd6c06eb28e..2d8bdaef9611 100644 --- a/include/linux/scatterlist.h +++ b/include/linux/scatterlist.h | |||
| @@ -231,6 +231,41 @@ size_t sg_copy_to_buffer(struct scatterlist *sgl, unsigned int nents, | |||
| 231 | */ | 231 | */ |
| 232 | #define SG_MAX_SINGLE_ALLOC (PAGE_SIZE / sizeof(struct scatterlist)) | 232 | #define SG_MAX_SINGLE_ALLOC (PAGE_SIZE / sizeof(struct scatterlist)) |
| 233 | 233 | ||
| 234 | /* | ||
| 235 | * sg page iterator | ||
| 236 | * | ||
| 237 | * Iterates over sg entries page-by-page. On each successful iteration, | ||
| 238 | * @piter->page points to the current page, @piter->sg to the sg holding this | ||
| 239 | * page and @piter->sg_pgoffset to the page's page offset within the sg. The | ||
| 240 | * iteration will stop either when a maximum number of sg entries was reached | ||
| 241 | * or a terminating sg (sg_last(sg) == true) was reached. | ||
| 242 | */ | ||
| 243 | struct sg_page_iter { | ||
| 244 | struct page *page; /* current page */ | ||
| 245 | struct scatterlist *sg; /* sg holding the page */ | ||
| 246 | unsigned int sg_pgoffset; /* page offset within the sg */ | ||
| 247 | |||
| 248 | /* these are internal states, keep away */ | ||
| 249 | unsigned int __nents; /* remaining sg entries */ | ||
| 250 | int __pg_advance; /* nr pages to advance at the | ||
| 251 | * next step */ | ||
| 252 | }; | ||
| 253 | |||
| 254 | bool __sg_page_iter_next(struct sg_page_iter *piter); | ||
| 255 | void __sg_page_iter_start(struct sg_page_iter *piter, | ||
| 256 | struct scatterlist *sglist, unsigned int nents, | ||
| 257 | unsigned long pgoffset); | ||
| 258 | |||
| 259 | /** | ||
| 260 | * for_each_sg_page - iterate over the pages of the given sg list | ||
| 261 | * @sglist: sglist to iterate over | ||
| 262 | * @piter: page iterator to hold current page, sg, sg_pgoffset | ||
| 263 | * @nents: maximum number of sg entries to iterate over | ||
| 264 | * @pgoffset: starting page offset | ||
| 265 | */ | ||
| 266 | #define for_each_sg_page(sglist, piter, nents, pgoffset) \ | ||
| 267 | for (__sg_page_iter_start((piter), (sglist), (nents), (pgoffset)); \ | ||
| 268 | __sg_page_iter_next(piter);) | ||
| 234 | 269 | ||
| 235 | /* | 270 | /* |
| 236 | * Mapping sg iterator | 271 | * Mapping sg iterator |
| @@ -258,11 +293,11 @@ struct sg_mapping_iter { | |||
| 258 | void *addr; /* pointer to the mapped area */ | 293 | void *addr; /* pointer to the mapped area */ |
| 259 | size_t length; /* length of the mapped area */ | 294 | size_t length; /* length of the mapped area */ |
| 260 | size_t consumed; /* number of consumed bytes */ | 295 | size_t consumed; /* number of consumed bytes */ |
| 296 | struct sg_page_iter piter; /* page iterator */ | ||
| 261 | 297 | ||
| 262 | /* these are internal states, keep away */ | 298 | /* these are internal states, keep away */ |
| 263 | struct scatterlist *__sg; /* current entry */ | 299 | unsigned int __offset; /* offset within page */ |
| 264 | unsigned int __nents; /* nr of remaining entries */ | 300 | unsigned int __remaining; /* remaining bytes on page */ |
| 265 | unsigned int __offset; /* offset within sg */ | ||
| 266 | unsigned int __flags; | 301 | unsigned int __flags; |
| 267 | }; | 302 | }; |
| 268 | 303 | ||
diff --git a/include/linux/sched.h b/include/linux/sched.h index 6853bf947fde..d35d2b6ddbfb 100644 --- a/include/linux/sched.h +++ b/include/linux/sched.h | |||
| @@ -346,11 +346,6 @@ static inline void arch_pick_mmap_layout(struct mm_struct *mm) {} | |||
| 346 | extern void set_dumpable(struct mm_struct *mm, int value); | 346 | extern void set_dumpable(struct mm_struct *mm, int value); |
| 347 | extern int get_dumpable(struct mm_struct *mm); | 347 | extern int get_dumpable(struct mm_struct *mm); |
| 348 | 348 | ||
| 349 | /* get/set_dumpable() values */ | ||
| 350 | #define SUID_DUMPABLE_DISABLED 0 | ||
| 351 | #define SUID_DUMPABLE_ENABLED 1 | ||
| 352 | #define SUID_DUMPABLE_SAFE 2 | ||
| 353 | |||
| 354 | /* mm flags */ | 349 | /* mm flags */ |
| 355 | /* dumpable bits */ | 350 | /* dumpable bits */ |
| 356 | #define MMF_DUMPABLE 0 /* core dump is permitted */ | 351 | #define MMF_DUMPABLE 0 /* core dump is permitted */ |
diff --git a/include/net/ax25.h b/include/net/ax25.h index 53539acbd81a..89ed9ac5701f 100644 --- a/include/net/ax25.h +++ b/include/net/ax25.h | |||
| @@ -161,8 +161,8 @@ typedef struct ax25_uid_assoc { | |||
| 161 | ax25_address call; | 161 | ax25_address call; |
| 162 | } ax25_uid_assoc; | 162 | } ax25_uid_assoc; |
| 163 | 163 | ||
| 164 | #define ax25_uid_for_each(__ax25, node, list) \ | 164 | #define ax25_uid_for_each(__ax25, list) \ |
| 165 | hlist_for_each_entry(__ax25, node, list, uid_node) | 165 | hlist_for_each_entry(__ax25, list, uid_node) |
| 166 | 166 | ||
| 167 | #define ax25_uid_hold(ax25) \ | 167 | #define ax25_uid_hold(ax25) \ |
| 168 | atomic_inc(&((ax25)->refcount)) | 168 | atomic_inc(&((ax25)->refcount)) |
| @@ -247,8 +247,8 @@ typedef struct ax25_cb { | |||
| 247 | 247 | ||
| 248 | #define ax25_sk(__sk) ((ax25_cb *)(__sk)->sk_protinfo) | 248 | #define ax25_sk(__sk) ((ax25_cb *)(__sk)->sk_protinfo) |
| 249 | 249 | ||
| 250 | #define ax25_for_each(__ax25, node, list) \ | 250 | #define ax25_for_each(__ax25, list) \ |
| 251 | hlist_for_each_entry(__ax25, node, list, ax25_node) | 251 | hlist_for_each_entry(__ax25, list, ax25_node) |
| 252 | 252 | ||
| 253 | #define ax25_cb_hold(__ax25) \ | 253 | #define ax25_cb_hold(__ax25) \ |
| 254 | atomic_inc(&((__ax25)->refcount)) | 254 | atomic_inc(&((__ax25)->refcount)) |
diff --git a/include/net/inet_hashtables.h b/include/net/inet_hashtables.h index 7b2ae9d37076..ef83d9e844b5 100644 --- a/include/net/inet_hashtables.h +++ b/include/net/inet_hashtables.h | |||
| @@ -94,8 +94,8 @@ static inline struct net *ib_net(struct inet_bind_bucket *ib) | |||
| 94 | return read_pnet(&ib->ib_net); | 94 | return read_pnet(&ib->ib_net); |
| 95 | } | 95 | } |
| 96 | 96 | ||
| 97 | #define inet_bind_bucket_for_each(tb, pos, head) \ | 97 | #define inet_bind_bucket_for_each(tb, head) \ |
| 98 | hlist_for_each_entry(tb, pos, head, node) | 98 | hlist_for_each_entry(tb, head, node) |
| 99 | 99 | ||
| 100 | struct inet_bind_hashbucket { | 100 | struct inet_bind_hashbucket { |
| 101 | spinlock_t lock; | 101 | spinlock_t lock; |
diff --git a/include/net/inet_timewait_sock.h b/include/net/inet_timewait_sock.h index 7d658d577368..f908dfc06505 100644 --- a/include/net/inet_timewait_sock.h +++ b/include/net/inet_timewait_sock.h | |||
| @@ -178,11 +178,11 @@ static inline int inet_twsk_del_dead_node(struct inet_timewait_sock *tw) | |||
| 178 | #define inet_twsk_for_each(tw, node, head) \ | 178 | #define inet_twsk_for_each(tw, node, head) \ |
| 179 | hlist_nulls_for_each_entry(tw, node, head, tw_node) | 179 | hlist_nulls_for_each_entry(tw, node, head, tw_node) |
| 180 | 180 | ||
| 181 | #define inet_twsk_for_each_inmate(tw, node, jail) \ | 181 | #define inet_twsk_for_each_inmate(tw, jail) \ |
| 182 | hlist_for_each_entry(tw, node, jail, tw_death_node) | 182 | hlist_for_each_entry(tw, jail, tw_death_node) |
| 183 | 183 | ||
| 184 | #define inet_twsk_for_each_inmate_safe(tw, node, safe, jail) \ | 184 | #define inet_twsk_for_each_inmate_safe(tw, safe, jail) \ |
| 185 | hlist_for_each_entry_safe(tw, node, safe, jail, tw_death_node) | 185 | hlist_for_each_entry_safe(tw, safe, jail, tw_death_node) |
| 186 | 186 | ||
| 187 | static inline struct inet_timewait_sock *inet_twsk(const struct sock *sk) | 187 | static inline struct inet_timewait_sock *inet_twsk(const struct sock *sk) |
| 188 | { | 188 | { |
diff --git a/include/net/netrom.h b/include/net/netrom.h index f0793c1cb5f8..121dcf854db5 100644 --- a/include/net/netrom.h +++ b/include/net/netrom.h | |||
| @@ -154,17 +154,17 @@ static __inline__ void nr_node_unlock(struct nr_node *nr_node) | |||
| 154 | nr_node_put(nr_node); | 154 | nr_node_put(nr_node); |
| 155 | } | 155 | } |
| 156 | 156 | ||
| 157 | #define nr_neigh_for_each(__nr_neigh, node, list) \ | 157 | #define nr_neigh_for_each(__nr_neigh, list) \ |
| 158 | hlist_for_each_entry(__nr_neigh, node, list, neigh_node) | 158 | hlist_for_each_entry(__nr_neigh, list, neigh_node) |
| 159 | 159 | ||
| 160 | #define nr_neigh_for_each_safe(__nr_neigh, node, node2, list) \ | 160 | #define nr_neigh_for_each_safe(__nr_neigh, node2, list) \ |
| 161 | hlist_for_each_entry_safe(__nr_neigh, node, node2, list, neigh_node) | 161 | hlist_for_each_entry_safe(__nr_neigh, node2, list, neigh_node) |
| 162 | 162 | ||
| 163 | #define nr_node_for_each(__nr_node, node, list) \ | 163 | #define nr_node_for_each(__nr_node, list) \ |
| 164 | hlist_for_each_entry(__nr_node, node, list, node_node) | 164 | hlist_for_each_entry(__nr_node, list, node_node) |
| 165 | 165 | ||
| 166 | #define nr_node_for_each_safe(__nr_node, node, node2, list) \ | 166 | #define nr_node_for_each_safe(__nr_node, node2, list) \ |
| 167 | hlist_for_each_entry_safe(__nr_node, node, node2, list, node_node) | 167 | hlist_for_each_entry_safe(__nr_node, node2, list, node_node) |
| 168 | 168 | ||
| 169 | 169 | ||
| 170 | /*********************************************************************/ | 170 | /*********************************************************************/ |
diff --git a/include/net/sch_generic.h b/include/net/sch_generic.h index 2761c905504e..f10818fc8804 100644 --- a/include/net/sch_generic.h +++ b/include/net/sch_generic.h | |||
| @@ -339,11 +339,10 @@ static inline struct Qdisc_class_common * | |||
| 339 | qdisc_class_find(const struct Qdisc_class_hash *hash, u32 id) | 339 | qdisc_class_find(const struct Qdisc_class_hash *hash, u32 id) |
| 340 | { | 340 | { |
| 341 | struct Qdisc_class_common *cl; | 341 | struct Qdisc_class_common *cl; |
| 342 | struct hlist_node *n; | ||
| 343 | unsigned int h; | 342 | unsigned int h; |
| 344 | 343 | ||
| 345 | h = qdisc_class_hash(id, hash->hashmask); | 344 | h = qdisc_class_hash(id, hash->hashmask); |
| 346 | hlist_for_each_entry(cl, n, &hash->hash[h], hnode) { | 345 | hlist_for_each_entry(cl, &hash->hash[h], hnode) { |
| 347 | if (cl->classid == id) | 346 | if (cl->classid == id) |
| 348 | return cl; | 347 | return cl; |
| 349 | } | 348 | } |
diff --git a/include/net/sctp/sctp.h b/include/net/sctp/sctp.h index 7fdf298a47ef..df85a0c0f2d5 100644 --- a/include/net/sctp/sctp.h +++ b/include/net/sctp/sctp.h | |||
| @@ -675,8 +675,8 @@ static inline int sctp_vtag_hashfn(__u16 lport, __u16 rport, __u32 vtag) | |||
| 675 | return h & (sctp_assoc_hashsize - 1); | 675 | return h & (sctp_assoc_hashsize - 1); |
| 676 | } | 676 | } |
| 677 | 677 | ||
| 678 | #define sctp_for_each_hentry(epb, node, head) \ | 678 | #define sctp_for_each_hentry(epb, head) \ |
| 679 | hlist_for_each_entry(epb, node, head, node) | 679 | hlist_for_each_entry(epb, head, node) |
| 680 | 680 | ||
| 681 | /* Is a socket of this style? */ | 681 | /* Is a socket of this style? */ |
| 682 | #define sctp_style(sk, style) __sctp_style((sk), (SCTP_SOCKET_##style)) | 682 | #define sctp_style(sk, style) __sctp_style((sk), (SCTP_SOCKET_##style)) |
diff --git a/include/net/sock.h b/include/net/sock.h index a66caa223d18..14f6e9d19dc7 100644 --- a/include/net/sock.h +++ b/include/net/sock.h | |||
| @@ -606,24 +606,23 @@ static inline void sk_add_bind_node(struct sock *sk, | |||
| 606 | hlist_add_head(&sk->sk_bind_node, list); | 606 | hlist_add_head(&sk->sk_bind_node, list); |
| 607 | } | 607 | } |
| 608 | 608 | ||
| 609 | #define sk_for_each(__sk, node, list) \ | 609 | #define sk_for_each(__sk, list) \ |
| 610 | hlist_for_each_entry(__sk, node, list, sk_node) | 610 | hlist_for_each_entry(__sk, list, sk_node) |
| 611 | #define sk_for_each_rcu(__sk, node, list) \ | 611 | #define sk_for_each_rcu(__sk, list) \ |
| 612 | hlist_for_each_entry_rcu(__sk, node, list, sk_node) | 612 | hlist_for_each_entry_rcu(__sk, list, sk_node) |
| 613 | #define sk_nulls_for_each(__sk, node, list) \ | 613 | #define sk_nulls_for_each(__sk, node, list) \ |
| 614 | hlist_nulls_for_each_entry(__sk, node, list, sk_nulls_node) | 614 | hlist_nulls_for_each_entry(__sk, node, list, sk_nulls_node) |
| 615 | #define sk_nulls_for_each_rcu(__sk, node, list) \ | 615 | #define sk_nulls_for_each_rcu(__sk, node, list) \ |
| 616 | hlist_nulls_for_each_entry_rcu(__sk, node, list, sk_nulls_node) | 616 | hlist_nulls_for_each_entry_rcu(__sk, node, list, sk_nulls_node) |
| 617 | #define sk_for_each_from(__sk, node) \ | 617 | #define sk_for_each_from(__sk) \ |
| 618 | if (__sk && ({ node = &(__sk)->sk_node; 1; })) \ | 618 | hlist_for_each_entry_from(__sk, sk_node) |
| 619 | hlist_for_each_entry_from(__sk, node, sk_node) | ||
| 620 | #define sk_nulls_for_each_from(__sk, node) \ | 619 | #define sk_nulls_for_each_from(__sk, node) \ |
| 621 | if (__sk && ({ node = &(__sk)->sk_nulls_node; 1; })) \ | 620 | if (__sk && ({ node = &(__sk)->sk_nulls_node; 1; })) \ |
| 622 | hlist_nulls_for_each_entry_from(__sk, node, sk_nulls_node) | 621 | hlist_nulls_for_each_entry_from(__sk, node, sk_nulls_node) |
| 623 | #define sk_for_each_safe(__sk, node, tmp, list) \ | 622 | #define sk_for_each_safe(__sk, tmp, list) \ |
| 624 | hlist_for_each_entry_safe(__sk, node, tmp, list, sk_node) | 623 | hlist_for_each_entry_safe(__sk, tmp, list, sk_node) |
| 625 | #define sk_for_each_bound(__sk, node, list) \ | 624 | #define sk_for_each_bound(__sk, list) \ |
| 626 | hlist_for_each_entry(__sk, node, list, sk_bind_node) | 625 | hlist_for_each_entry(__sk, list, sk_bind_node) |
| 627 | 626 | ||
| 628 | static inline struct user_namespace *sk_user_ns(struct sock *sk) | 627 | static inline struct user_namespace *sk_user_ns(struct sock *sk) |
| 629 | { | 628 | { |
diff --git a/include/uapi/linux/ipmi.h b/include/uapi/linux/ipmi.h index 33fbc99b3812..7b26a62e5707 100644 --- a/include/uapi/linux/ipmi.h +++ b/include/uapi/linux/ipmi.h | |||
| @@ -59,15 +59,7 @@ | |||
| 59 | * if it becomes full and it is queried once a second to see if | 59 | * if it becomes full and it is queried once a second to see if |
| 60 | * anything is in it. Incoming commands to the driver will get | 60 | * anything is in it. Incoming commands to the driver will get |
| 61 | * delivered as commands. | 61 | * delivered as commands. |
| 62 | * | 62 | */ |
| 63 | * This driver provides two main interfaces: one for in-kernel | ||
| 64 | * applications and another for userland applications. The | ||
| 65 | * capabilities are basically the same for both interface, although | ||
| 66 | * the interfaces are somewhat different. The stuff in the | ||
| 67 | * #ifdef __KERNEL__ below is the in-kernel interface. The userland | ||
| 68 | * interface is defined later in the file. */ | ||
| 69 | |||
| 70 | |||
| 71 | 63 | ||
| 72 | /* | 64 | /* |
| 73 | * This is an overlay for all the address types, so it's easy to | 65 | * This is an overlay for all the address types, so it's easy to |
diff --git a/include/uapi/linux/msdos_fs.h b/include/uapi/linux/msdos_fs.h index 996719f82e28..f055e58b3147 100644 --- a/include/uapi/linux/msdos_fs.h +++ b/include/uapi/linux/msdos_fs.h | |||
| @@ -87,6 +87,8 @@ | |||
| 87 | #define IS_FSINFO(x) (le32_to_cpu((x)->signature1) == FAT_FSINFO_SIG1 \ | 87 | #define IS_FSINFO(x) (le32_to_cpu((x)->signature1) == FAT_FSINFO_SIG1 \ |
| 88 | && le32_to_cpu((x)->signature2) == FAT_FSINFO_SIG2) | 88 | && le32_to_cpu((x)->signature2) == FAT_FSINFO_SIG2) |
| 89 | 89 | ||
| 90 | #define FAT_STATE_DIRTY 0x01 | ||
| 91 | |||
| 90 | struct __fat_dirent { | 92 | struct __fat_dirent { |
| 91 | long d_ino; | 93 | long d_ino; |
| 92 | __kernel_off_t d_off; | 94 | __kernel_off_t d_off; |
| @@ -120,14 +122,34 @@ struct fat_boot_sector { | |||
| 120 | __le32 hidden; /* hidden sectors (unused) */ | 122 | __le32 hidden; /* hidden sectors (unused) */ |
| 121 | __le32 total_sect; /* number of sectors (if sectors == 0) */ | 123 | __le32 total_sect; /* number of sectors (if sectors == 0) */ |
| 122 | 124 | ||
| 123 | /* The following fields are only used by FAT32 */ | 125 | union { |
| 124 | __le32 fat32_length; /* sectors/FAT */ | 126 | struct { |
| 125 | __le16 flags; /* bit 8: fat mirroring, low 4: active fat */ | 127 | /* Extended BPB Fields for FAT16 */ |
| 126 | __u8 version[2]; /* major, minor filesystem version */ | 128 | __u8 drive_number; /* Physical drive number */ |
| 127 | __le32 root_cluster; /* first cluster in root directory */ | 129 | __u8 state; /* undocumented, but used |
| 128 | __le16 info_sector; /* filesystem info sector */ | 130 | for mount state. */ |
| 129 | __le16 backup_boot; /* backup boot sector */ | 131 | /* other fiealds are not added here */ |
| 130 | __le16 reserved2[6]; /* Unused */ | 132 | } fat16; |
| 133 | |||
| 134 | struct { | ||
| 135 | /* only used by FAT32 */ | ||
| 136 | __le32 length; /* sectors/FAT */ | ||
| 137 | __le16 flags; /* bit 8: fat mirroring, | ||
| 138 | low 4: active fat */ | ||
| 139 | __u8 version[2]; /* major, minor filesystem | ||
| 140 | version */ | ||
| 141 | __le32 root_cluster; /* first cluster in | ||
| 142 | root directory */ | ||
| 143 | __le16 info_sector; /* filesystem info sector */ | ||
| 144 | __le16 backup_boot; /* backup boot sector */ | ||
| 145 | __le16 reserved2[6]; /* Unused */ | ||
| 146 | /* Extended BPB Fields for FAT32 */ | ||
| 147 | __u8 drive_number; /* Physical drive number */ | ||
| 148 | __u8 state; /* undocumented, but used | ||
| 149 | for mount state. */ | ||
| 150 | /* other fiealds are not added here */ | ||
| 151 | } fat32; | ||
| 152 | }; | ||
| 131 | }; | 153 | }; |
| 132 | 154 | ||
| 133 | struct fat_boot_fsinfo { | 155 | struct fat_boot_fsinfo { |
diff --git a/include/uapi/linux/nbd.h b/include/uapi/linux/nbd.h index dfb514472cbc..4f52549b23ff 100644 --- a/include/uapi/linux/nbd.h +++ b/include/uapi/linux/nbd.h | |||
| @@ -33,13 +33,14 @@ enum { | |||
| 33 | NBD_CMD_READ = 0, | 33 | NBD_CMD_READ = 0, |
| 34 | NBD_CMD_WRITE = 1, | 34 | NBD_CMD_WRITE = 1, |
| 35 | NBD_CMD_DISC = 2, | 35 | NBD_CMD_DISC = 2, |
| 36 | /* there is a gap here to match userspace */ | 36 | NBD_CMD_FLUSH = 3, |
| 37 | NBD_CMD_TRIM = 4 | 37 | NBD_CMD_TRIM = 4 |
| 38 | }; | 38 | }; |
| 39 | 39 | ||
| 40 | /* values for flags field */ | 40 | /* values for flags field */ |
| 41 | #define NBD_FLAG_HAS_FLAGS (1 << 0) /* nbd-server supports flags */ | 41 | #define NBD_FLAG_HAS_FLAGS (1 << 0) /* nbd-server supports flags */ |
| 42 | #define NBD_FLAG_READ_ONLY (1 << 1) /* device is read-only */ | 42 | #define NBD_FLAG_READ_ONLY (1 << 1) /* device is read-only */ |
| 43 | #define NBD_FLAG_SEND_FLUSH (1 << 2) /* can flush writeback cache */ | ||
| 43 | /* there is a gap here to match userspace */ | 44 | /* there is a gap here to match userspace */ |
| 44 | #define NBD_FLAG_SEND_TRIM (1 << 5) /* send trim/discard */ | 45 | #define NBD_FLAG_SEND_TRIM (1 << 5) /* send trim/discard */ |
| 45 | 46 | ||
diff --git a/include/uapi/linux/xattr.h b/include/uapi/linux/xattr.h index 26607bd965fa..e4629b93bdd6 100644 --- a/include/uapi/linux/xattr.h +++ b/include/uapi/linux/xattr.h | |||
| @@ -15,19 +15,22 @@ | |||
| 15 | 15 | ||
| 16 | /* Namespaces */ | 16 | /* Namespaces */ |
| 17 | #define XATTR_OS2_PREFIX "os2." | 17 | #define XATTR_OS2_PREFIX "os2." |
| 18 | #define XATTR_OS2_PREFIX_LEN (sizeof (XATTR_OS2_PREFIX) - 1) | 18 | #define XATTR_OS2_PREFIX_LEN (sizeof(XATTR_OS2_PREFIX) - 1) |
| 19 | |||
| 20 | #define XATTR_MAC_OSX_PREFIX "osx." | ||
| 21 | #define XATTR_MAC_OSX_PREFIX_LEN (sizeof(XATTR_MAC_OSX_PREFIX) - 1) | ||
| 19 | 22 | ||
| 20 | #define XATTR_SECURITY_PREFIX "security." | 23 | #define XATTR_SECURITY_PREFIX "security." |
| 21 | #define XATTR_SECURITY_PREFIX_LEN (sizeof (XATTR_SECURITY_PREFIX) - 1) | 24 | #define XATTR_SECURITY_PREFIX_LEN (sizeof(XATTR_SECURITY_PREFIX) - 1) |
| 22 | 25 | ||
| 23 | #define XATTR_SYSTEM_PREFIX "system." | 26 | #define XATTR_SYSTEM_PREFIX "system." |
| 24 | #define XATTR_SYSTEM_PREFIX_LEN (sizeof (XATTR_SYSTEM_PREFIX) - 1) | 27 | #define XATTR_SYSTEM_PREFIX_LEN (sizeof(XATTR_SYSTEM_PREFIX) - 1) |
| 25 | 28 | ||
| 26 | #define XATTR_TRUSTED_PREFIX "trusted." | 29 | #define XATTR_TRUSTED_PREFIX "trusted." |
| 27 | #define XATTR_TRUSTED_PREFIX_LEN (sizeof (XATTR_TRUSTED_PREFIX) - 1) | 30 | #define XATTR_TRUSTED_PREFIX_LEN (sizeof(XATTR_TRUSTED_PREFIX) - 1) |
| 28 | 31 | ||
| 29 | #define XATTR_USER_PREFIX "user." | 32 | #define XATTR_USER_PREFIX "user." |
| 30 | #define XATTR_USER_PREFIX_LEN (sizeof (XATTR_USER_PREFIX) - 1) | 33 | #define XATTR_USER_PREFIX_LEN (sizeof(XATTR_USER_PREFIX) - 1) |
| 31 | 34 | ||
| 32 | /* Security namespace */ | 35 | /* Security namespace */ |
| 33 | #define XATTR_EVM_SUFFIX "evm" | 36 | #define XATTR_EVM_SUFFIX "evm" |
