From: Sage Weil Date: Wed, 18 Jun 2014 18:01:09 +0000 (-0700) Subject: common/io_priority: wrap ioprio_set() and gettid() X-Git-Tag: v0.67.10~30^2~2 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=0796057f1c13c467dd3eadca036e3034da20e500;p=ceph.git common/io_priority: wrap ioprio_set() and gettid() Signed-off-by: Sage Weil (cherry picked from commit 705713564bebd84ad31cc91698311cf2fbd51a48) Conflicts: src/common/Makefile.am --- diff --git a/src/Makefile.am b/src/Makefile.am index c79bbaecab3..0c6f3bad31b 100644 --- a/src/Makefile.am +++ b/src/Makefile.am @@ -1533,6 +1533,7 @@ libcommon_files = \ common/MemoryModel.cc \ common/armor.c \ common/fd.cc \ + common/io_priority.cc \ common/xattr.c \ common/safe_io.c \ common/snap_types.cc \ @@ -1809,6 +1810,7 @@ noinst_HEADERS = \ common/dout.h\ common/escape.h\ common/fd.h\ + common/io_priority.h\ common/version.h\ common/hex.h\ common/entity_name.h\ diff --git a/src/common/io_priority.cc b/src/common/io_priority.cc new file mode 100644 index 00000000000..b9eeae88f65 --- /dev/null +++ b/src/common/io_priority.cc @@ -0,0 +1,54 @@ +// -*- mode:C++; tab-width:8; c-basic-offset:2; indent-tabs-mode:t -*- +// vim: ts=8 sw=2 smarttab +/* + * Ceph - scalable distributed file system + * + * Copyright (C) 2012 Red Hat + * + * This is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License version 2.1, as published by the Free Software + * Foundation. See file COPYING. + * + */ + +#include +#include +#include /* For SYS_xxx definitions */ +#include +#include + +#include "common/errno.h" +#include "io_priority.h" + +pid_t ceph_gettid(void) +{ +#ifdef __linux__ + return syscall(SYS_gettid); +#else + return -ENOSYS; +#endif +} + +int ceph_ioprio_set(int whence, int who, int ioprio) +{ +#ifdef __linux__ + return syscall(SYS_ioprio_set, whence, who, ioprio); +#else + return -ENOSYS; +#endif +} + +int ceph_ioprio_string_to_class(const std::string& s) +{ + std::string l; + std::transform(s.begin(), s.end(), l.begin(), ::tolower); + + if (l == "idle") + return IOPRIO_CLASS_IDLE; + if (l == "be" || l == "besteffort" || l == "best effort") + return IOPRIO_CLASS_BE; + if (l == "rt" || l == "realtime" || l == "real time") + return IOPRIO_CLASS_RT; + return -EINVAL; +} diff --git a/src/common/io_priority.h b/src/common/io_priority.h new file mode 100644 index 00000000000..e458bba68bd --- /dev/null +++ b/src/common/io_priority.h @@ -0,0 +1,44 @@ +// -*- mode:C++; tab-width:8; c-basic-offset:2; indent-tabs-mode:t -*- +// vim: ts=8 sw=2 smarttab +/* + * Ceph - scalable distributed file system + * + * Copyright (C) 2012 Red Hat + * + * This is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License version 2.1, as published by the Free Software + * Foundation. See file COPYING. + * + */ + +#ifndef CEPH_COMMON_IO_PRIORITY_H +#define CEPH_COMMON_IO_PRIORITY_H + +#include + +extern pid_t ceph_gettid(); + +#ifndef IOPRIO_WHO_PROCESS +# define IOPRIO_WHO_PROCESS 1 +#endif +#ifndef IOPRIO_PRIO_VALUE +# define IOPRIO_CLASS_SHIFT 13 +# define IOPRIO_PRIO_VALUE(class, data) \ + (((class) << IOPRIO_CLASS_SHIFT) | (data)) +#endif +#ifndef IOPRIO_CLASS_RT +# define IOPRIO_CLASS_RT 1 +#endif +#ifndef IOPRIO_CLASS_BE +# define IOPRIO_CLASS_BE 2 +#endif +#ifndef IOPRIO_CLASS_IDLE +# define IOPRIO_CLASS_IDLE 3 +#endif + +extern int ceph_ioprio_set(int whence, int who, int ioprio); + +extern int ceph_ioprio_string_to_class(const std::string& s); + +#endif