The branch, master has been updated
via 9f8d272b0ec vfs_ceph_new: use per-share profile macros
via a794e96e62b vfs_default: use per-share profile macros
via 5869280bec9 s3/smb_prometheus_endpoint: export per-share profile
stats
via 7f65710d8ee status: dump only relevant sections of per-share
via cfadbb73f35 status: dump per-share profile counters
via 303b473515b smbd: smb2-operations per-share profile counters
via 904577f90ef smbd: init per-share profile counters
via fd1e4620cd3 param: allow per-share profiling mode
via 51c52fafb2d profile: reset per-share counters
via a65ba08c037 profile: collect per-share counters from TDB
via e753abce911 profile: defined helper macros for per-share counters
via 0733f232f49 profile: dynamic per-share in-memory counters
from 5d68404dc0b auth: Direct variable initialization
https://git.samba.org/?p=samba.git;a=shortlog;h=master
- Log -----------------------------------------------------------------
commit 9f8d272b0ec456ca713f8afda71ccfe2acbe5e39
Author: Shachar Sharon <[email protected]>
Date: Mon May 12 12:14:52 2025 +0300
vfs_ceph_new: use per-share profile macros
Signed-off-by: Shachar Sharon <[email protected]>
Reviewed-by: Volker Lendecke <[email protected]>
Reviewed-by: Anoop C S <[email protected]>
Autobuild-User(master): Anoop C S <[email protected]>
Autobuild-Date(master): Mon Jun 23 14:01:51 UTC 2025 on atb-devel-224
commit a794e96e62b44248b3f1f44ede956c549490cc0a
Author: Shachar Sharon <[email protected]>
Date: Mon Apr 28 21:36:39 2025 +0300
vfs_default: use per-share profile macros
Signed-off-by: Shachar Sharon <[email protected]>
Reviewed-by: Volker Lendecke <[email protected]>
Reviewed-by: Anoop C S <[email protected]>
commit 5869280bec92c3390d5e455ba54f24a2b4178e70
Author: Shachar Sharon <[email protected]>
Date: Mon May 26 11:51:04 2025 +0300
s3/smb_prometheus_endpoint: export per-share profile stats
Iterate over per-share TDB entries (is exists) and export as Prometheus
metrics via call-back function.
Allow passing share-name as additional label to Prometheus metrics. By
default, use empty label to follow OpenMetrics[1] conventions ("Empty
label values SHOULD be treated as if the label was not present").
[1]
https://github.com/prometheus/OpenMetrics/blob/main/specification/OpenMetrics.md
Signed-off-by: Shachar Sharon <[email protected]>
Reviewed-by: Volker Lendecke <[email protected]>
Reviewed-by: Anoop C S <[email protected]>
commit 7f65710d8ee903c75e1a7fca88000c44692d53a6
Author: Shachar Sharon <[email protected]>
Date: Tue May 20 10:27:23 2025 +0300
status: dump only relevant sections of per-share
Some profile sections are not relevant for per-share profile counters.
Ignore non-implemented section with all-zeros (avoid confusion).
Signed-off-by: Shachar Sharon <[email protected]>
Reviewed-by: Volker Lendecke <[email protected]>
Reviewed-by: Anoop C S <[email protected]>
commit cfadbb73f35b0a46fe02c74b9a228bea3812ba51
Author: Shachar Sharon <[email protected]>
Date: Mon Apr 28 21:30:22 2025 +0300
status: dump per-share profile counters
When dumping profile information, try to iterate also on per-share
profile entries and emit (json format).
Signed-off-by: Shachar Sharon <[email protected]>
Reviewed-by: Volker Lendecke <[email protected]>
Reviewed-by: Anoop C S <[email protected]>
commit 303b473515b9460b2c0ec1e47dfee8abe60685bc
Author: Shachar Sharon <[email protected]>
Date: Tue May 13 12:24:15 2025 +0300
smbd: smb2-operations per-share profile counters
Allow per-share profile counters for SMB2 operations.
Signed-off-by: Shachar Sharon <[email protected]>
Reviewed-by: Volker Lendecke <[email protected]>
Reviewed-by: Anoop C S <[email protected]>
commit 904577f90ef4cc75ec24c5ced86082adc87a91bc
Author: Shachar Sharon <[email protected]>
Date: Mon Apr 28 15:11:06 2025 +0300
smbd: init per-share profile counters
When per-share profile counters are enabled, setup/teardown the
profiling entry for specific 'snum' before/after VFS connect/disconnect.
Signed-off-by: Shachar Sharon <[email protected]>
Reviewed-by: Volker Lendecke <[email protected]>
Reviewed-by: Anoop C S <[email protected]>
commit fd1e4620cd31cb2889810f6dd3bd416a3505fb8a
Author: Shachar Sharon <[email protected]>
Date: Sun Apr 27 12:18:09 2025 +0300
param: allow per-share profiling mode
Allow per-share profile counters by setting a configure option
'smbd profiling share = yes' on each share which wants this option
enabled. Requires global profiling to be enabled.
Signed-off-by: Shachar Sharon <[email protected]>
Reviewed-by: Volker Lendecke <[email protected]>
Reviewed-by: Anoop C S <[email protected]>
commit 51c52fafb2d9605dbddf7ba7b1c418901741fb9d
Author: Shachar Sharon <[email protected]>
Date: Thu May 29 15:31:46 2025 +0300
profile: reset per-share counters
Allow zero-reset dynamic per-share profile counters when sending
'smbcontrol smbd profile flush' to active smbd.
Signed-off-by: Shachar Sharon <[email protected]>
Reviewed-by: Volker Lendecke <[email protected]>
Reviewed-by: Anoop C S <[email protected]>
commit a65ba08c0372f439bb8d06be0246bd0573f6cf12
Author: Shachar Sharon <[email protected]>
Date: Mon Apr 28 15:06:59 2025 +0300
profile: collect per-share counters from TDB
Helper functions to iterate over per-share profile counters from TDB
file using callback function.
Signed-off-by: Shachar Sharon <[email protected]>
Reviewed-by: Volker Lendecke <[email protected]>
Reviewed-by: Anoop C S <[email protected]>
commit e753abce911240b0f3d8cde55590fe0847db4c62
Author: Shachar Sharon <[email protected]>
Date: Mon Apr 28 15:00:43 2025 +0300
profile: defined helper macros for per-share counters
Helper macros the use per-share profile counters, using 'snum' as
lookup key.
Signed-off-by: Shachar Sharon <[email protected]>
Co-Authored-By: Anoop C S <[email protected]>
Reviewed-by: Volker Lendecke <[email protected]>
Reviewed-by: Anoop C S <[email protected]>
commit 0733f232f49944fee8371b6db4adb949d59aa965
Author: Shachar Sharon <[email protected]>
Date: Mon Apr 28 12:05:25 2025 +0300
profile: dynamic per-share in-memory counters
Mechanism to support per-share per-process run-time profiling counters.
Use in-memory cache for storing run-time entries, using 'snum' as key.
When storing in TDB file, uses unique key for each per-share profile
entry.
Signed-off-by: Shachar Sharon <[email protected]>
Signed-off-by: Avan Thakkar <[email protected]>
Reviewed-by: Volker Lendecke <[email protected]>
Reviewed-by: Anoop C S <[email protected]>
-----------------------------------------------------------------------
Summary of changes:
docs-xml/smbdotconf/misc/smbdprofilingext.xml | 14 +
source3/include/smbprofile.h | 302 +++++++++++++++-
source3/modules/vfs_ceph_new.c | 166 ++++-----
source3/modules/vfs_default.c | 248 +++++++------
source3/profile/profile.c | 222 ++++++++++++
source3/profile/profile_read.c | 46 +++
source3/smbd/globals.h | 1 +
source3/smbd/smb2_create.c | 3 +-
source3/smbd/smb2_notify.c | 6 +-
source3/smbd/smb2_server.c | 156 ++++++---
source3/smbd/smb2_service.c | 17 +
source3/utils/smb_prometheus_endpoint.c | 478 ++++++++++++++++++--------
source3/utils/status_json.c | 80 +++--
source3/utils/status_json.h | 7 +
source3/utils/status_json_dummy.c | 10 +
source3/utils/status_profile.c | 97 ++++++
16 files changed, 1435 insertions(+), 418 deletions(-)
create mode 100644 docs-xml/smbdotconf/misc/smbdprofilingext.xml
Changeset truncated at 500 lines:
diff --git a/docs-xml/smbdotconf/misc/smbdprofilingext.xml
b/docs-xml/smbdotconf/misc/smbdprofilingext.xml
new file mode 100644
index 00000000000..3720d38df58
--- /dev/null
+++ b/docs-xml/smbdotconf/misc/smbdprofilingext.xml
@@ -0,0 +1,14 @@
+<samba:parameter name="smbd profiling share"
+ context="S"
+ type="boolean"
+ xmlns:samba="http://www.samba.org/samba/DTD/samba-doc">
+<description>
+ <para>This parameter allows the administrator to enable per-share
+ profiling support. When enabled, profile counters may be collected
+ with per-share granularity a specific shares. Takes affect only
+ when global option
+ <smbconfoption name="smbd profiling level"/> is enabled.
+ </para>
+</description>
+<value type="default">no</value>
+</samba:parameter>
diff --git a/source3/include/smbprofile.h b/source3/include/smbprofile.h
index c8d2696884e..b45d709b016 100644
--- a/source3/include/smbprofile.h
+++ b/source3/include/smbprofile.h
@@ -256,6 +256,94 @@ struct tevent_context;
\
SMBPROFILE_STATS_END
+#define SMBPROFILE_STATS_PERSVC_SECTIONS \
+ SMBPROFILE_STATS_START \
+ \
+ SMBPROFILE_STATS_SECTION_START(syscall, "System Calls") \
+ SMBPROFILE_STATS_BASIC(syscall_opendir) \
+ SMBPROFILE_STATS_BASIC(syscall_fdopendir) \
+ SMBPROFILE_STATS_BASIC(syscall_readdir) \
+ SMBPROFILE_STATS_BASIC(syscall_rewinddir) \
+ SMBPROFILE_STATS_BASIC(syscall_mkdirat) \
+ SMBPROFILE_STATS_BASIC(syscall_closedir) \
+ SMBPROFILE_STATS_BASIC(syscall_open) \
+ SMBPROFILE_STATS_BASIC(syscall_openat) \
+ SMBPROFILE_STATS_BASIC(syscall_createfile) \
+ SMBPROFILE_STATS_BASIC(syscall_close) \
+ SMBPROFILE_STATS_BYTES(syscall_pread) \
+ SMBPROFILE_STATS_BYTES(syscall_asys_pread) \
+ SMBPROFILE_STATS_BYTES(syscall_pwrite) \
+ SMBPROFILE_STATS_BYTES(syscall_asys_pwrite) \
+ SMBPROFILE_STATS_BASIC(syscall_lseek) \
+ SMBPROFILE_STATS_BYTES(syscall_sendfile) \
+ SMBPROFILE_STATS_BYTES(syscall_recvfile) \
+ SMBPROFILE_STATS_BASIC(syscall_renameat) \
+ SMBPROFILE_STATS_BYTES(syscall_asys_fsync) \
+ SMBPROFILE_STATS_BASIC(syscall_stat) \
+ SMBPROFILE_STATS_BASIC(syscall_fstat) \
+ SMBPROFILE_STATS_BASIC(syscall_lstat) \
+ SMBPROFILE_STATS_BASIC(syscall_fstatat) \
+ SMBPROFILE_STATS_BASIC(syscall_get_alloc_size) \
+ SMBPROFILE_STATS_BASIC(syscall_unlinkat) \
+ SMBPROFILE_STATS_BASIC(syscall_chmod) \
+ SMBPROFILE_STATS_BASIC(syscall_fchmod) \
+ SMBPROFILE_STATS_BASIC(syscall_fchown) \
+ SMBPROFILE_STATS_BASIC(syscall_lchown) \
+ SMBPROFILE_STATS_BASIC(syscall_chdir) \
+ SMBPROFILE_STATS_BASIC(syscall_getwd) \
+ SMBPROFILE_STATS_BASIC(syscall_fntimes) \
+ SMBPROFILE_STATS_BASIC(syscall_ftruncate) \
+ SMBPROFILE_STATS_BASIC(syscall_fallocate) \
+ SMBPROFILE_STATS_BASIC(syscall_fcntl_lock) \
+ SMBPROFILE_STATS_BASIC(syscall_fcntl) \
+ SMBPROFILE_STATS_BASIC(syscall_linux_setlease) \
+ SMBPROFILE_STATS_BASIC(syscall_fcntl_getlock) \
+ SMBPROFILE_STATS_BASIC(syscall_readlinkat) \
+ SMBPROFILE_STATS_BASIC(syscall_symlinkat) \
+ SMBPROFILE_STATS_BASIC(syscall_linkat) \
+ SMBPROFILE_STATS_BASIC(syscall_mknodat) \
+ SMBPROFILE_STATS_BASIC(syscall_realpath) \
+ SMBPROFILE_STATS_BASIC(syscall_get_quota) \
+ SMBPROFILE_STATS_BASIC(syscall_set_quota) \
+ SMBPROFILE_STATS_BASIC(syscall_get_sd) \
+ SMBPROFILE_STATS_BASIC(syscall_set_sd) \
+ SMBPROFILE_STATS_BASIC(syscall_brl_lock) \
+ SMBPROFILE_STATS_BASIC(syscall_brl_unlock) \
+ SMBPROFILE_STATS_BASIC(syscall_brl_cancel) \
+ SMBPROFILE_STATS_BYTES(syscall_asys_getxattrat) \
+ SMBPROFILE_STATS_SECTION_END \
+ \
+ SMBPROFILE_STATS_SECTION_START(acl, "ACL Calls") \
+ SMBPROFILE_STATS_BASIC(get_nt_acl) \
+ SMBPROFILE_STATS_BASIC(get_nt_acl_at) \
+ SMBPROFILE_STATS_BASIC(fget_nt_acl) \
+ SMBPROFILE_STATS_BASIC(fset_nt_acl) \
+ SMBPROFILE_STATS_SECTION_END \
+ \
+ SMBPROFILE_STATS_SECTION_START(smb2, "SMB2 Calls") \
+ SMBPROFILE_STATS_IOBYTES(smb2_negprot) \
+ SMBPROFILE_STATS_IOBYTES(smb2_sesssetup) \
+ SMBPROFILE_STATS_IOBYTES(smb2_logoff) \
+ SMBPROFILE_STATS_IOBYTES(smb2_tcon) \
+ SMBPROFILE_STATS_IOBYTES(smb2_tdis) \
+ SMBPROFILE_STATS_IOBYTES(smb2_create) \
+ SMBPROFILE_STATS_IOBYTES(smb2_close) \
+ SMBPROFILE_STATS_IOBYTES(smb2_flush) \
+ SMBPROFILE_STATS_IOBYTES(smb2_read) \
+ SMBPROFILE_STATS_IOBYTES(smb2_write) \
+ SMBPROFILE_STATS_IOBYTES(smb2_lock) \
+ SMBPROFILE_STATS_IOBYTES(smb2_ioctl) \
+ SMBPROFILE_STATS_IOBYTES(smb2_cancel) \
+ SMBPROFILE_STATS_IOBYTES(smb2_keepalive) \
+ SMBPROFILE_STATS_IOBYTES(smb2_find) \
+ SMBPROFILE_STATS_IOBYTES(smb2_notify) \
+ SMBPROFILE_STATS_IOBYTES(smb2_getinfo) \
+ SMBPROFILE_STATS_IOBYTES(smb2_setinfo) \
+ SMBPROFILE_STATS_IOBYTES(smb2_break) \
+ SMBPROFILE_STATS_SECTION_END \
+ \
+ SMBPROFILE_STATS_END
+
/* this file defines the profile structure in the profile shared
memory area */
@@ -436,19 +524,21 @@ struct profile_stats {
smbprofile_dump_schedule(); \
} \
} while(0)
-#define SMBPROFILE_BYTES_ASYNC_START(_name, _area, _async, _bytes) \
- _SMBPROFILE_BYTES_ASYNC_START(_name##_stats, _area, _async, _bytes)
-#define SMBPROFILE_BYTES_ASYNC_SET_IDLE(_async) \
- _SMBPROFILE_TIMER_ASYNC_SET_IDLE(_async)
-#define SMBPROFILE_BYTES_ASYNC_SET_BUSY(_async) \
- _SMBPROFILE_TIMER_ASYNC_SET_BUSY(_async)
-#define SMBPROFILE_BYTES_ASYNC_END(_async) do { \
+#define _SMBPROFILE_BYTES_ASYNC_END(_async) do { \
if ((_async).stats != NULL) { \
_SMBPROFILE_TIMER_ASYNC_END(_async); \
(_async) = (struct smbprofile_stats_bytes_async) {}; \
smbprofile_dump_schedule(); \
} \
} while(0)
+#define SMBPROFILE_BYTES_ASYNC_START(_name, _area, _async, _bytes) \
+ _SMBPROFILE_BYTES_ASYNC_START(_name##_stats, _area, _async, _bytes)
+#define SMBPROFILE_BYTES_ASYNC_SET_IDLE(_async) \
+ _SMBPROFILE_TIMER_ASYNC_SET_IDLE(_async)
+#define SMBPROFILE_BYTES_ASYNC_SET_BUSY(_async) \
+ _SMBPROFILE_TIMER_ASYNC_SET_BUSY(_async)
+#define SMBPROFILE_BYTES_ASYNC_END(_async) \
+ _SMBPROFILE_BYTES_ASYNC_END(_async)
#define SMBPROFILE_IOBYTES_ASYNC_STATE(_async_name) \
struct smbprofile_stats_iobytes_async _async_name;
@@ -461,13 +551,7 @@ struct profile_stats {
smbprofile_dump_schedule(); \
} \
} while(0)
-#define SMBPROFILE_IOBYTES_ASYNC_START(_name, _area, _async, _inbytes) \
- _SMBPROFILE_IOBYTES_ASYNC_START(_name##_stats, _area, _async, _inbytes)
-#define SMBPROFILE_IOBYTES_ASYNC_SET_IDLE(_async) \
- _SMBPROFILE_TIMER_ASYNC_SET_IDLE(_async)
-#define SMBPROFILE_IOBYTES_ASYNC_SET_BUSY(_async) \
- _SMBPROFILE_TIMER_ASYNC_SET_BUSY(_async)
-#define SMBPROFILE_IOBYTES_ASYNC_END(_async, _outbytes, _opcode, _status) do {
\
+#define _SMBPROFILE_IOBYTES_ASYNC_END(_async, _outbytes, _opcode, _status) do
{ \
if ((_async).stats != NULL) { \
(_async).stats->outbytes += (_outbytes); \
_SMBPROFILE_TIMER_ASYNC_END(_async); \
@@ -478,6 +562,15 @@ struct profile_stats {
} \
} while(0)
+#define SMBPROFILE_IOBYTES_ASYNC_START(_name, _area, _async, _inbytes) \
+ _SMBPROFILE_IOBYTES_ASYNC_START(_name##_stats, _area, _async, _inbytes)
+#define SMBPROFILE_IOBYTES_ASYNC_SET_IDLE(_async) \
+ _SMBPROFILE_TIMER_ASYNC_SET_IDLE(_async)
+#define SMBPROFILE_IOBYTES_ASYNC_SET_BUSY(_async) \
+ _SMBPROFILE_TIMER_ASYNC_SET_BUSY(_async)
+#define SMBPROFILE_IOBYTES_ASYNC_END(_async, _outbytes, _opcode, _status) \
+ _SMBPROFILE_IOBYTES_ASYNC_END(_async, _outbytes, _opcode, _status) \
+
#define DO_PROFILE_INC_AUTH_SUCCESS() \
DO_PROFILE_INC(authentication); \
@@ -485,6 +578,14 @@ struct profile_stats {
DO_PROFILE_INC(authentication); \
DO_PROFILE_INC(authentication_failed); \
+struct profile_stats_persvc {
+ struct profile_stats stats;
+ int snum;
+ int refcnt;
+ bool active;
+ char dbkey[];
+};
+
extern struct profile_stats *profile_p;
struct smbprofile_global_state {
@@ -503,6 +604,10 @@ struct smbprofile_global_state {
struct {
struct profile_stats global;
} stats;
+
+ struct {
+ struct profile_stats_persvc **tbl;
+ } persvc;
};
extern struct smbprofile_global_state smbprofile_state;
@@ -727,4 +832,173 @@ void set_profile_level(int level, const struct server_id
*src);
struct messaging_context;
bool profile_setup(struct messaging_context *msg_ctx, bool rdonly);
+/* Per-share profiling */
+#ifdef WITH_PROFILE
+
+void smbprofile_persvc_mkref(int snum, const char *svc, const char *remote);
+void smbprofile_persvc_unref(int snum);
+struct profile_stats *smbprofile_persvc_get(int snum);
+void smbprofile_persvc_reset(void);
+
+int smbprofile_persvc_collect(int (*fn)(const char *key,
+ const struct profile_stats *stats,
+ void *private_data),
+ void *private_data);
+
+int smbprofile_persvc_collect_tdb(struct tdb_context *tdb,
+ int (*fn)(const char *,
+ const struct profile_stats *,
+ void *),
+ void *userp);
+
+#define START_PROFILE_X(_snum, x)
\
+ struct smbprofile_stats_basic_async __profasync_##x = {}; \
+ struct smbprofile_stats_basic_async __profasync_persvc_##x = {}; \
+ _SMBPROFILE_BASIC_ASYNC_START(x##_stats, profile_p, __profasync_##x); \
+ do { \
+ struct profile_stats *persvc_##x = smbprofile_persvc_get( \
+ _snum); \
+ if (persvc_##x != NULL) { \
+ _SMBPROFILE_BASIC_ASYNC_START(x##_stats, \
+ persvc_##x, \
+ __profasync_persvc_##x); \
+ } \
+ } while (0)
+
+#define START_PROFILE_BYTES_X(_snum, x, n) \
+ struct smbprofile_stats_bytes_async __profasync_##x = {}; \
+ struct smbprofile_stats_bytes_async __profasync_persvc_##x = {}; \
+ _SMBPROFILE_BYTES_ASYNC_START(x##_stats, \
+ profile_p, \
+ __profasync_##x, \
+ n); \
+ do { \
+ struct profile_stats *persvc_##x = smbprofile_persvc_get( \
+ _snum); \
+ if (persvc_##x != NULL) { \
+ _SMBPROFILE_BYTES_ASYNC_START(x##_stats, \
+ persvc_##x, \
+ __profasync_persvc_##x, \
+ n); \
+ } \
+ } while (0)
+
+#define END_PROFILE_X(x) \
+ do { \
+ SMBPROFILE_BASIC_ASYNC_END(__profasync_##x); \
+ SMBPROFILE_BASIC_ASYNC_END(__profasync_persvc_##x); \
+ } while (0)
+
+#define END_PROFILE_BYTES_X(x) \
+ do { \
+ SMBPROFILE_BYTES_ASYNC_END(__profasync_##x); \
+ SMBPROFILE_BYTES_ASYNC_END(__profasync_persvc_##x); \
+ } while (0)
+
+#define SMBPROFILE_BYTES_ASYNC_START_X(_snum, _name, _async, _async_persvc,
_bytes) \
+ _SMBPROFILE_BYTES_ASYNC_START(_name##_stats, profile_p, _async,
_bytes); \
+ do {
\
+ struct profile_stats *_px = smbprofile_persvc_get(_snum);
\
+ if (_px != NULL) {
\
+ _SMBPROFILE_BYTES_ASYNC_START(_name##_stats,
\
+ _px,
\
+ _async_persvc,
\
+ _bytes);
\
+ }
\
+ } while (0)
+
+#define SMBPROFILE_BYTES_ASYNC_SET_IDLE_X(_async, _async_persvc) \
+ do { \
+ _SMBPROFILE_TIMER_ASYNC_SET_IDLE(_async); \
+ _SMBPROFILE_TIMER_ASYNC_SET_IDLE(_async_persvc); \
+ } while (0)
+
+#define SMBPROFILE_BYTES_ASYNC_SET_BUSY_X(_async, _async_persvc) \
+ do { \
+ _SMBPROFILE_TIMER_ASYNC_SET_BUSY(_async); \
+ _SMBPROFILE_TIMER_ASYNC_SET_BUSY(_async_persvc); \
+ } while (0)
+
+#define SMBPROFILE_BYTES_ASYNC_END_X(_async, _async_persvc) \
+ do { \
+ _SMBPROFILE_BYTES_ASYNC_END(_async); \
+ _SMBPROFILE_BYTES_ASYNC_END(_async_persvc); \
+ } while (0)
+
+#define SMBPROFILE_IOBYTES_ASYNC_START_X(_snum, _name, _async, _async_persvc,
_bytes) \
+ _SMBPROFILE_IOBYTES_ASYNC_START(_name##_stats, profile_p, _async,
_bytes); \
+ do {
\
+ struct profile_stats *_px = smbprofile_persvc_get(_snum);
\
+ if (_px != NULL) {
\
+ _SMBPROFILE_IOBYTES_ASYNC_START(_name##_stats,
\
+ _px,
\
+ _async_persvc,
\
+ _bytes);
\
+ }
\
+ } while (0)
+
+#define SMBPROFILE_IOBYTES_ASYNC_SET_IDLE_X(_async, _async_persvc) \
+ do { \
+ _SMBPROFILE_TIMER_ASYNC_SET_IDLE(_async); \
+ _SMBPROFILE_TIMER_ASYNC_SET_IDLE(_async_persvc); \
+ } while (0)
+
+#define SMBPROFILE_IOBYTES_ASYNC_SET_BUSY_X(_async, _async_persvc) \
+ do { \
+ _SMBPROFILE_TIMER_ASYNC_SET_BUSY(_async); \
+ _SMBPROFILE_TIMER_ASYNC_SET_BUSY(_async_persvc); \
+ } while (0)
+
+#define SMBPROFILE_IOBYTES_ASYNC_END_X( \
+ _async, _async_persvc, _outbytes, _opcode, _status) \
+ do { \
+ _SMBPROFILE_IOBYTES_ASYNC_END(_async, \
+ _outbytes, \
+ _opcode, \
+ _status); \
+ _SMBPROFILE_IOBYTES_ASYNC_END(_async_persvc, \
+ _outbytes, \
+ _opcode, \
+ _status); \
+ } while (0)
+
+#else /* WITH_PROFILE */
+
+#define START_PROFILE_X(_snum, x)
+#define START_PROFILE_BYTES_X(_snum, x, n)
+#define END_PROFILE_X(x)
+#define END_PROFILE_BYTES_X(x)
+#define SMBPROFILE_BYTES_ASYNC_START_X(_name, _snum, _async, _async_persvc,
_bytes)
+#define SMBPROFILE_BYTES_ASYNC_SET_IDLE_X(_async, _async_persvc)
+#define SMBPROFILE_BYTES_ASYNC_SET_BUSY_X(_async, _async_persvc)
+#define SMBPROFILE_BYTES_ASYNC_END_X(_async, _async_persvc)
+#define SMBPROFILE_IOBYTES_ASYNC_START_X(_name, _snum, _async, _async_persvc,
_bytes)
+#define SMBPROFILE_IOBYTES_ASYNC_SET_IDLE_X(_async, _async_persvc)
+#define SMBPROFILE_IOBYTES_ASYNC_SET_BUSY_X(_async, _async_persvc)
+#define SMBPROFILE_IOBYTES_ASYNC_END_X(_async, _async_persvc, _outbytes,
_opcode, _status)
+
+static inline void smbprofile_persvc_mkref(int snum,
+ const char *svc,
+ const char *remote)
+{
+ return;
+}
+
+static inline void smbprofile_persvc_unref(int snum)
+{
+ return;
+}
+
+static inline struct profile_stats *smbprofile_persvc_get(int snum)
+{
+ return NULL;
+}
+
+static inline void smbprofile_persvc_reset(void)
+{
+ return;
+}
+
+#endif /* WITH_PROFILE */
+
#endif
diff --git a/source3/modules/vfs_ceph_new.c b/source3/modules/vfs_ceph_new.c
index 17f20ed2d6b..04694d56baf 100644
--- a/source3/modules/vfs_ceph_new.c
+++ b/source3/modules/vfs_ceph_new.c
@@ -2186,7 +2186,7 @@ static DIR *vfs_ceph_fdopendir(struct vfs_handle_struct
*handle,
void *result = NULL;
struct vfs_ceph_fh *cfh = NULL;
- START_PROFILE(syscall_fdopendir);
+ START_PROFILE_X(SNUM(handle->conn), syscall_fdopendir);
DBG_DEBUG("[CEPH] fdopendir: name=%s\n", fsp->fsp_name->base_name);
ret = vfs_ceph_fetch_fh(handle, fsp, &cfh);
if (ret != 0) {
@@ -2204,7 +2204,7 @@ out:
if (ret != 0) {
errno = -ret;
}
- END_PROFILE(syscall_fdopendir);
+ END_PROFILE_X(syscall_fdopendir);
return (DIR *)result;
}
@@ -2217,7 +2217,7 @@ static struct dirent *vfs_ceph_readdir(struct
vfs_handle_struct *handle,
int saved_errno = errno;
int ret = -1;
- START_PROFILE(syscall_readdir);
+ START_PROFILE_X(SNUM(handle->conn), syscall_readdir);
DBG_DEBUG("[CEPH] readdir: name=%s\n", dirfsp->fsp_name->base_name);
result = vfs_ceph_get_fh_dirent(dircfh);
@@ -2245,7 +2245,7 @@ static struct dirent *vfs_ceph_readdir(struct
vfs_handle_struct *handle,
out:
DBG_DEBUG("[CEPH] readdir: handle=%p name=%s ret=%d\n",
handle, dirfsp->fsp_name->base_name, ret);
- END_PROFILE(syscall_readdir);
+ END_PROFILE_X(syscall_readdir);
return result;
}
@@ -2253,10 +2253,10 @@ static void vfs_ceph_rewinddir(struct vfs_handle_struct
*handle, DIR *dirp)
{
const struct vfs_ceph_fh *dircfh = (const struct vfs_ceph_fh *)dirp;
- START_PROFILE(syscall_rewinddir);
+ START_PROFILE_X(SNUM(handle->conn), syscall_rewinddir);
DBG_DEBUG("[CEPH] rewinddir: handle=%p dirp=%p\n", handle, dirp);
vfs_ceph_ll_rewinddir(handle, dircfh);
- END_PROFILE(syscall_rewinddir);
+ END_PROFILE_X(syscall_rewinddir);
}
static int vfs_ceph_mkdirat(struct vfs_handle_struct *handle,
@@ -2269,7 +2269,7 @@ static int vfs_ceph_mkdirat(struct vfs_handle_struct
*handle,
struct vfs_ceph_fh *dircfh = NULL;
struct vfs_ceph_iref iref = {0};
- START_PROFILE(syscall_mkdirat);
+ START_PROFILE_X(SNUM(handle->conn), syscall_mkdirat);
DBG_DEBUG("[CEPH] mkdirat: handle=%p name=%s\n", handle, name);
result = vfs_ceph_fetch_fh(handle, dirfsp, &dircfh);
if (result != 0) {
@@ -2280,7 +2280,7 @@ static int vfs_ceph_mkdirat(struct vfs_handle_struct
*handle,
vfs_ceph_iput(handle, &iref);
out:
DBG_DEBUG("[CEPH] mkdirat: name=%s result=%d\n", name, result);
- END_PROFILE(syscall_mkdirat);
+ END_PROFILE_X(syscall_mkdirat);
return status_code(result);
}
@@ -2289,13 +2289,13 @@ static int vfs_ceph_closedir(struct vfs_handle_struct
*handle, DIR *dirp)
int result;
struct vfs_ceph_fh *cfh = (struct vfs_ceph_fh *)dirp;
- START_PROFILE(syscall_closedir);
+ START_PROFILE_X(SNUM(handle->conn), syscall_closedir);
DBG_DEBUG("[CEPH] closedir: handle=%p dirp=%p\n", handle, dirp);
result = vfs_ceph_ll_releasedir(handle, cfh);
vfs_ceph_release_fh(cfh);
vfs_ceph_remove_fh(handle, cfh->fsp);
DBG_DEBUG("[CEPH] closedir: dirp=%p result=%d\n", dirp, result);
- END_PROFILE(syscall_closedir);
+ END_PROFILE_X(syscall_closedir);
return status_code(result);
}
@@ -2313,7 +2313,7 @@ static int vfs_ceph_openat(struct vfs_handle_struct
*handle,
mode_t mode = how->mode;
int result = -ENOENT;
- START_PROFILE(syscall_openat);
+ START_PROFILE_X(SNUM(handle->conn), syscall_openat);
if ((how->resolve & ~VFS_OPEN_HOW_WITH_BACKUP_INTENT) != 0) {
result = -ENOSYS;
goto err_out;
@@ -2388,7 +2388,7 @@ out:
err_out:
DBG_DEBUG("[CEPH] openat: name=%s result=%d",
fsp->fsp_name->base_name, result);
- END_PROFILE(syscall_openat);
+ END_PROFILE_X(syscall_openat);
return status_code(result);
}
@@ -2397,7 +2397,7 @@ static int vfs_ceph_close(struct vfs_handle_struct
*handle, files_struct *fsp)
int result;
struct vfs_ceph_fh *cfh = NULL;
- START_PROFILE(syscall_close);
+ START_PROFILE_X(SNUM(handle->conn), syscall_close);
result = vfs_ceph_fetch_fh(handle, fsp, &cfh);
if (result != 0) {
goto out;
@@ -2408,7 +2408,7 @@ static int vfs_ceph_close(struct vfs_handle_struct
*handle, files_struct *fsp)
out:
DBG_DEBUG("[CEPH] close: handle=%p name=%s result=%d\n",
handle, fsp->fsp_name->base_name, result);
- END_PROFILE(syscall_close);
+ END_PROFILE_X(syscall_close);
return status_code(result);
--
Samba Shared Repository