From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mail-wm1-f44.google.com (mail-wm1-f44.google.com [209.85.128.44]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 2BE383242D7 for ; Sat, 2 May 2026 10:26:21 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.128.44 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1777717583; cv=none; b=rssf6gV5b4gC1YRLlpQujo235PWZYlmUZa5ArsgPVmoigHbAT2S2SFzf9ma/6z2laXlZ7g8HOY40IpLQIZxacVhCLNTcHn+yAEZCqNwwcvI2TTw99UiRcWxZOO/83M3N5YPMpT0FE1WopE1wI2CgECAUXn7sYBWsCrj3OLPGMAM= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1777717583; c=relaxed/simple; bh=5VDOAmL20Fz9qlrG8G7ceYj64eJKUyoGVE8PuemoHF4=; h=Message-ID:Date:MIME-Version:Subject:To:Cc:References:From: In-Reply-To:Content-Type; b=g78NJE6V0zw6Qvc4Hz32b3+YPMWZZahjyvbU2adzRJbNCRwQssl5P8ZdYKFoA09u2wp6M/LUC9IUnboXjY7Xp5U/CFzy9yqDUa+BjURh8ZiSKIDAireaU8Fh+a1pjuTiyK/LqoUxg6TsOQb7t0xg0v2n/mDcK+YmK47TWIfz21w= ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=r2qBovBV; arc=none smtp.client-ip=209.85.128.44 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="r2qBovBV" Received: by mail-wm1-f44.google.com with SMTP id 5b1f17b1804b1-48a3e9862f0so16296605e9.1 for ; Sat, 02 May 2026 03:26:20 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1777717579; x=1778322379; darn=vger.kernel.org; h=content-transfer-encoding:in-reply-to:from:content-language :references:cc:to:subject:user-agent:mime-version:date:message-id :from:to:cc:subject:date:message-id:reply-to; bh=r3aqw4pxo6mHF7QSikvhQnxY0ABm84nxT4/Oyu1pc9E=; b=r2qBovBVMzcKJIMkzCKJdTQNFnqw52hTNYYa3G6vKjQc2dhShm3b5c2kQ4cp5exHxR XzQiX134/9zO8EUZddyI8Pzlye+USEFFiyA79LX3Uk7ql1nmPdZhac3X98WAJyGiMfBR wXtAG659uOIZF9xobW0gJQmr7eeDIfe8y2zAkVaCjFmP8QtJllBct9uP0iwlcxw4bSFX NELdJB+PSM0UBit1huIWX2wEd0kdGTSwsSEoGvksi0rECl+ivV1vBiPb5qOZBiSx7Qfk 4sFM8lDbdfh9BxYip0s7GiM2Jckjp/jlqGyLoVKvodFAYnYCoNyj+NpU+pfF+l4AMnSd jDIw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1777717579; x=1778322379; h=content-transfer-encoding:in-reply-to:from:content-language :references:cc:to:subject:user-agent:mime-version:date:message-id :x-gm-gg:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=r3aqw4pxo6mHF7QSikvhQnxY0ABm84nxT4/Oyu1pc9E=; b=hV+2pP7PgRuxMTI+tjHP5AnufQeNHKx4Sv32PgmJaHcleHghr925isjPrz53r6lwyu e9A0+RCpaQW2q4UnHwO6kAWEWUTuC+zOvqB8lO/yDUIrF8GH1zHDt39CmWqjokn7vrzt gcVvQzJIaXpd/bDWYZmdMnpez4V4Al/Vvus2UEMl8HMEepSDnFwiIEdKGrfvUyKr44yl kvKQp+RZMpZ5uNnhu9gokGJcPcqrzfCR3BjBuOMI9jz6rDgijd1wmgcRvljUvpe9glm7 aXOq2glzcABFbNJwhZy44kzIsrBuvVUeaOf/YGwd5teR2Cjpy81YYsaarjI4cfUMyygE HgWQ== X-Forwarded-Encrypted: i=1; AFNElJ+vcArjpsLI+DU9HdW5CaBn80AuKgl6kPZ6xJduk9zQfBr2vVuTQfy7gRmytpCmArR0yTvVWfTHtrfi3Ks=@vger.kernel.org X-Gm-Message-State: AOJu0YzmMh14sMPxMZTZhqnuBhQgYQZu7O3HvqzMN7x8le2AjYZ/Cpku tuy/p9kA2wK7s5Qn+E65MBlJ0D6oj5PGMz0IMeU2t9EsUYmQsVzmnAtH X-Gm-Gg: AeBDiev66WDxY1TMyvDvdGHVcGog7O1dGOsBOC/mDexEpIY2PDQXhTBIATLHCNiW7El 9S3PDQ2Y4nZ/IBmrSmpfpPZnsaCuFaHmNgZGEgw43A7GLxWULVsucKC1O3UhOc1TWBMCR3cHZRQ WMyE1NeLOaO3TwH8n5aFJPWZxxCWkq6hU6pYGj6j1kXTQOI5NRpYZkHpPH7kztlrJjYMivuDpl2 kuI7Xwcps9jG4sE096EQ69loZsUfIhpKzlVwZlnDGnhC01kE3qUnLpM7QfiUs/Cyuda1MAJ5S9r 0S8/OhNomuX0vgZV8MT8h0AaDyagogPRr/AdINTYk48hnu1T7Ms1LQA1uDsmXO51HuO4Yg07p+C fEerLcj/ou5EVora7EQeD75UqJiavfRoqaQXGhn9c650rR/FTPXEO1ak1hMsrOeINn6B2NIobVu 3lkdWeHsAo5jtbi41b4f3BW3DZJWX2rQxstca5/yDIGJ2WUk3dbwNGkn1DykjUhPmnG+Mn7iTZQ Cp417EPmqT7eGxqwSrsa2P9u1CDVOuaX224mNvx51K9UCR8Ux5VR5R7BPPEEvui X-Received: by 2002:a05:600c:8b11:b0:48a:5339:a46 with SMTP id 5b1f17b1804b1-48a970eafbemr38000475e9.9.1777717579260; Sat, 02 May 2026 03:26:19 -0700 (PDT) Received: from [10.109.92.8] (82-132-229-207.dab.02.net. [82.132.229.207]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-48a8ebc4201sm192896505e9.15.2026.05.02.03.26.17 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Sat, 02 May 2026 03:26:18 -0700 (PDT) Message-ID: <85b63dbc-1fb3-4913-9419-90908c5b6358@gmail.com> Date: Sat, 2 May 2026 11:26:16 +0100 Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 User-Agent: Mozilla Thunderbird Subject: Re: io_uring: should IORING_TIMEOUT_ABS honour the submitter's time namespace? To: Xie Maoyi , Jens Axboe Cc: Andrei Vagin , "io-uring@vger.kernel.org" , "linux-kernel@vger.kernel.org" References: Content-Language: en-US From: Pavel Begunkov In-Reply-To: Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 7bit On 5/2/26 10:21, Xie Maoyi wrote: > Hi all, > > I think I have found what might be a bug in io_uring's absolute-deadline path on v7.0 mainline, and I would appreciate your confirmation on whether it is actually a bug and whether it is worth fixing. timerfd seems to adjust it with timens_ktime_to_host(), maybe something like below should do it, _not_ tested. FWIW, IORING_TIMEOUT_ABS is much older than 7.0. diff --git a/io_uring/timeout.c b/io_uring/timeout.c index 4cfdfc519770..184d81a1d594 100644 --- a/io_uring/timeout.c +++ b/io_uring/timeout.c @@ -3,6 +3,7 @@ #include #include #include +#include #include @@ -35,6 +36,27 @@ struct io_timeout_rem { bool ltimeout; }; +static clockid_t io_flags_to_clock(unsigned flags) +{ + switch (flags & IORING_TIMEOUT_CLOCK_MASK) { + case IORING_TIMEOUT_BOOTTIME: + return CLOCK_BOOTTIME; + case IORING_TIMEOUT_REALTIME: + return CLOCK_REALTIME; + default: + /* can't happen, vetted at prep time */ + WARN_ON_ONCE(1); + fallthrough; + case 0: + return CLOCK_MONOTONIC; + } +} + +static clockid_t io_timeout_get_clock(struct io_timeout_data *data) +{ + return io_flags_to_clock(data->flags); +} + static int io_parse_user_time(ktime_t *time, u64 arg, unsigned flags) { struct timespec64 ts; @@ -43,7 +65,7 @@ static int io_parse_user_time(ktime_t *time, u64 arg, unsigned flags) *time = ns_to_ktime(arg); if (*time < 0) return -EINVAL; - return 0; + goto out; } if (get_timespec64(&ts, u64_to_user_ptr(arg))) @@ -51,6 +73,9 @@ static int io_parse_user_time(ktime_t *time, u64 arg, unsigned flags) if (ts.tv_sec < 0 || ts.tv_nsec < 0) return -EINVAL; *time = timespec64_to_ktime(ts); +out: + if (flags & IORING_TIMEOUT_ABS) + *time = timens_ktime_to_host(io_flags_to_clock(flags), *time); return 0; } @@ -397,22 +422,6 @@ static enum hrtimer_restart io_link_timeout_fn(struct hrtimer *timer) return HRTIMER_NORESTART; } -static clockid_t io_timeout_get_clock(struct io_timeout_data *data) -{ - switch (data->flags & IORING_TIMEOUT_CLOCK_MASK) { - case IORING_TIMEOUT_BOOTTIME: - return CLOCK_BOOTTIME; - case IORING_TIMEOUT_REALTIME: - return CLOCK_REALTIME; - default: - /* can't happen, vetted at prep time */ - WARN_ON_ONCE(1); - fallthrough; - case 0: - return CLOCK_MONOTONIC; - } -} - static int io_linked_timeout_update(struct io_ring_ctx *ctx, __u64 user_data, ktime_t ts, enum hrtimer_mode mode) __must_hold(&ctx->timeout_lock) -- Pavel Begunkov