SHM_NORESERVE flags for shmget()
PATCH 1/1 SHM_NORESERVE flags for shmget()
Hi Andrew,
Here is the patch to add SHM_NORESERVE functionality similar to MAP_NORESERVE for shared memory segments.
This mainly to avoid abuse of OVERCOMMIT_ALWAYS and this flag is ignored for OVERCOMMIT_NEVER. Hugh reviewed the patch earlier and had no objections to it. Could you include this ?
Thanks,
Badari
Signed-off-by Badari Pulavarty <[email protected]>
include/linux/shm.h +1 -0
@@ -92,6 +92,7 @@ struct shmid_kernel /* private to the ke#define SHM_DEST 01000/* segment will be destroyed on last detach */ #define SHM_LOCKED 02000/* segment will not be swapped */ #define SHM_HUGETLB 04000/* segment will use huge TLB pages */ +#define SHM_NORESERVE 010000/* don't check for reservations */ #ifdef CONFIG_SYSVIPC long do_shmat (int shmid,char __user *shmaddr,int shmflg,unsigned long *addr);
ipc/shm.c +9 -1
@@ -212,8 +212,16 @@ static int newseg (key_t key, int shmflg file =hugetlb_zero_setup (size); shp->mlock_user = current->user; }else { +int acctflag =VM_ACCOUNT ; +/* +* Do not allow no accounting for OVERCOMMIT_NEVER, even +* if it's asked for. +*/ +if ((shmflg &SHM_NORESERVE ) && + sysctl_overcommit_memory !=OVERCOMMIT_NEVER ) + acctflag =0 ;sprintf (name,"SYSV%08x" , key); - file =shmem_file_setup (name, size,VM_ACCOUNT ); + file =shmem_file_setup (name, size, acctflag); } error =PTR_ERR (file);if (IS_ERR (file))