lkml.org 
[lkml]   [2005]   [Dec]   [18]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
/
Date
From
Subject[Bug] mlockall() not working properly in 2.6.x
Hi!

A year ago, I wrote a small mlockall()-wrapper ("noswap") to make
certain programs unswappable. It used to work perfectly, until I
upgraded to kernel 2.6.x (2.6.13.1 in my case, but that shouldn't
matter), which made the mlockall() execute without error, but also
without any effect (the "L" in the STAT column of "ps axf" which
indicates locked pages is missing).


The complete program source and the strace log of

strace -v -f -s 4096 noswap sleep 9999

is here:

http://marc-jano.de/tmp/noswap-10935/


Here are the most important lines:

-----< snip >-----

/* mark process as unswappable for all times */
if (ret = mlockall (MCL_CURRENT | MCL_FUTURE))
perror ("mlockall()");

/* give up root privileges */
if (ret = setuid (getuid()) ) { perror ("setuid()"); exit (ret); };
if (ret = setgid (getgid()) ) { perror ("setgid()"); exit (ret); };

/* execute program */
if (ret = execvp (argv[1], exec_argv)) perror ("execvp()");

exit (ret);

-----< snip >-----

The strace log shows that mlockall() returns with no error.


If I replace the execvp() call with a sleep(9999), then the current
process (noswap) is properly locked, as can be checked by looking
for a capital "L" in the ps STAT column.

So it seems that the mlockall() flags are not passed somehow when
using execvp().


Best regards

Marc-Jano (not subscribed to the list, so for further questions,
please Cc:)
-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/

\
 
 \ /
  Last update: 2005-12-18 22:25    [W:0.051 / U:0.232 seconds]
©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site