FAQ Search Today's Posts Mark Forums Read
» Video Reviews

» Linux Archive

Linux-archive is a website aiming to archive linux email lists and to make them easily accessible for linux users/developers.


» Sponsor

» Partners

» Sponsor

Go Back   Linux Archive > Redhat > Device-mapper Development

 
 
LinkBack Thread Tools
 
Old 09-23-2011, 05:35 AM
Gmail
 
Default multipath: add support for setting oom_score_adj

I fear you sent twice the patch to disable queueing.



Cheers,

cvaroqui



> The oom_adj procfs interface is deprecated. I've added support for using

> the new oom_score_adj interface.* The code still falls back to using

> oom_adj if oom_score_adj doesn't exist.

>

> Signed-off-by: Benjamin Marzinski <bmarzins@redhat.com>

> ---

>* libmultipath/Makefile* * * |* * * 2

>* libmultipath/config.h* * * |* * * 1

>* libmultipath/configure.c |* * 13 +++++-

>* libmultipath/pidfile.c* * |* * 95

> +++++++++++++++++++++++++++++++++++++++++++++++ libmultipath/pidfile.h*

> |* * * 2* multipath/main.c* * * * * * * * |* * * 8 ++-

>* multipathd/Makefile* * * * * |* * * 2

>* multipathd/main.c* * * * * * * |* * * 2

>* multipathd/pidfile.c* * * * |* * 67 ---------------------------------

>* multipathd/pidfile.h* * * * |* * * 1

>* 10 files changed, 119 insertions(+), 74 deletions(-)

>

> Index: multipath-tools-110916/libmultipath/config.h

> ================================================== =================

> --- multipath-tools-110916.orig/libmultipath/config.h

> +++ multipath-tools-110916/libmultipath/config.h

