• Andrew Morton's avatar
    [PATCH] shmdt() speedup · efbb77b2
    Andrew Morton authored
    From: William Lee Irwin III <wli@holomorphy.com>
    
    Micro-optimize sys_shmdt(). There are methods of exploiting knowledge
    of the vma's being searched to restrict the search space. These are:
    
    (1) shm mappings always start their lives at file offset 0, so only
    	vma's above shmaddr need be considered. find_vma() can be used
    	to seek to the proper position in mm->mmap in O(lg(n)) time.
    
    (2) The search is for a vma which could be a fragment of a broken-up
    	shm mapping, which would have been created starting at shmaddr
    	with vm_pgoff 0 and then continued no further into userspace
    	than shmaddr + size. So after having found an initial vma, find
    	the size of the shm segment it maps to calculate an upper bound
    	to the virtualspace that needs to be searched.
    
    (3) mremap() would have caused the original checks to miss vma's mapping
    	the shm segment if shmaddr were the original address at which
    	the shm segments were attached. This does no better and no worse
    	than the original code in that situation.
    
    (4) If the chain of references in vma->vm_file->f_dentry->d_inode->i_size
    	is not guaranteed by refcounting and/or the shm code then this is
    	oopsable; AFAICT an inode is always allocated.
    efbb77b2
shm.c 19.2 KB