15480 static inline int expand_stack(
15481 struct vm_area_struct * vma, unsigned long
address){
15483 unsigned long grow;address
&= PAGE_MASK; /*dir. de página*/
15484 grow = vma->vm_start - address;
/*comprueba que,
si se quiere aumentar el tamaño del área,
hay
memoria suficiente. Si no, retorna -ENOMEM */
15487 if
(vma->vm_end - address
15488
>(unsigned long)current->rlim[RLIMIT_STACK].rlim_cur
15489
|| (vma->vm_mm->total_vm << PAGE_SHIFT) + grow
15490
>(unsigned long)current->rlim[RLIMIT_AS].rlim_cur)
15491
return -ENOMEM;
/*modificamos el
tamaño del área vma */
15492
vma->vm_start = address; vma->vm_offset -= grow;
15494
vma->vm_mm->total_vm += grow >> PAGE_SHIFT;
15495 if
(vma->vm_flags & VM_LOCKED)
15496
vma->vm_mm->locked_vm += grow >> PAGE_SHIFT;
15497 return 0;}