[lttng-dev] [PATCH lttng-modules 5/5] Fix: atomic_long_add_unless() returns a boolean

Michael Jeanson mjeanson at efficios.com
Mon Mar 18 16:20:36 EDT 2019


Because of a documentation error in older kernels, it was assumed that
atomic_long_add_unless would return the 'unless' value when it failed
but the implementation actually returns a boolean.

Also add missing error code int 'ret' and compare against the right type
max value.

Signed-off-by: Michael Jeanson <mjeanson at efficios.com>
---
 lttng-abi.c    | 7 +++----
 lttng-events.c | 4 ++--
 2 files changed, 5 insertions(+), 6 deletions(-)

diff --git a/lttng-abi.c b/lttng-abi.c
index 0534472..ca94379 100644
--- a/lttng-abi.c
+++ b/lttng-abi.c
@@ -419,8 +419,8 @@ int lttng_abi_create_channel(struct file *session_file,
 		transport_name = "<unknown>";
 		break;
 	}
-	if (atomic_long_add_unless(&session_file->f_count,
-		1, INT_MAX) == INT_MAX) {
+	if (!atomic_long_add_unless(&session_file->f_count, 1, LONG_MAX)) {
+		ret = -EOVERFLOW;
 		goto refcount_error;
 	}
 	/*
@@ -1072,8 +1072,7 @@ int lttng_abi_create_event(struct file *channel_file,
 		goto file_error;
 	}
 	/* The event holds a reference on the channel */
-	if (atomic_long_add_unless(&channel_file->f_count,
-		1, INT_MAX) == INT_MAX) {
+	if (!atomic_long_add_unless(&channel_file->f_count, 1, LONG_MAX)) {
 		ret = -EOVERFLOW;
 		goto refcount_error;
 	}
diff --git a/lttng-events.c b/lttng-events.c
index f4206c5..a4570b7 100644
--- a/lttng-events.c
+++ b/lttng-events.c
@@ -1140,8 +1140,8 @@ int lttng_session_list_tracker_pids(struct lttng_session *session)
 		ret = PTR_ERR(tracker_pids_list_file);
 		goto file_error;
 	}
-	if (atomic_long_add_unless(&session->file->f_count,
-		1, INT_MAX) == INT_MAX) {
+	if (!atomic_long_add_unless(&session->file->f_count, 1, LONG_MAX)) {
+		ret = -EOVERFLOW;
 		goto refcount_error;
 	}
 	ret = lttng_tracker_pids_list_fops.open(NULL, tracker_pids_list_file);
-- 
2.17.1



More information about the lttng-dev mailing list