> @@ -92,6 +92,7 @@ struct config {

>* *** int attribute_flags;

>* *** int fast_io_fail;

>* *** unsigned int dev_loss;

> +*** int allow_queueing;

>* *** uid_t uid;

>* *** gid_t gid;

>* *** mode_t mode;

> Index: multipath-tools-110916/libmultipath/configure.c

> ================================================== =================

> --- multipath-tools-110916.orig/libmultipath/configure.c

> +++ multipath-tools-110916/libmultipath/configure.c

> @@ -35,6 +35,7 @@

>* #include "alias.h"

>* #include "prio.h"

>* #include "util.h"

> +#include "pidfile.h"

>*

>* extern int

>* setup_map (struct multipath * mpp, char * params, int params_size)

> @@ -555,7 +556,17 @@ coalesce_paths (struct vectors * vecs, v

>* *** *** if (r == DOMAP_DRY)

>* *** *** *** continue;

>*

> -*** *** if (mpp->no_path_retry != NO_PATH_RETRY_UNDEF) {

> +*** *** if (!conf->daemon && !conf->allow_queueing &&

> +*** *** * * * !pidfile_check(DEFAULT_PIDFILE)) {

> +*** *** *** if (mpp->no_path_retry != NO_PATH_RETRY_UNDEF &&

> +*** *** *** * * * mpp->no_path_retry != NO_PATH_RETRY_FAIL)

> +*** *** *** *** condlog(3, "%s: multipathd not running, unset "

> +*** *** *** *** *** "queue_if_no_path feature", mpp->alias);

> +*** *** *** if (!dm_queue_if_no_path(mpp->alias, 0))

> +*** *** *** *** remove_feature(&mpp->features,

> +*** *** *** *** *** * * * * * * "queue_if_no_path");

> +*** *** }

> +*** *** else if (mpp->no_path_retry != NO_PATH_RETRY_UNDEF) {

>* *** *** *** if (mpp->no_path_retry == NO_PATH_RETRY_FAIL) {

>* *** *** *** *** condlog(3, "%s: unset queue_if_no_path feature",

>* *** *** *** *** *** mpp->alias);

> Index: multipath-tools-110916/multipath/main.c

> ================================================== =================

> --- multipath-tools-110916.orig/multipath/main.c

> +++ multipath-tools-110916/multipath/main.c

> @@ -79,7 +79,7 @@ usage (char * progname)

>* {

>* *** fprintf (stderr, VERSION_STRING);

>* *** fprintf (stderr, "Usage:
");

> -*** fprintf (stderr, "* %s [-d] [-r] [-v lvl] [-p pol] [-b fil] [dev]
",

> progname); +*** fprintf (stderr, "* %s [-d] [-r] [-v lvl] [-p pol] [-b fil]

> [-q] [dev]
", progname); *** fprintf (stderr, "* %s -l|-ll|-f [-v lvl] [-b

> fil] [dev]
", progname); *** fprintf (stderr, "* %s -F [-v lvl]
",

> progname); *** fprintf (stderr, "* %s -t
", progname);

> @@ -92,6 +92,7 @@ usage (char * progname)

>* *** *** "* -ll* * * * show multipath topology (maximum info)
"

>* *** *** "* -f* * * * * flush a multipath device map
"

>* *** *** "* -F* * * * * flush all multipath device maps
"

> +*** *** "* -q* * * * * allow queue_if_no_path when multipathd is not running
"

>* *** *** "* -d* * * * * dry run, do not create or update devmaps
"

>* *** *** "* -t* * * * * dump internal hardware table
"

>* *** *** "* -r* * * * * force devmap reload
"

> @@ -397,7 +398,7 @@ main (int argc, char *argv[])

>* *** *** condlog(0, "multipath tools need sysfs mounted");

>* *** *** exit(1);

>* *** }

> -*** while ((arg = getopt(argc, argv, ":dhl::FfM:v:b:Brt")) != EOF ) {

> +*** while ((arg = getopt(argc, argv, ":dhl::FfM:v:b:Brtq")) != EOF ) {

>* *** *** switch(arg) {

>* *** *** case 1: printf("optarg : %s
",optarg);

>* *** *** *** break;

> @@ -414,6 +415,9 @@ main (int argc, char *argv[])

>* *** *** case 'B':

>* *** *** *** conf->bindings_read_only = 1;

>* *** *** *** break;

> +*** *** case 'q':

> +*** *** *** conf->allow_queueing = 1;

> +*** *** *** break;

>* *** *** case 'd':

>* *** *** *** conf->dry_run = 1;

>* *** *** *** break;

> Index: multipath-tools-110916/multipathd/pidfile.c

> ================================================== =================

> --- multipath-tools-110916.orig/multipathd/pidfile.c

> +++ /dev/null

> @@ -1,67 +0,0 @@

> -#include <sys/types.h> /* for pid_t */

> -#include <sys/stat.h>* /* for open */

> -#include <signal.h>* * * /* for kill() */

> -#include <errno.h>* * * * /* for ESHRC */

> -#include <stdio.h>* * * * /* for f...() */

> -#include <string.h>* * * /* for memset() */

> -#include <stdlib.h>* * * /* for atoi() */

> -#include <unistd.h>* * * /* for unlink() */

> -#include <fcntl.h>* * * * /* for fcntl() */

> -

> -#include <debug.h>

> -

> -#include "pidfile.h"

> -

> -int pidfile_create(const char *pidFile, pid_t pid)

> -{

> -*** char buf[20];

> -*** struct flock lock;

> -*** int fd, value;

> -

> -*** if((fd = open(pidFile, O_WRONLY | O_CREAT,

> -*** *** * * * * * * (S_IRUSR | S_IWUSR | S_IRGRP | S_IROTH))) < 0) {

> -*** *** condlog(0, "Cannot open pidfile [%s], error was [%s]",

> -*** *** *** pidFile, strerror(errno));

> -*** *** return 1;

> -*** }

> -*** lock.l_type = F_WRLCK;

> -*** lock.l_start = 0;

> -*** lock.l_whence = SEEK_SET;

> -*** lock.l_len = 0;

> -

> -*** if (fcntl(fd, F_SETLK, &lock) < 0) {

> -*** *** if (errno != EACCES && errno != EAGAIN)

> -*** *** *** condlog(0, "Cannot lock pidfile [%s], error was [%s]",

> -*** *** *** *** pidFile, strerror(errno));

> -*** *** else

> -*** *** *** condlog(0, "process is already running");

> -*** *** goto fail;

> -*** }

> -*** if (ftruncate(fd, 0) < 0) {

> -*** *** condlog(0, "Cannot truncate pidfile [%s], error was [%s]",

> -*** *** *** pidFile, strerror(errno));

> -*** *** goto fail;

> -*** }

> -*** memset(buf, 0, sizeof(buf));

> -*** snprintf(buf, sizeof(buf)-1, "%u", pid);

> -*** if (write(fd, buf, strlen(buf)) != strlen(buf)) {

> -*** *** condlog(0, "Cannot write pid to pidfile [%s], error was [%s]",

> -*** *** *** pidFile, strerror(errno));

> -*** *** goto fail;

> -*** }

> -*** if ((value = fcntl(fd, F_GETFD, 0)) < 0) {

> -*** *** condlog(0, "Cannot get close-on-exec flag from pidfile [%s], "

> -*** *** *** "error was [%s]", pidFile, strerror(errno));

> -*** *** goto fail;

> -*** }

> -*** value |= FD_CLOEXEC;

> -*** if (fcntl(fd, F_SETFD, value) < 0) {

> -*** *** condlog(0, "Cannot set close-on-exec flag from pidfile [%s], "

> -*** *** *** "error was [%s]", pidFile, strerror(errno));

> -*** *** goto fail;

> -*** }

> -*** return 0;

> -fail:

> -*** close(fd);

> -*** return 1;

> -}

> Index: multipath-tools-110916/multipathd/pidfile.h

> ================================================== =================

> --- multipath-tools-110916.orig/multipathd/pidfile.h

> +++ /dev/null

> @@ -1 +0,0 @@

> -int pidfile_create(const char *pidFile, pid_t pid);

> Index: multipath-tools-110916/libmultipath/Makefile

> ================================================== =================

> --- multipath-tools-110916.orig/libmultipath/Makefile

> +++ multipath-tools-110916/libmultipath/Makefile

> @@ -15,7 +15,7 @@ OBJS = memory.o parser.o vector.o devmap

>* * * * * * * * pgpolicies.o debug.o regex.o defaults.o uevent.o

>* * * * * * * * switchgroup.o uxsock.o print.o alias.o log_pthread.o

>* * * * * * * * log.o configure.o structs_vec.o sysfs.o prio.o checkers.o

> -* * * * * * lock.o waiter.o

> +* * * * * * lock.o waiter.o pidfile.o

>*

>* LIBDM_API_FLUSH = $(shell grep -Ecs

> '^[a-z]*[[:space:]]+dm_task_no_flush' /usr/include/libdevmapper.h)

> Index: multipath-tools-110916/libmultipath/pidfile.c

> ================================================== =================

> --- /dev/null

> +++ multipath-tools-110916/libmultipath/pidfile.c

> @@ -0,0 +1,95 @@

> +#include <sys/types.h> /* for pid_t */

> +#include <sys/stat.h>* /* for open */

> +#include <signal.h>* * * /* for kill() */

> +#include <errno.h>* * * * /* for ESHRC */

> +#include <stdio.h>* * * * /* for f...() */

> +#include <string.h>* * * /* for memset() */

> +#include <stdlib.h>* * * /* for atoi() */

> +#include <unistd.h>* * * /* for unlink() */

> +#include <fcntl.h>* * * * /* for fcntl() */

> +

> +#include "debug.h"

> +#include "pidfile.h"

> +

> +int pidfile_create(const char *pidFile, pid_t pid)

> +{

> +*** char buf[20];

> +*** struct flock lock;

> +*** int fd, value;

> +

> +*** if((fd = open(pidFile, O_WRONLY | O_CREAT,

> +*** *** * * * * * * (S_IRUSR | S_IWUSR | S_IRGRP | S_IROTH))) < 0) {

> +*** *** condlog(0, "Cannot open pidfile [%s], error was [%s]",

> +*** *** *** pidFile, strerror(errno));

> +*** *** return 1;

> +*** }

> +*** lock.l_type = F_WRLCK;

> +*** lock.l_start = 0;

> +*** lock.l_whence = SEEK_SET;

> +*** lock.l_len = 0;

> +

> +*** if (fcntl(fd, F_SETLK, &lock) < 0) {

> +*** *** if (errno != EACCES && errno != EAGAIN)

> +*** *** *** condlog(0, "Cannot lock pidfile [%s], error was [%s]",

> +*** *** *** *** pidFile, strerror(errno));

> +*** *** else

> +*** *** *** condlog(0, "process is already running");

> +*** *** goto fail;

> +*** }

> +*** if (ftruncate(fd, 0) < 0) {

> +*** *** condlog(0, "Cannot truncate pidfile [%s], error was [%s]",

> +*** *** *** pidFile, strerror(errno));

> +*** *** goto fail;

> +*** }

> +*** memset(buf, 0, sizeof(buf));

> +*** snprintf(buf, sizeof(buf)-1, "%u", pid);

> +*** if (write(fd, buf, strlen(buf)) != strlen(buf)) {

> +*** *** condlog(0, "Cannot write pid to pidfile [%s], error was [%s]",

> +*** *** *** pidFile, strerror(errno));

> +*** *** goto fail;

> +*** }

> +*** if ((value = fcntl(fd, F_GETFD, 0)) < 0) {

> +*** *** condlog(0, "Cannot get close-on-exec flag from pidfile [%s], "

> +*** *** *** "error was [%s]", pidFile, strerror(errno));

> +*** *** goto fail;

> +*** }

> +*** value |= FD_CLOEXEC;

> +*** if (fcntl(fd, F_SETFD, value) < 0) {

> +*** *** condlog(0, "Cannot set close-on-exec flag from pidfile [%s], "

> +*** *** *** "error was [%s]", pidFile, strerror(errno));

> +*** *** goto fail;

> +*** }

> +*** return 0;

> +fail:

> +*** close(fd);

> +*** return 1;

> +}

> +

> +int pidfile_check(const char *file)

> +{

> +*** int fd;

> +*** struct flock lock;

> +

> +*** fd = open(file, O_RDONLY);

> +*** if (fd < 0) {

> +*** *** if (errno == ENOENT)

> +*** *** *** return 0;

> +*** *** condlog(0, "Cannot open pidfile, %s : %s", file,

> +*** *** *** *** strerror(errno));

> +*** *** return -1;

> +*** }

> +*** lock.l_type = F_WRLCK;

> +*** lock.l_start = 0;

> +*** lock.l_whence = SEEK_SET;

> +*** lock.l_len = 0;

> +

> +*** if (fcntl(fd, F_GETLK, &lock) < 0) {

> +*** *** condlog(0, "Cannot check lock on pidfile, %s : %s", file,

> +*** *** *** *** strerror(errno));

> +*** *** return -1;

> +*** }

> +*** close(fd);

> +*** if (lock.l_type == F_UNLCK)

> +*** *** return 0;

> +*** return 1;

> +}

> Index: multipath-tools-110916/libmultipath/pidfile.h

> ================================================== =================

> --- /dev/null

> +++ multipath-tools-110916/libmultipath/pidfile.h

> @@ -0,0 +1,2 @@

> +int pidfile_create(const char *pidFile, pid_t pid);

> +int pidfile_check(const char *file);

> Index: multipath-tools-110916/multipathd/Makefile

> ================================================== =================

> --- multipath-tools-110916.orig/multipathd/Makefile

> +++ multipath-tools-110916/multipathd/Makefile

> @@ -19,7 +19,7 @@ LDFLAGS += -lpthread -ldevmapper -lreadl

>* #

>* # object files

>* #

> -OBJS = main.o pidfile.o uxlsnr.o uxclnt.o cli.o cli_handlers.o

> +OBJS = main.o uxlsnr.o uxclnt.o cli.o cli_handlers.o

>*

>*

>* #

> Index: multipath-tools-110916/multipathd/main.c

> ================================================== =================

> --- multipath-tools-110916.orig/multipathd/main.c

> +++ multipath-tools-110916/multipathd/main.c

> @@ -49,9 +49,9 @@

>* #include <prio.h>

>* #include <pgpolicies.h>

>* #include <uevent.h>

> +#include <pidfile.h>

>*

>* #include "main.h"

> -#include "pidfile.h"

>* #include "uxlsnr.h"

>* #include "uxclnt.h"

>* #include "cli.h"






--
dm-devel mailing list
dm-devel@redhat.com
https://www.redhat.com/mailman/listinfo/dm-devel
 
Old 09-23-2011, 02:35 PM
Benjamin Marzinski
 
Default multipath: add support for setting oom_score_adj

The oom_adj procfs interface is deprecated. I've added support for using the
new oom_score_adj interface. The code still falls back to using oom_adj
if oom_score_adj doesn't exist.

Resending, since I was obviously working far too late last night.

Signed-off-by: Benjamin Marzinski <bmarzins@redhat.com>
---
multipathd/main.c | 37 ++++++++++++++++++++++++++++---------
1 file changed, 28 insertions(+), 9 deletions(-)

Index: multipath-tools-110916/multipathd/main.c
================================================== =================
--- multipath-tools-110916.orig/multipathd/main.c
+++ multipath-tools-110916/multipathd/main.c
@@ -15,6 +15,7 @@
#include <sys/time.h>
#include <sys/resource.h>
#include <limits.h>
+#include <linux/oom.h>

/*
* libcheckers
@@ -1458,17 +1459,35 @@ setscheduler (void)
}

static void
-set_oom_adj (int val)
+set_oom_adj (void)
{
+ int retry = 1;
+ char *file = "/proc/self/oom_score_adj";
+ int score = OOM_SCORE_ADJ_MIN;
FILE *fp;
+ struct stat st;

- fp = fopen("/proc/self/oom_adj", "w");
-
- if (!fp)
- return;
-
- fprintf(fp, "%i", val);
- fclose(fp);
+ do {
+ if (stat(file, &st) == 0){
+ fp = fopen(file, "w");
+ if (!fp) {
+ condlog(0, "couldn't fopen %s : %s", file,
+ strerror(errno));
+ return;
+ }
+ fprintf(fp, "%i", score);
+ fclose(fp);
+ return;
+ }
+ if (errno != ENOENT) {
+ condlog(0, "couldn't stat %s : %s", file,
+ strerror(errno));
+ return;
+ }
+ file = "/proc/self/oom_adj";
+ score = OOM_ADJUST_MIN;
+ } while (retry--);
+ condlog(0, "couldn't adjust oom score");
}

static int
@@ -1547,7 +1566,7 @@ child (void * param)

signal_init();
setscheduler();
- set_oom_adj(-16);
+ set_oom_adj();
vecs = gvecs = init_vecs();

if (!vecs)

--
dm-devel mailing list
dm-devel@redhat.com
https://www.redhat.com/mailman/listinfo/dm-devel
 

Thread Tools




All times are GMT. The time now is 07:16 AM.

VBulletin, Copyright ©2000 - 2014, Jelsoft Enterprises Ltd.
Content Relevant URLs by vBSEO ©2007, Crawlability, Inc.
Copyright 2007 - 2008, www.linux-archive.org