diff options
| author | Linus Torvalds <torvalds@linux-foundation.org> | 2013-03-13 18:21:57 -0400 |
|---|---|---|
| committer | Linus Torvalds <torvalds@linux-foundation.org> | 2013-03-13 18:21:57 -0400 |
| commit | 842d223f28c4a4a6fe34df2d613049d4e47446c1 (patch) | |
| tree | fe24924112a915651eb8cc2c03836a695db6b7d7 | |
| parent | ad8395e149e86ca3a76b6ae300c0d0a92b7f7e17 (diff) | |
| parent | 59bfbcf01967d4d3370a2b8294673dd709e732cc (diff) | |
Merge branch 'akpm' (fixes from Andrew)
Merge misc fixes from Andrew Morton:
- A bunch of fixes
- Finish off the idr API conversions before someone starts to use the
old interfaces again.
* emailed patches from Andrew Morton <akpm@linux-foundation.org>:
idr: idr_alloc() shouldn't trigger lowmem warning when preloaded
UAPI: fix endianness conditionals in M32R's asm/stat.h
UAPI: fix endianness conditionals in linux/raid/md_p.h
UAPI: fix endianness conditionals in linux/acct.h
UAPI: fix endianness conditionals in linux/aio_abi.h
decompressors: fix typo "POWERPC"
mm/fremap.c: fix oops on error path
idr: deprecate idr_pre_get() and idr_get_new[_above]()
tidspbridge: convert to idr_alloc()
zcache: convert to idr_alloc()
mlx4: remove leftover idr_pre_get() call
workqueue: convert to idr_alloc()
nfsd: convert to idr_alloc()
nfsd: remove unused get_new_stid()
kernel/signal.c: use __ARCH_HAS_SA_RESTORER instead of SA_RESTORER
signal: always clear sa_restorer on execve
mm: remove_memory(): fix end_pfn setting
include/linux/res_counter.h needs errno.h
| -rw-r--r-- | arch/m32r/include/uapi/asm/stat.h | 4 | ||||
| -rw-r--r-- | drivers/infiniband/hw/mlx4/cm.c | 1 | ||||
| -rw-r--r-- | drivers/staging/tidspbridge/rmgr/drv.c | 70 | ||||
| -rw-r--r-- | drivers/staging/zcache/ramster/tcp.c | 25 | ||||
| -rw-r--r-- | fs/nfsd/nfs4state.c | 36 | ||||
| -rw-r--r-- | include/linux/idr.h | 66 | ||||
| -rw-r--r-- | include/linux/res_counter.h | 1 | ||||
| -rw-r--r-- | include/uapi/linux/acct.h | 6 | ||||
| -rw-r--r-- | include/uapi/linux/aio_abi.h | 4 | ||||
| -rw-r--r-- | include/uapi/linux/raid/md_p.h | 6 | ||||
| -rw-r--r-- | kernel/signal.c | 3 | ||||
| -rw-r--r-- | kernel/workqueue.c | 7 | ||||
| -rw-r--r-- | lib/idr.c | 79 | ||||
| -rw-r--r-- | lib/xz/Kconfig | 2 | ||||
| -rw-r--r-- | mm/fremap.c | 6 | ||||
| -rw-r--r-- | mm/memory_hotplug.c | 2 |
16 files changed, 144 insertions, 174 deletions
diff --git a/arch/m32r/include/uapi/asm/stat.h b/arch/m32r/include/uapi/asm/stat.h index da4518f82d6d..98470fe483b6 100644 --- a/arch/m32r/include/uapi/asm/stat.h +++ b/arch/m32r/include/uapi/asm/stat.h | |||
| @@ -63,10 +63,10 @@ struct stat64 { | |||
| 63 | long long st_size; | 63 | long long st_size; |
| 64 | unsigned long st_blksize; | 64 | unsigned long st_blksize; |
| 65 | 65 | ||
| 66 | #if defined(__BIG_ENDIAN) | 66 | #if defined(__BYTE_ORDER) ? __BYTE_ORDER == __BIG_ENDIAN : defined(__BIG_ENDIAN) |
| 67 | unsigned long __pad4; /* future possible st_blocks high bits */ | 67 | unsigned long __pad4; /* future possible st_blocks high bits */ |
| 68 | unsigned long st_blocks; /* Number 512-byte blocks allocated. */ | 68 | unsigned long st_blocks; /* Number 512-byte blocks allocated. */ |
| 69 | #elif defined(__LITTLE_ENDIAN) | 69 | #elif defined(__BYTE_ORDER) ? __BYTE_ORDER == __LITTLE_ENDIAN : defined(__LITTLE_ENDIAN) |
| 70 | unsigned long st_blocks; /* Number 512-byte blocks allocated. */ | 70 | unsigned long st_blocks; /* Number 512-byte blocks allocated. */ |
| 71 | unsigned long __pad4; /* future possible st_blocks high bits */ | 71 | unsigned long __pad4; /* future possible st_blocks high bits */ |
| 72 | #else | 72 | #else |
diff --git a/drivers/infiniband/hw/mlx4/cm.c b/drivers/infiniband/hw/mlx4/cm.c index e0d79b2395e4..add98d01476c 100644 --- a/drivers/infiniband/hw/mlx4/cm.c +++ b/drivers/infiniband/hw/mlx4/cm.c | |||
| @@ -362,7 +362,6 @@ void mlx4_ib_cm_paravirt_init(struct mlx4_ib_dev *dev) | |||
| 362 | INIT_LIST_HEAD(&dev->sriov.cm_list); | 362 | INIT_LIST_HEAD(&dev->sriov.cm_list); |
| 363 | dev->sriov.sl_id_map = RB_ROOT; | 363 | dev->sriov.sl_id_map = RB_ROOT; |
| 364 | idr_init(&dev->sriov.pv_id_table); | 364 | idr_init(&dev->sriov.pv_id_table); |
| 365 | idr_pre_get(&dev->sriov.pv_id_table, GFP_KERNEL); | ||
| 366 | } | 365 | } |
| 367 | 366 | ||
| 368 | /* slave = -1 ==> all slaves */ | 367 | /* slave = -1 ==> all slaves */ |
diff --git a/drivers/staging/tidspbridge/rmgr/drv.c b/drivers/staging/tidspbridge/rmgr/drv.c index db1da28cecba..be26917a6896 100644 --- a/drivers/staging/tidspbridge/rmgr/drv.c +++ b/drivers/staging/tidspbridge/rmgr/drv.c | |||
| @@ -76,37 +76,28 @@ int drv_insert_node_res_element(void *hnode, void *node_resource, | |||
| 76 | struct node_res_object **node_res_obj = | 76 | struct node_res_object **node_res_obj = |
| 77 | (struct node_res_object **)node_resource; | 77 | (struct node_res_object **)node_resource; |
| 78 | struct process_context *ctxt = (struct process_context *)process_ctxt; | 78 | struct process_context *ctxt = (struct process_context *)process_ctxt; |
| 79 | int status = 0; | ||
| 80 | int retval; | 79 | int retval; |
| 81 | 80 | ||
| 82 | *node_res_obj = kzalloc(sizeof(struct node_res_object), GFP_KERNEL); | 81 | *node_res_obj = kzalloc(sizeof(struct node_res_object), GFP_KERNEL); |
| 83 | if (!*node_res_obj) { | 82 | if (!*node_res_obj) |
| 84 | status = -ENOMEM; | 83 | return -ENOMEM; |
| 85 | goto func_end; | ||
| 86 | } | ||
| 87 | 84 | ||
| 88 | (*node_res_obj)->node = hnode; | 85 | (*node_res_obj)->node = hnode; |
| 89 | retval = idr_get_new(ctxt->node_id, *node_res_obj, | 86 | retval = idr_alloc(ctxt->node_id, *node_res_obj, 0, 0, GFP_KERNEL); |
| 90 | &(*node_res_obj)->id); | 87 | if (retval >= 0) { |
| 91 | if (retval == -EAGAIN) { | 88 | (*node_res_obj)->id = retval; |
| 92 | if (!idr_pre_get(ctxt->node_id, GFP_KERNEL)) { | 89 | return 0; |
| 93 | pr_err("%s: OUT OF MEMORY\n", __func__); | ||
| 94 | status = -ENOMEM; | ||
| 95 | goto func_end; | ||
| 96 | } | ||
| 97 | |||
| 98 | retval = idr_get_new(ctxt->node_id, *node_res_obj, | ||
| 99 | &(*node_res_obj)->id); | ||
| 100 | } | 90 | } |
| 101 | if (retval) { | 91 | |
| 92 | kfree(*node_res_obj); | ||
| 93 | |||
| 94 | if (retval == -ENOSPC) { | ||
| 102 | pr_err("%s: FAILED, IDR is FULL\n", __func__); | 95 | pr_err("%s: FAILED, IDR is FULL\n", __func__); |
| 103 | status = -EFAULT; | 96 | return -EFAULT; |
| 97 | } else { | ||
| 98 | pr_err("%s: OUT OF MEMORY\n", __func__); | ||
| 99 | return -ENOMEM; | ||
| 104 | } | 100 | } |
| 105 | func_end: | ||
| 106 | if (status) | ||
| 107 | kfree(*node_res_obj); | ||
| 108 | |||
| 109 | return status; | ||
| 110 | } | 101 | } |
| 111 | 102 | ||
| 112 | /* Release all Node resources and its context | 103 | /* Release all Node resources and its context |
| @@ -201,35 +192,26 @@ int drv_proc_insert_strm_res_element(void *stream_obj, | |||
| 201 | struct strm_res_object **pstrm_res = | 192 | struct strm_res_object **pstrm_res = |
| 202 | (struct strm_res_object **)strm_res; | 193 | (struct strm_res_object **)strm_res; |
| 203 | struct process_context *ctxt = (struct process_context *)process_ctxt; | 194 | struct process_context *ctxt = (struct process_context *)process_ctxt; |
| 204 | int status = 0; | ||
| 205 | int retval; | 195 | int retval; |
| 206 | 196 | ||
| 207 | *pstrm_res = kzalloc(sizeof(struct strm_res_object), GFP_KERNEL); | 197 | *pstrm_res = kzalloc(sizeof(struct strm_res_object), GFP_KERNEL); |
| 208 | if (*pstrm_res == NULL) { | 198 | if (*pstrm_res == NULL) |
| 209 | status = -EFAULT; | 199 | return -EFAULT; |
| 210 | goto func_end; | ||
| 211 | } | ||
| 212 | 200 | ||
| 213 | (*pstrm_res)->stream = stream_obj; | 201 | (*pstrm_res)->stream = stream_obj; |
| 214 | retval = idr_get_new(ctxt->stream_id, *pstrm_res, | 202 | retval = idr_alloc(ctxt->stream_id, *pstrm_res, 0, 0, GFP_KERNEL); |
| 215 | &(*pstrm_res)->id); | 203 | if (retval >= 0) { |
| 216 | if (retval == -EAGAIN) { | 204 | (*pstrm_res)->id = retval; |
| 217 | if (!idr_pre_get(ctxt->stream_id, GFP_KERNEL)) { | 205 | return 0; |
| 218 | pr_err("%s: OUT OF MEMORY\n", __func__); | ||
| 219 | status = -ENOMEM; | ||
| 220 | goto func_end; | ||
| 221 | } | ||
| 222 | |||
| 223 | retval = idr_get_new(ctxt->stream_id, *pstrm_res, | ||
| 224 | &(*pstrm_res)->id); | ||
| 225 | } | 206 | } |
| 226 | if (retval) { | 207 | |
| 208 | if (retval == -ENOSPC) { | ||
| 227 | pr_err("%s: FAILED, IDR is FULL\n", __func__); | 209 | pr_err("%s: FAILED, IDR is FULL\n", __func__); |
| 228 | status = -EPERM; | 210 | return -EPERM; |
| 211 | } else { | ||
| 212 | pr_err("%s: OUT OF MEMORY\n", __func__); | ||
| 213 | return -ENOMEM; | ||
| 229 | } | 214 | } |
| 230 | |||
| 231 | func_end: | ||
| 232 | return status; | ||
| 233 | } | 215 | } |
| 234 | 216 | ||
| 235 | static int drv_proc_free_strm_res(int id, void *p, void *process_ctxt) | 217 | static int drv_proc_free_strm_res(int id, void *p, void *process_ctxt) |
diff --git a/drivers/staging/zcache/ramster/tcp.c b/drivers/staging/zcache/ramster/tcp.c index aa2a1a763aa4..f6e1e5209d88 100644 --- a/drivers/staging/zcache/ramster/tcp.c +++ b/drivers/staging/zcache/ramster/tcp.c | |||
| @@ -300,27 +300,22 @@ static u8 r2net_num_from_nn(struct r2net_node *nn) | |||
| 300 | 300 | ||
| 301 | static int r2net_prep_nsw(struct r2net_node *nn, struct r2net_status_wait *nsw) | 301 | static int r2net_prep_nsw(struct r2net_node *nn, struct r2net_status_wait *nsw) |
| 302 | { | 302 | { |
| 303 | int ret = 0; | 303 | int ret; |
| 304 | 304 | ||
| 305 | do { | 305 | spin_lock(&nn->nn_lock); |
| 306 | if (!idr_pre_get(&nn->nn_status_idr, GFP_ATOMIC)) { | 306 | ret = idr_alloc(&nn->nn_status_idr, nsw, 0, 0, GFP_ATOMIC); |
| 307 | ret = -EAGAIN; | 307 | if (ret >= 0) { |
| 308 | break; | 308 | nsw->ns_id = ret; |
| 309 | } | 309 | list_add_tail(&nsw->ns_node_item, &nn->nn_status_list); |
| 310 | spin_lock(&nn->nn_lock); | 310 | } |
| 311 | ret = idr_get_new(&nn->nn_status_idr, nsw, &nsw->ns_id); | 311 | spin_unlock(&nn->nn_lock); |
| 312 | if (ret == 0) | ||
| 313 | list_add_tail(&nsw->ns_node_item, | ||
| 314 | &nn->nn_status_list); | ||
| 315 | spin_unlock(&nn->nn_lock); | ||
| 316 | } while (ret == -EAGAIN); | ||
| 317 | 312 | ||
| 318 | if (ret == 0) { | 313 | if (ret >= 0) { |
| 319 | init_waitqueue_head(&nsw->ns_wq); | 314 | init_waitqueue_head(&nsw->ns_wq); |
| 320 | nsw->ns_sys_status = R2NET_ERR_NONE; | 315 | nsw->ns_sys_status = R2NET_ERR_NONE; |
| 321 | nsw->ns_status = 0; | 316 | nsw->ns_status = 0; |
| 317 | return 0; | ||
| 322 | } | 318 | } |
| 323 | |||
| 324 | return ret; | 319 | return ret; |
| 325 | } | 320 | } |
| 326 | 321 | ||
diff --git a/fs/nfsd/nfs4state.c b/fs/nfsd/nfs4state.c index 16d39c6c4fbb..2e27430b9070 100644 --- a/fs/nfsd/nfs4state.c +++ b/fs/nfsd/nfs4state.c | |||
| @@ -230,37 +230,6 @@ static void nfs4_file_put_access(struct nfs4_file *fp, int oflag) | |||
| 230 | __nfs4_file_put_access(fp, oflag); | 230 | __nfs4_file_put_access(fp, oflag); |
| 231 | } | 231 | } |
| 232 | 232 | ||
| 233 | static inline int get_new_stid(struct nfs4_stid *stid) | ||
| 234 | { | ||
| 235 | static int min_stateid = 0; | ||
| 236 | struct idr *stateids = &stid->sc_client->cl_stateids; | ||
| 237 | int new_stid; | ||
| 238 | int error; | ||
| 239 | |||
| 240 | error = idr_get_new_above(stateids, stid, min_stateid, &new_stid); | ||
| 241 | /* | ||
| 242 | * Note: the necessary preallocation was done in | ||
| 243 | * nfs4_alloc_stateid(). The idr code caps the number of | ||
| 244 | * preallocations that can exist at a time, but the state lock | ||
| 245 | * prevents anyone from using ours before we get here: | ||
| 246 | */ | ||
| 247 | WARN_ON_ONCE(error); | ||
| 248 | /* | ||
| 249 | * It shouldn't be a problem to reuse an opaque stateid value. | ||
| 250 | * I don't think it is for 4.1. But with 4.0 I worry that, for | ||
| 251 | * example, a stray write retransmission could be accepted by | ||
| 252 | * the server when it should have been rejected. Therefore, | ||
| 253 | * adopt a trick from the sctp code to attempt to maximize the | ||
| 254 | * amount of time until an id is reused, by ensuring they always | ||
| 255 | * "increase" (mod INT_MAX): | ||
| 256 | */ | ||
| 257 | |||
| 258 | min_stateid = new_stid+1; | ||
| 259 | if (min_stateid == INT_MAX) | ||
| 260 | min_stateid = 0; | ||
| 261 | return new_stid; | ||
| 262 | } | ||
| 263 | |||
| 264 | static struct nfs4_stid *nfs4_alloc_stid(struct nfs4_client *cl, struct | 233 | static struct nfs4_stid *nfs4_alloc_stid(struct nfs4_client *cl, struct |
| 265 | kmem_cache *slab) | 234 | kmem_cache *slab) |
| 266 | { | 235 | { |
| @@ -273,9 +242,8 @@ kmem_cache *slab) | |||
| 273 | if (!stid) | 242 | if (!stid) |
| 274 | return NULL; | 243 | return NULL; |
| 275 | 244 | ||
| 276 | if (!idr_pre_get(stateids, GFP_KERNEL)) | 245 | new_id = idr_alloc(stateids, stid, min_stateid, 0, GFP_KERNEL); |
| 277 | goto out_free; | 246 | if (new_id < 0) |
| 278 | if (idr_get_new_above(stateids, stid, min_stateid, &new_id)) | ||
| 279 | goto out_free; | 247 | goto out_free; |
| 280 | stid->sc_client = cl; | 248 | stid->sc_client = cl; |
| 281 | stid->sc_type = 0; | 249 | stid->sc_type = 0; |
diff --git a/include/linux/idr.h b/include/linux/idr.h index 8c1f81f823c8..2640c7e99e51 100644 --- a/include/linux/idr.h +++ b/include/linux/idr.h | |||
| @@ -73,8 +73,6 @@ struct idr { | |||
| 73 | */ | 73 | */ |
| 74 | 74 | ||
| 75 | void *idr_find_slowpath(struct idr *idp, int id); | 75 | void *idr_find_slowpath(struct idr *idp, int id); |
| 76 | int idr_pre_get(struct idr *idp, gfp_t gfp_mask); | ||
| 77 | int idr_get_new_above(struct idr *idp, void *ptr, int starting_id, int *id); | ||
| 78 | void idr_preload(gfp_t gfp_mask); | 76 | void idr_preload(gfp_t gfp_mask); |
| 79 | int idr_alloc(struct idr *idp, void *ptr, int start, int end, gfp_t gfp_mask); | 77 | int idr_alloc(struct idr *idp, void *ptr, int start, int end, gfp_t gfp_mask); |
| 80 | int idr_for_each(struct idr *idp, | 78 | int idr_for_each(struct idr *idp, |
| @@ -120,19 +118,6 @@ static inline void *idr_find(struct idr *idr, int id) | |||
| 120 | } | 118 | } |
| 121 | 119 | ||
| 122 | /** | 120 | /** |
| 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 | 121 | * idr_for_each_entry - iterate over an idr's elements of a given type |
| 137 | * @idp: idr handle | 122 | * @idp: idr handle |
| 138 | * @entry: the type * to use as cursor | 123 | * @entry: the type * to use as cursor |
| @@ -143,7 +128,56 @@ static inline int idr_get_new(struct idr *idp, void *ptr, int *id) | |||
| 143 | entry != NULL; \ | 128 | entry != NULL; \ |
| 144 | ++id, entry = (typeof(entry))idr_get_next((idp), &(id))) | 129 | ++id, entry = (typeof(entry))idr_get_next((idp), &(id))) |
| 145 | 130 | ||
| 146 | void __idr_remove_all(struct idr *idp); /* don't use */ | 131 | /* |
| 132 | * Don't use the following functions. These exist only to suppress | ||
| 133 | * deprecated warnings on EXPORT_SYMBOL()s. | ||
| 134 | */ | ||
| 135 | int __idr_pre_get(struct idr *idp, gfp_t gfp_mask); | ||
| 136 | int __idr_get_new_above(struct idr *idp, void *ptr, int starting_id, int *id); | ||
| 137 | void __idr_remove_all(struct idr *idp); | ||
| 138 | |||
| 139 | /** | ||
| 140 | * idr_pre_get - reserve resources for idr allocation | ||
| 141 | * @idp: idr handle | ||
| 142 | * @gfp_mask: memory allocation flags | ||
| 143 | * | ||
| 144 | * Part of old alloc interface. This is going away. Use | ||
| 145 | * idr_preload[_end]() and idr_alloc() instead. | ||
| 146 | */ | ||
| 147 | static inline int __deprecated idr_pre_get(struct idr *idp, gfp_t gfp_mask) | ||
| 148 | { | ||
| 149 | return __idr_pre_get(idp, gfp_mask); | ||
| 150 | } | ||
| 151 | |||
| 152 | /** | ||
| 153 | * idr_get_new_above - allocate new idr entry above or equal to a start id | ||
| 154 | * @idp: idr handle | ||
| 155 | * @ptr: pointer you want associated with the id | ||
| 156 | * @starting_id: id to start search at | ||
| 157 | * @id: pointer to the allocated handle | ||
| 158 | * | ||
| 159 | * Part of old alloc interface. This is going away. Use | ||
| 160 | * idr_preload[_end]() and idr_alloc() instead. | ||
| 161 | */ | ||
| 162 | static inline int __deprecated idr_get_new_above(struct idr *idp, void *ptr, | ||
| 163 | int starting_id, int *id) | ||
| 164 | { | ||
| 165 | return __idr_get_new_above(idp, ptr, starting_id, id); | ||
| 166 | } | ||
| 167 | |||
| 168 | /** | ||
| 169 | * idr_get_new - allocate new idr entry | ||
| 170 | * @idp: idr handle | ||
| 171 | * @ptr: pointer you want associated with the id | ||
| 172 | * @id: pointer to the allocated handle | ||
| 173 | * | ||
| 174 | * Part of old alloc interface. This is going away. Use | ||
| 175 | * idr_preload[_end]() and idr_alloc() instead. | ||
| 176 | */ | ||
| 177 | static inline int __deprecated idr_get_new(struct idr *idp, void *ptr, int *id) | ||
| 178 | { | ||
| 179 | return __idr_get_new_above(idp, ptr, 0, id); | ||
| 180 | } | ||
| 147 | 181 | ||
| 148 | /** | 182 | /** |
| 149 | * idr_remove_all - remove all ids from the given idr tree | 183 | * idr_remove_all - remove all ids from the given idr tree |
diff --git a/include/linux/res_counter.h b/include/linux/res_counter.h index 5ae8456d9670..c23099413ad6 100644 --- a/include/linux/res_counter.h +++ b/include/linux/res_counter.h | |||
| @@ -14,6 +14,7 @@ | |||
| 14 | */ | 14 | */ |
| 15 | 15 | ||
| 16 | #include <linux/cgroup.h> | 16 | #include <linux/cgroup.h> |
| 17 | #include <linux/errno.h> | ||
| 17 | 18 | ||
| 18 | /* | 19 | /* |
| 19 | * The core object. the cgroup that wishes to account for some | 20 | * The core object. the cgroup that wishes to account for some |
diff --git a/include/uapi/linux/acct.h b/include/uapi/linux/acct.h index 11b6ca3e0873..df2f9a0bba6a 100644 --- a/include/uapi/linux/acct.h +++ b/include/uapi/linux/acct.h | |||
| @@ -107,10 +107,12 @@ struct acct_v3 | |||
| 107 | #define ACORE 0x08 /* ... dumped core */ | 107 | #define ACORE 0x08 /* ... dumped core */ |
| 108 | #define AXSIG 0x10 /* ... was killed by a signal */ | 108 | #define AXSIG 0x10 /* ... was killed by a signal */ |
| 109 | 109 | ||
| 110 | #ifdef __BIG_ENDIAN | 110 | #if defined(__BYTE_ORDER) ? __BYTE_ORDER == __BIG_ENDIAN : defined(__BIG_ENDIAN) |
| 111 | #define ACCT_BYTEORDER 0x80 /* accounting file is big endian */ | 111 | #define ACCT_BYTEORDER 0x80 /* accounting file is big endian */ |
| 112 | #else | 112 | #elif defined(__BYTE_ORDER) ? __BYTE_ORDER == __LITTLE_ENDIAN : defined(__LITTLE_ENDIAN) |
| 113 | #define ACCT_BYTEORDER 0x00 /* accounting file is little endian */ | 113 | #define ACCT_BYTEORDER 0x00 /* accounting file is little endian */ |
| 114 | #else | ||
| 115 | #error unspecified endianness | ||
| 114 | #endif | 116 | #endif |
| 115 | 117 | ||
| 116 | #ifndef __KERNEL__ | 118 | #ifndef __KERNEL__ |
diff --git a/include/uapi/linux/aio_abi.h b/include/uapi/linux/aio_abi.h index 86fa7a71336a..bb2554f7fbd1 100644 --- a/include/uapi/linux/aio_abi.h +++ b/include/uapi/linux/aio_abi.h | |||
| @@ -62,9 +62,9 @@ struct io_event { | |||
| 62 | __s64 res2; /* secondary result */ | 62 | __s64 res2; /* secondary result */ |
| 63 | }; | 63 | }; |
| 64 | 64 | ||
| 65 | #if defined(__LITTLE_ENDIAN) | 65 | #if defined(__BYTE_ORDER) ? __BYTE_ORDER == __LITTLE_ENDIAN : defined(__LITTLE_ENDIAN) |
| 66 | #define PADDED(x,y) x, y | 66 | #define PADDED(x,y) x, y |
| 67 | #elif defined(__BIG_ENDIAN) | 67 | #elif defined(__BYTE_ORDER) ? __BYTE_ORDER == __BIG_ENDIAN : defined(__BIG_ENDIAN) |
| 68 | #define PADDED(x,y) y, x | 68 | #define PADDED(x,y) y, x |
| 69 | #else | 69 | #else |
| 70 | #error edit for your odd byteorder. | 70 | #error edit for your odd byteorder. |
diff --git a/include/uapi/linux/raid/md_p.h b/include/uapi/linux/raid/md_p.h index ee753536ab70..fe1a5406d4d9 100644 --- a/include/uapi/linux/raid/md_p.h +++ b/include/uapi/linux/raid/md_p.h | |||
| @@ -145,16 +145,18 @@ typedef struct mdp_superblock_s { | |||
| 145 | __u32 failed_disks; /* 4 Number of failed disks */ | 145 | __u32 failed_disks; /* 4 Number of failed disks */ |
| 146 | __u32 spare_disks; /* 5 Number of spare disks */ | 146 | __u32 spare_disks; /* 5 Number of spare disks */ |
| 147 | __u32 sb_csum; /* 6 checksum of the whole superblock */ | 147 | __u32 sb_csum; /* 6 checksum of the whole superblock */ |
| 148 | #ifdef __BIG_ENDIAN | 148 | #if defined(__BYTE_ORDER) ? __BYTE_ORDER == __BIG_ENDIAN : defined(__BIG_ENDIAN) |
| 149 | __u32 events_hi; /* 7 high-order of superblock update count */ | 149 | __u32 events_hi; /* 7 high-order of superblock update count */ |
| 150 | __u32 events_lo; /* 8 low-order of superblock update count */ | 150 | __u32 events_lo; /* 8 low-order of superblock update count */ |
| 151 | __u32 cp_events_hi; /* 9 high-order of checkpoint update count */ | 151 | __u32 cp_events_hi; /* 9 high-order of checkpoint update count */ |
| 152 | __u32 cp_events_lo; /* 10 low-order of checkpoint update count */ | 152 | __u32 cp_events_lo; /* 10 low-order of checkpoint update count */ |
| 153 | #else | 153 | #elif defined(__BYTE_ORDER) ? __BYTE_ORDER == __LITTLE_ENDIAN : defined(__LITTLE_ENDIAN) |
| 154 | __u32 events_lo; /* 7 low-order of superblock update count */ | 154 | __u32 events_lo; /* 7 low-order of superblock update count */ |
| 155 | __u32 events_hi; /* 8 high-order of superblock update count */ | 155 | __u32 events_hi; /* 8 high-order of superblock update count */ |
| 156 | __u32 cp_events_lo; /* 9 low-order of checkpoint update count */ | 156 | __u32 cp_events_lo; /* 9 low-order of checkpoint update count */ |
| 157 | __u32 cp_events_hi; /* 10 high-order of checkpoint update count */ | 157 | __u32 cp_events_hi; /* 10 high-order of checkpoint update count */ |
| 158 | #else | ||
| 159 | #error unspecified endianness | ||
| 158 | #endif | 160 | #endif |
| 159 | __u32 recovery_cp; /* 11 recovery checkpoint sector count */ | 161 | __u32 recovery_cp; /* 11 recovery checkpoint sector count */ |
| 160 | /* There are only valid for minor_version > 90 */ | 162 | /* There are only valid for minor_version > 90 */ |
diff --git a/kernel/signal.c b/kernel/signal.c index d63c79e7e415..dd72567767d9 100644 --- a/kernel/signal.c +++ b/kernel/signal.c | |||
| @@ -485,6 +485,9 @@ flush_signal_handlers(struct task_struct *t, int force_default) | |||
| 485 | if (force_default || ka->sa.sa_handler != SIG_IGN) | 485 | if (force_default || ka->sa.sa_handler != SIG_IGN) |
| 486 | ka->sa.sa_handler = SIG_DFL; | 486 | ka->sa.sa_handler = SIG_DFL; |
| 487 | ka->sa.sa_flags = 0; | 487 | ka->sa.sa_flags = 0; |
| 488 | #ifdef __ARCH_HAS_SA_RESTORER | ||
| 489 | ka->sa.sa_restorer = NULL; | ||
| 490 | #endif | ||
| 488 | sigemptyset(&ka->sa.sa_mask); | 491 | sigemptyset(&ka->sa.sa_mask); |
| 489 | ka++; | 492 | ka++; |
| 490 | } | 493 | } |
diff --git a/kernel/workqueue.c b/kernel/workqueue.c index 81f2457811eb..55fac5b991b7 100644 --- a/kernel/workqueue.c +++ b/kernel/workqueue.c | |||
| @@ -457,11 +457,12 @@ static int worker_pool_assign_id(struct worker_pool *pool) | |||
| 457 | int ret; | 457 | int ret; |
| 458 | 458 | ||
| 459 | mutex_lock(&worker_pool_idr_mutex); | 459 | mutex_lock(&worker_pool_idr_mutex); |
| 460 | idr_pre_get(&worker_pool_idr, GFP_KERNEL); | 460 | ret = idr_alloc(&worker_pool_idr, pool, 0, 0, GFP_KERNEL); |
| 461 | ret = idr_get_new(&worker_pool_idr, pool, &pool->id); | 461 | if (ret >= 0) |
| 462 | pool->id = ret; | ||
| 462 | mutex_unlock(&worker_pool_idr_mutex); | 463 | mutex_unlock(&worker_pool_idr_mutex); |
| 463 | 464 | ||
| 464 | return ret; | 465 | return ret < 0 ? ret : 0; |
| 465 | } | 466 | } |
| 466 | 467 | ||
| 467 | /* | 468 | /* |
| @@ -106,8 +106,14 @@ static struct idr_layer *idr_layer_alloc(gfp_t gfp_mask, struct idr *layer_idr) | |||
| 106 | if (layer_idr) | 106 | if (layer_idr) |
| 107 | return get_from_free_list(layer_idr); | 107 | return get_from_free_list(layer_idr); |
| 108 | 108 | ||
| 109 | /* try to allocate directly from kmem_cache */ | 109 | /* |
| 110 | new = kmem_cache_zalloc(idr_layer_cache, gfp_mask); | 110 | * Try to allocate directly from kmem_cache. We want to try this |
| 111 | * before preload buffer; otherwise, non-preloading idr_alloc() | ||
| 112 | * users will end up taking advantage of preloading ones. As the | ||
| 113 | * following is allowed to fail for preloaded cases, suppress | ||
| 114 | * warning this time. | ||
| 115 | */ | ||
| 116 | new = kmem_cache_zalloc(idr_layer_cache, gfp_mask | __GFP_NOWARN); | ||
| 111 | if (new) | 117 | if (new) |
| 112 | return new; | 118 | return new; |
| 113 | 119 | ||
| @@ -115,18 +121,24 @@ static struct idr_layer *idr_layer_alloc(gfp_t gfp_mask, struct idr *layer_idr) | |||
| 115 | * Try to fetch one from the per-cpu preload buffer if in process | 121 | * Try to fetch one from the per-cpu preload buffer if in process |
| 116 | * context. See idr_preload() for details. | 122 | * context. See idr_preload() for details. |
| 117 | */ | 123 | */ |
| 118 | if (in_interrupt()) | 124 | if (!in_interrupt()) { |
| 119 | return NULL; | 125 | preempt_disable(); |
| 120 | 126 | new = __this_cpu_read(idr_preload_head); | |
| 121 | preempt_disable(); | 127 | if (new) { |
| 122 | new = __this_cpu_read(idr_preload_head); | 128 | __this_cpu_write(idr_preload_head, new->ary[0]); |
| 123 | if (new) { | 129 | __this_cpu_dec(idr_preload_cnt); |
| 124 | __this_cpu_write(idr_preload_head, new->ary[0]); | 130 | new->ary[0] = NULL; |
| 125 | __this_cpu_dec(idr_preload_cnt); | 131 | } |
| 126 | new->ary[0] = NULL; | 132 | preempt_enable(); |
| 133 | if (new) | ||
| 134 | return new; | ||
| 127 | } | 135 | } |
| 128 | preempt_enable(); | 136 | |
| 129 | return new; | 137 | /* |
| 138 | * Both failed. Try kmem_cache again w/o adding __GFP_NOWARN so | ||
| 139 | * that memory allocation failure warning is printed as intended. | ||
| 140 | */ | ||
| 141 | return kmem_cache_zalloc(idr_layer_cache, gfp_mask); | ||
| 130 | } | 142 | } |
| 131 | 143 | ||
| 132 | static void idr_layer_rcu_free(struct rcu_head *head) | 144 | static void idr_layer_rcu_free(struct rcu_head *head) |
| @@ -184,20 +196,7 @@ static void idr_mark_full(struct idr_layer **pa, int id) | |||
| 184 | } | 196 | } |
| 185 | } | 197 | } |
| 186 | 198 | ||
| 187 | /** | 199 | int __idr_pre_get(struct idr *idp, gfp_t gfp_mask) |
| 188 | * idr_pre_get - reserve resources for idr allocation | ||
| 189 | * @idp: idr handle | ||
| 190 | * @gfp_mask: memory allocation flags | ||
| 191 | * | ||
| 192 | * This function should be called prior to calling the idr_get_new* functions. | ||
| 193 | * It preallocates enough memory to satisfy the worst possible allocation. The | ||
| 194 | * caller should pass in GFP_KERNEL if possible. This of course requires that | ||
| 195 | * no spinning locks be held. | ||
| 196 | * | ||
| 197 | * If the system is REALLY out of memory this function returns %0, | ||
| 198 | * otherwise %1. | ||
| 199 | */ | ||
| 200 | int idr_pre_get(struct idr *idp, gfp_t gfp_mask) | ||
| 201 | { | 200 | { |
| 202 | while (idp->id_free_cnt < MAX_IDR_FREE) { | 201 | while (idp->id_free_cnt < MAX_IDR_FREE) { |
| 203 | struct idr_layer *new; | 202 | struct idr_layer *new; |
| @@ -208,7 +207,7 @@ int idr_pre_get(struct idr *idp, gfp_t gfp_mask) | |||
| 208 | } | 207 | } |
| 209 | return 1; | 208 | return 1; |
| 210 | } | 209 | } |
| 211 | EXPORT_SYMBOL(idr_pre_get); | 210 | EXPORT_SYMBOL(__idr_pre_get); |
| 212 | 211 | ||
| 213 | /** | 212 | /** |
| 214 | * sub_alloc - try to allocate an id without growing the tree depth | 213 | * sub_alloc - try to allocate an id without growing the tree depth |
| @@ -375,25 +374,7 @@ static void idr_fill_slot(struct idr *idr, void *ptr, int id, | |||
| 375 | idr_mark_full(pa, id); | 374 | idr_mark_full(pa, id); |
| 376 | } | 375 | } |
| 377 | 376 | ||
| 378 | /** | 377 | int __idr_get_new_above(struct idr *idp, void *ptr, int starting_id, int *id) |
| 379 | * idr_get_new_above - allocate new idr entry above or equal to a start id | ||
| 380 | * @idp: idr handle | ||
| 381 | * @ptr: pointer you want associated with the id | ||
| 382 | * @starting_id: id to start search at | ||
| 383 | * @id: pointer to the allocated handle | ||
| 384 | * | ||
| 385 | * This is the allocate id function. It should be called with any | ||
| 386 | * required locks. | ||
| 387 | * | ||
| 388 | * If allocation from IDR's private freelist fails, idr_get_new_above() will | ||
| 389 | * return %-EAGAIN. The caller should retry the idr_pre_get() call to refill | ||
| 390 | * IDR's preallocation and then retry the idr_get_new_above() call. | ||
| 391 | * | ||
| 392 | * If the idr is full idr_get_new_above() will return %-ENOSPC. | ||
| 393 | * | ||
| 394 | * @id returns a value in the range @starting_id ... %0x7fffffff | ||
| 395 | */ | ||
| 396 | int idr_get_new_above(struct idr *idp, void *ptr, int starting_id, int *id) | ||
| 397 | { | 378 | { |
| 398 | struct idr_layer *pa[MAX_IDR_LEVEL + 1]; | 379 | struct idr_layer *pa[MAX_IDR_LEVEL + 1]; |
| 399 | int rv; | 380 | int rv; |
| @@ -406,7 +387,7 @@ int idr_get_new_above(struct idr *idp, void *ptr, int starting_id, int *id) | |||
| 406 | *id = rv; | 387 | *id = rv; |
| 407 | return 0; | 388 | return 0; |
| 408 | } | 389 | } |
| 409 | EXPORT_SYMBOL(idr_get_new_above); | 390 | EXPORT_SYMBOL(__idr_get_new_above); |
| 410 | 391 | ||
| 411 | /** | 392 | /** |
| 412 | * idr_preload - preload for idr_alloc() | 393 | * idr_preload - preload for idr_alloc() |
| @@ -907,7 +888,7 @@ static void free_bitmap(struct ida *ida, struct ida_bitmap *bitmap) | |||
| 907 | int ida_pre_get(struct ida *ida, gfp_t gfp_mask) | 888 | int ida_pre_get(struct ida *ida, gfp_t gfp_mask) |
| 908 | { | 889 | { |
| 909 | /* allocate idr_layers */ | 890 | /* allocate idr_layers */ |
| 910 | if (!idr_pre_get(&ida->idr, gfp_mask)) | 891 | if (!__idr_pre_get(&ida->idr, gfp_mask)) |
| 911 | return 0; | 892 | return 0; |
| 912 | 893 | ||
| 913 | /* allocate free_bitmap */ | 894 | /* allocate free_bitmap */ |
diff --git a/lib/xz/Kconfig b/lib/xz/Kconfig index 82a04d7ba99e..08837db52d94 100644 --- a/lib/xz/Kconfig +++ b/lib/xz/Kconfig | |||
| @@ -15,7 +15,7 @@ config XZ_DEC_X86 | |||
| 15 | 15 | ||
| 16 | config XZ_DEC_POWERPC | 16 | config XZ_DEC_POWERPC |
| 17 | bool "PowerPC BCJ filter decoder" | 17 | bool "PowerPC BCJ filter decoder" |
| 18 | default y if POWERPC | 18 | default y if PPC |
| 19 | select XZ_DEC_BCJ | 19 | select XZ_DEC_BCJ |
| 20 | 20 | ||
| 21 | config XZ_DEC_IA64 | 21 | config XZ_DEC_IA64 |
diff --git a/mm/fremap.c b/mm/fremap.c index 0cd4c11488ed..6a8da7ee85fd 100644 --- a/mm/fremap.c +++ b/mm/fremap.c | |||
| @@ -163,7 +163,8 @@ SYSCALL_DEFINE5(remap_file_pages, unsigned long, start, unsigned long, size, | |||
| 163 | * and that the remapped range is valid and fully within | 163 | * and that the remapped range is valid and fully within |
| 164 | * the single existing vma. | 164 | * the single existing vma. |
| 165 | */ | 165 | */ |
| 166 | if (!vma || !(vma->vm_flags & VM_SHARED)) | 166 | vm_flags = vma->vm_flags; |
| 167 | if (!vma || !(vm_flags & VM_SHARED)) | ||
| 167 | goto out; | 168 | goto out; |
| 168 | 169 | ||
| 169 | if (!vma->vm_ops || !vma->vm_ops->remap_pages) | 170 | if (!vma->vm_ops || !vma->vm_ops->remap_pages) |
| @@ -254,7 +255,8 @@ get_write_lock: | |||
| 254 | */ | 255 | */ |
| 255 | 256 | ||
| 256 | out: | 257 | out: |
| 257 | vm_flags = vma->vm_flags; | 258 | if (vma) |
| 259 | vm_flags = vma->vm_flags; | ||
| 258 | if (likely(!has_write_lock)) | 260 | if (likely(!has_write_lock)) |
| 259 | up_read(&mm->mmap_sem); | 261 | up_read(&mm->mmap_sem); |
| 260 | else | 262 | else |
diff --git a/mm/memory_hotplug.c b/mm/memory_hotplug.c index b81a367b9f39..9597eec8239d 100644 --- a/mm/memory_hotplug.c +++ b/mm/memory_hotplug.c | |||
| @@ -1801,7 +1801,7 @@ int __ref remove_memory(int nid, u64 start, u64 size) | |||
| 1801 | int retry = 1; | 1801 | int retry = 1; |
| 1802 | 1802 | ||
| 1803 | start_pfn = PFN_DOWN(start); | 1803 | start_pfn = PFN_DOWN(start); |
| 1804 | end_pfn = start_pfn + PFN_DOWN(size); | 1804 | end_pfn = PFN_UP(start + size - 1); |
| 1805 | 1805 | ||
| 1806 | /* | 1806 | /* |
| 1807 | * When CONFIG_MEMCG is on, one memory block may be used by other | 1807 | * When CONFIG_MEMCG is on, one memory block may be used by other |
