idr: deprecate idr_pre_get() and idr_get_new[_above]()
Now that all in-kernel users are converted to ues the new alloc interface, mark the old interface deprecated. We should be able to remove these in a few releases. Signed-off-by: Tejun Heo <tj@kernel.org> Cc: Rusty Russell <rusty@rustcorp.com.au> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
This commit is contained in:
parent
8e467e855c
commit
c8615d3716
|
@ -73,8 +73,6 @@ struct idr {
|
||||||
*/
|
*/
|
||||||
|
|
||||||
void *idr_find_slowpath(struct idr *idp, int id);
|
void *idr_find_slowpath(struct idr *idp, int id);
|
||||||
int idr_pre_get(struct idr *idp, gfp_t gfp_mask);
|
|
||||||
int idr_get_new_above(struct idr *idp, void *ptr, int starting_id, int *id);
|
|
||||||
void idr_preload(gfp_t gfp_mask);
|
void idr_preload(gfp_t gfp_mask);
|
||||||
int idr_alloc(struct idr *idp, void *ptr, int start, int end, gfp_t gfp_mask);
|
int idr_alloc(struct idr *idp, void *ptr, int start, int end, gfp_t gfp_mask);
|
||||||
int idr_for_each(struct idr *idp,
|
int idr_for_each(struct idr *idp,
|
||||||
|
@ -119,19 +117,6 @@ static inline void *idr_find(struct idr *idr, int id)
|
||||||
return idr_find_slowpath(idr, id);
|
return idr_find_slowpath(idr, id);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* idr_get_new - allocate new idr entry
|
|
||||||
* @idp: idr handle
|
|
||||||
* @ptr: pointer you want associated with the id
|
|
||||||
* @id: pointer to the allocated handle
|
|
||||||
*
|
|
||||||
* Simple wrapper around idr_get_new_above() w/ @starting_id of zero.
|
|
||||||
*/
|
|
||||||
static inline int idr_get_new(struct idr *idp, void *ptr, int *id)
|
|
||||||
{
|
|
||||||
return idr_get_new_above(idp, ptr, 0, id);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* idr_for_each_entry - iterate over an idr's elements of a given type
|
* idr_for_each_entry - iterate over an idr's elements of a given type
|
||||||
* @idp: idr handle
|
* @idp: idr handle
|
||||||
|
@ -143,7 +128,56 @@ static inline int idr_get_new(struct idr *idp, void *ptr, int *id)
|
||||||
entry != NULL; \
|
entry != NULL; \
|
||||||
++id, entry = (typeof(entry))idr_get_next((idp), &(id)))
|
++id, entry = (typeof(entry))idr_get_next((idp), &(id)))
|
||||||
|
|
||||||
void __idr_remove_all(struct idr *idp); /* don't use */
|
/*
|
||||||
|
* Don't use the following functions. These exist only to suppress
|
||||||
|
* deprecated warnings on EXPORT_SYMBOL()s.
|
||||||
|
*/
|
||||||
|
int __idr_pre_get(struct idr *idp, gfp_t gfp_mask);
|
||||||
|
int __idr_get_new_above(struct idr *idp, void *ptr, int starting_id, int *id);
|
||||||
|
void __idr_remove_all(struct idr *idp);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* idr_pre_get - reserve resources for idr allocation
|
||||||
|
* @idp: idr handle
|
||||||
|
* @gfp_mask: memory allocation flags
|
||||||
|
*
|
||||||
|
* Part of old alloc interface. This is going away. Use
|
||||||
|
* idr_preload[_end]() and idr_alloc() instead.
|
||||||
|
*/
|
||||||
|
static inline int __deprecated idr_pre_get(struct idr *idp, gfp_t gfp_mask)
|
||||||
|
{
|
||||||
|
return __idr_pre_get(idp, gfp_mask);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* idr_get_new_above - allocate new idr entry above or equal to a start id
|
||||||
|
* @idp: idr handle
|
||||||
|
* @ptr: pointer you want associated with the id
|
||||||
|
* @starting_id: id to start search at
|
||||||
|
* @id: pointer to the allocated handle
|
||||||
|
*
|
||||||
|
* Part of old alloc interface. This is going away. Use
|
||||||
|
* idr_preload[_end]() and idr_alloc() instead.
|
||||||
|
*/
|
||||||
|
static inline int __deprecated idr_get_new_above(struct idr *idp, void *ptr,
|
||||||
|
int starting_id, int *id)
|
||||||
|
{
|
||||||
|
return __idr_get_new_above(idp, ptr, starting_id, id);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* idr_get_new - allocate new idr entry
|
||||||
|
* @idp: idr handle
|
||||||
|
* @ptr: pointer you want associated with the id
|
||||||
|
* @id: pointer to the allocated handle
|
||||||
|
*
|
||||||
|
* Part of old alloc interface. This is going away. Use
|
||||||
|
* idr_preload[_end]() and idr_alloc() instead.
|
||||||
|
*/
|
||||||
|
static inline int __deprecated idr_get_new(struct idr *idp, void *ptr, int *id)
|
||||||
|
{
|
||||||
|
return __idr_get_new_above(idp, ptr, 0, id);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* idr_remove_all - remove all ids from the given idr tree
|
* idr_remove_all - remove all ids from the given idr tree
|
||||||
|
|
41
lib/idr.c
41
lib/idr.c
|
@ -184,20 +184,7 @@ static void idr_mark_full(struct idr_layer **pa, int id)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
int __idr_pre_get(struct idr *idp, gfp_t gfp_mask)
|
||||||
* idr_pre_get - reserve resources for idr allocation
|
|
||||||
* @idp: idr handle
|
|
||||||
* @gfp_mask: memory allocation flags
|
|
||||||
*
|
|
||||||
* This function should be called prior to calling the idr_get_new* functions.
|
|
||||||
* It preallocates enough memory to satisfy the worst possible allocation. The
|
|
||||||
* caller should pass in GFP_KERNEL if possible. This of course requires that
|
|
||||||
* no spinning locks be held.
|
|
||||||
*
|
|
||||||
* If the system is REALLY out of memory this function returns %0,
|
|
||||||
* otherwise %1.
|
|
||||||
*/
|
|
||||||
int idr_pre_get(struct idr *idp, gfp_t gfp_mask)
|
|
||||||
{
|
{
|
||||||
while (idp->id_free_cnt < MAX_IDR_FREE) {
|
while (idp->id_free_cnt < MAX_IDR_FREE) {
|
||||||
struct idr_layer *new;
|
struct idr_layer *new;
|
||||||
|
@ -208,7 +195,7 @@ int idr_pre_get(struct idr *idp, gfp_t gfp_mask)
|
||||||
}
|
}
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
EXPORT_SYMBOL(idr_pre_get);
|
EXPORT_SYMBOL(__idr_pre_get);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* sub_alloc - try to allocate an id without growing the tree depth
|
* sub_alloc - try to allocate an id without growing the tree depth
|
||||||
|
@ -375,25 +362,7 @@ static void idr_fill_slot(struct idr *idr, void *ptr, int id,
|
||||||
idr_mark_full(pa, id);
|
idr_mark_full(pa, id);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
int __idr_get_new_above(struct idr *idp, void *ptr, int starting_id, int *id)
|
||||||
* idr_get_new_above - allocate new idr entry above or equal to a start id
|
|
||||||
* @idp: idr handle
|
|
||||||
* @ptr: pointer you want associated with the id
|
|
||||||
* @starting_id: id to start search at
|
|
||||||
* @id: pointer to the allocated handle
|
|
||||||
*
|
|
||||||
* This is the allocate id function. It should be called with any
|
|
||||||
* required locks.
|
|
||||||
*
|
|
||||||
* If allocation from IDR's private freelist fails, idr_get_new_above() will
|
|
||||||
* return %-EAGAIN. The caller should retry the idr_pre_get() call to refill
|
|
||||||
* IDR's preallocation and then retry the idr_get_new_above() call.
|
|
||||||
*
|
|
||||||
* If the idr is full idr_get_new_above() will return %-ENOSPC.
|
|
||||||
*
|
|
||||||
* @id returns a value in the range @starting_id ... %0x7fffffff
|
|
||||||
*/
|
|
||||||
int idr_get_new_above(struct idr *idp, void *ptr, int starting_id, int *id)
|
|
||||||
{
|
{
|
||||||
struct idr_layer *pa[MAX_IDR_LEVEL + 1];
|
struct idr_layer *pa[MAX_IDR_LEVEL + 1];
|
||||||
int rv;
|
int rv;
|
||||||
|
@ -406,7 +375,7 @@ int idr_get_new_above(struct idr *idp, void *ptr, int starting_id, int *id)
|
||||||
*id = rv;
|
*id = rv;
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
EXPORT_SYMBOL(idr_get_new_above);
|
EXPORT_SYMBOL(__idr_get_new_above);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* idr_preload - preload for idr_alloc()
|
* idr_preload - preload for idr_alloc()
|
||||||
|
@ -907,7 +876,7 @@ static void free_bitmap(struct ida *ida, struct ida_bitmap *bitmap)
|
||||||
int ida_pre_get(struct ida *ida, gfp_t gfp_mask)
|
int ida_pre_get(struct ida *ida, gfp_t gfp_mask)
|
||||||
{
|
{
|
||||||
/* allocate idr_layers */
|
/* allocate idr_layers */
|
||||||
if (!idr_pre_get(&ida->idr, gfp_mask))
|
if (!__idr_pre_get(&ida->idr, gfp_mask))
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
/* allocate free_bitmap */
|
/* allocate free_bitmap */
|
||||||
|
|
Loading…
Reference in New Issue