Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

[PATCH 2/2] proc: switch inode number allocation to IDA

proc doesn't use "associate pointer with id" feature of IDR, so switch
to IDA.

NOTE, NOTE, NOTE:
Do not apply if release_inode_number() still mantions MAX_ID_MASK!

Signed-off-by: Alexey Dobriyan <adobriyan@gmail.com>
Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>

authored by

Alexey Dobriyan and committed by
Al Viro
9a185409 67935df4

+5 -5
+5 -5
fs/proc/generic.c
··· 300 300 return rtn; 301 301 } 302 302 303 - static DEFINE_IDR(proc_inum_idr); 303 + static DEFINE_IDA(proc_inum_ida); 304 304 static DEFINE_SPINLOCK(proc_inum_lock); /* protects the above */ 305 305 306 306 #define PROC_DYNAMIC_FIRST 0xF0000000U ··· 315 315 int error; 316 316 317 317 retry: 318 - if (idr_pre_get(&proc_inum_idr, GFP_KERNEL) == 0) 318 + if (ida_pre_get(&proc_inum_ida, GFP_KERNEL) == 0) 319 319 return 0; 320 320 321 321 spin_lock(&proc_inum_lock); 322 - error = idr_get_new(&proc_inum_idr, NULL, &i); 322 + error = ida_get_new(&proc_inum_ida, &i); 323 323 spin_unlock(&proc_inum_lock); 324 324 if (error == -EAGAIN) 325 325 goto retry; ··· 328 328 329 329 if (i > UINT_MAX - PROC_DYNAMIC_FIRST) { 330 330 spin_lock(&proc_inum_lock); 331 - idr_remove(&proc_inum_idr, i); 331 + ida_remove(&proc_inum_ida, i); 332 332 spin_unlock(&proc_inum_lock); 333 333 } 334 334 return PROC_DYNAMIC_FIRST + i; ··· 337 337 static void release_inode_number(unsigned int inum) 338 338 { 339 339 spin_lock(&proc_inum_lock); 340 - idr_remove(&proc_inum_idr, inum - PROC_DYNAMIC_FIRST); 340 + ida_remove(&proc_inum_ida, inum - PROC_DYNAMIC_FIRST); 341 341 spin_unlock(&proc_inum_lock); 342 342 } 343 343