From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mail-wr1-f41.google.com (mail-wr1-f41.google.com [209.85.221.41]) (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 426C52C0F8C for ; Fri, 3 Jul 2026 19:10:07 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.221.41 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1783105808; cv=none; b=DLUMNSHKBK5vbMJ49y0TPsiLH5uc2rr5NhSxBh7o3c5+7XaBCnqAoVwdCWF9qTILC8aFD29T+W1jcNZ9Su+vji5adcuKLOy+hY4RnjLPm75OAj0nXfE9C2x4wO1Po4Oo3hS94tQzIJShU/2HDSUShmRMQJfNSFOHDtWsxHgPQ/U= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1783105808; c=relaxed/simple; bh=ZlK7z9//RnFfOfskycYtIQa0klINO7/vYVNzgYYGnm8=; h=From:To:Cc:Subject:Date:Message-ID:MIME-Version; b=e7tMk3yHXKm7/65ilVsBsOd5dhlT1/7AxvRadgl+z4krOqcR5MwLt6XGNA+iYMs/3t9MIekFt6pzlPZRRaOwLRbk9QBSjYJgnDbf5Q2fEufwE9hdRQt9MCe40Qcn6jXRtFd1cmiM3Yeg0A9znrCfbf95/EEGTRLJ0CJ3xNKn+UU= 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=ePW9BTRL; arc=none smtp.client-ip=209.85.221.41 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="ePW9BTRL" Received: by mail-wr1-f41.google.com with SMTP id ffacd0b85a97d-4720f3bf164so1016864f8f.1 for ; Fri, 03 Jul 2026 12:10:07 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1783105806; x=1783710606; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:message-id:date:subject:cc :to:from:from:to:cc:subject:date:message-id:reply-to; bh=9N2tBl8ViVZews9y8opzseXm1ElhkkHecx0+lMTxLKI=; b=ePW9BTRLJvrCG2zx7UpvDCqBUoVA7ZTV9ziZMGbUUmsBVokcWIvk30dTcJNgzTTuuk Ib/i0pg4nGAVd7aYvmGcl4RDnU3T1I0uUwz0i108ntSgv+5Pe4X/xxCJdpgfOWli25vM 8ryZrmOSvWft48U6sDHo4hln1M0Uk0OiUu0aUYdy+sBeUCQJHCNyWtoCxRsTEkwz69H6 feyF8idORGElHzwCdB8jTz78f9ZENbO118e/BbC3N+2jONHvZtDZZ+8bXqPXw3hne7RV mMkhZcnYwGIO404s8sMJrUi3T8/ehqDMuqENUYtaJEjCuLHiky++DRJRCcLiLmLzfxsN WIyg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1783105806; x=1783710606; h=content-transfer-encoding:mime-version:message-id:date:subject:cc :to:from:x-gm-gg:x-gm-message-state:from:to:cc:subject:date :message-id:reply-to; bh=9N2tBl8ViVZews9y8opzseXm1ElhkkHecx0+lMTxLKI=; b=Tgwg4q0hKvN14uUxY1xQO+w3nOjbc9sthJQwSAfL08KhSOOzmlPKST9tllhRpFjjqN HRKDxzHc8Njgj61OAmJSx4iuK7Rljr3vf3bmxLoKY3qa0sOYIvivoQRzoqu0NlduY2ib oZWploIO25DTOYMhuw5RbLM0ThTHwwyZRs4dSB1UiS88ntI0SVJtk3kSt4emWbJSdjI9 DA0FdOjduKfgkboX4+uxBtOv9j7WuBS7W6ReoNwGobmhbS8/icdMAf9qiTIMvxZ15NSp 1vlC4BCkeW/zz3K/JCzbsMJL36kfuy6xLoDGfXssm8drva3qAjlKw/xfhS7Tfz8yCl9R xrqw== X-Forwarded-Encrypted: i=1; AHgh+RqrDVSglOQ/vaPk15msPNgOdyQFdiKqUAI4zPr7zGGVTaozO081tjpDGF3E4RPpeJqVQOH5w2GZlHfqSKQ=@vger.kernel.org X-Gm-Message-State: AOJu0Yw0wpOW+iyx9viQNU21FilrwRz0a+J2bQT7Y70rZDQJcS0jO+iV SqYN2JR8SWfSrbgYpN7hzk2bbU3g/QW/FIfnA8MCnI4Ulhm/WcMUYbnlVEJQiQ== X-Gm-Gg: AfdE7cnK7mxSAtnyANJnthPYe8OWj4yGMhYHN3JRpYcXWloBBdWpmfcaQTU9PI1F8st WxbC1kRauoEpDp0Tb17zVziXISNZzFVn87tnBBYP0AunkxWxWft0y4OnAu0wlQe6bU8fH3xPUo5 r1Ehb7LxEq41gpreX7OdpjNeX0/uYwGN1kSd5yPgJNW/MZGqgnLqN5uOwV47edCKTJ1N3S5a/fy YaiCpApPx95/wh3aEQt2kKEjp0P1pUqAHYL172EAqfWGEH4z79Z7mzzKY18yRZh6S18++11PKaB /IQRZb+GH1eJ5xcorKGwytZj/3HN6GKyY297FpfAEpUmC1XICjALJ7lRC69fd7ESB5P5DuuRM3c +K0M9eVPO1Pd/bNoQaVKK4eYoCw0YxGrB3sE14CXl++1oR9kHV2/4V126errswE2YuGT651Z1RL XL1tW2yQGQSIT1SnghzbNVX8TD+YUoguKlPrp13t35FDmiKMi9CWdaKOWkYvJ/Ll+mSGYcZACB X-Received: by 2002:a05:6000:178d:b0:474:f3b6:537 with SMTP id ffacd0b85a97d-47abc2e5765mr414012f8f.14.1783105805326; Fri, 03 Jul 2026 12:10:05 -0700 (PDT) Received: from dohko.chello.ie (188-141-5-72.dynamic.upc.ie. [188.141.5.72]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-47a9e3e2702sm1434801f8f.9.2026.07.03.12.10.04 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 03 Jul 2026 12:10:05 -0700 (PDT) From: David Carlier To: Tejun Heo Cc: David Vernet , Andrea Righi , Changwoo Min , sched-ext@lists.linux.dev, linux-kernel@vger.kernel.org, David Carlier Subject: [PATCH] sched_ext: Arm the exit on the sub-scheduler enable error path Date: Fri, 3 Jul 2026 20:09:57 +0100 Message-ID: <20260703191002.804763-1-devnexen@gmail.com> X-Mailer: git-send-email 2.53.0 Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: 8bit When enabling a sub-scheduler fails, scx_sub_enable_workfn() jumps to err_disable and calls scx_flush_disable_work() to unwind. That flush only does something once the exit has been armed, which happens via scx_error()/scx_exit(). Several error paths reach err_disable without arming it - most commonly ops.init_task() rejecting a task with a valid errno, and the -ENOMEM cases from the arena and cmask scratch allocations. On those paths teardown never runs: the half-enabled scheduler stays linked in its parent, ops.exit() is never called, it is left stuck in bypass with the cgroup subtree still pointing at it, and cmd->ret == 0 reports the attach as successful. It only gets cleaned up later when the struct_ops map is detached. The root enable path already arms the exit before flushing; do the same here. scx_claim_exit() makes it harmless for paths that already errored. Signed-off-by: David Carlier --- kernel/sched/ext/sub.c | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/kernel/sched/ext/sub.c b/kernel/sched/ext/sub.c index 050420427273..12e2e0787b13 100644 --- a/kernel/sched/ext/sub.c +++ b/kernel/sched/ext/sub.c @@ -570,6 +570,17 @@ void scx_sub_enable_workfn(struct kthread_work *work) percpu_up_write(&scx_fork_rwsem); err_disable: mutex_unlock(&scx_enable_mutex); + /* + * Several error edges reach here without having called scx_error() + * (e.g. ops.init_task() returning a valid errno, or -ENOMEM from the + * arena/cmask scratch allocation), leaving exit_kind == SCX_EXIT_NONE. + * Arm the exit so the disable work is queued; otherwise + * scx_flush_disable_work() is a no-op and the half-enabled + * sub-scheduler is left linked and reported as a successful attach. + * Mirrors scx_root_enable_workfn(); scx_claim_exit() makes this + * idempotent for paths that already errored. + */ + scx_error(sch, "scx_sub_enable() failed (%d)", ret); scx_flush_disable_work(sch); cmd->ret = 0; } -- 2.53.0