{"id":2222673,"url":"http://patchwork.ozlabs.org/api/1.2/patches/2222673/?format=json","web_url":"http://patchwork.ozlabs.org/project/ltp/patch/20260413115129.30239-1-chrubis@suse.cz/","project":{"id":59,"url":"http://patchwork.ozlabs.org/api/1.2/projects/59/?format=json","name":"Linux Test Project development","link_name":"ltp","list_id":"ltp.lists.linux.it","list_email":"ltp@lists.linux.it","web_url":"","scm_url":"","webscm_url":"","list_archive_url":"","list_archive_url_format":"","commit_url_format":""},"msgid":"<20260413115129.30239-1-chrubis@suse.cz>","list_archive_url":null,"date":"2026-04-13T11:51:29","name":"lib: Treat kernel ntfs3 as a separate FS","commit_ref":null,"pull_url":null,"state":"new","archived":false,"hash":"3e2d3215a164ac1861c8fd1512a75580028982ee","submitter":{"id":8530,"url":"http://patchwork.ozlabs.org/api/1.2/people/8530/?format=json","name":"Cyril Hrubis","email":"chrubis@suse.cz"},"delegate":null,"mbox":"http://patchwork.ozlabs.org/project/ltp/patch/20260413115129.30239-1-chrubis@suse.cz/mbox/","series":[{"id":499688,"url":"http://patchwork.ozlabs.org/api/1.2/series/499688/?format=json","web_url":"http://patchwork.ozlabs.org/project/ltp/list/?series=499688","date":"2026-04-13T11:51:29","name":"lib: Treat kernel ntfs3 as a separate FS","version":1,"mbox":"http://patchwork.ozlabs.org/series/499688/mbox/"}],"comments":"http://patchwork.ozlabs.org/api/patches/2222673/comments/","check":"warning","checks":"http://patchwork.ozlabs.org/api/patches/2222673/checks/","tags":{},"related":[],"headers":{"Return-Path":"<ltp-bounces+incoming=patchwork.ozlabs.org@lists.linux.it>","X-Original-To":["incoming@patchwork.ozlabs.org","ltp@lists.linux.it"],"Delivered-To":["patchwork-incoming@legolas.ozlabs.org","ltp@picard.linux.it"],"Authentication-Results":["legolas.ozlabs.org;\n\tdkim=fail reason=\"signature verification failed\" (1024-bit key;\n unprotected) header.d=suse.cz header.i=@suse.cz header.a=rsa-sha256\n header.s=susede2_rsa header.b=rcR3fPx+;\n\tdkim=fail reason=\"signature verification failed\" header.d=suse.cz\n header.i=@suse.cz header.a=ed25519-sha256 header.s=susede2_ed25519\n header.b=3tXTaO7i;\n\tdkim=fail reason=\"signature verification failed\" (1024-bit key)\n header.d=suse.cz header.i=@suse.cz header.a=rsa-sha256 header.s=susede2_rsa\n header.b=B/k3sXGi;\n\tdkim=neutral header.d=suse.cz header.i=@suse.cz header.a=ed25519-sha256\n header.s=susede2_ed25519 header.b=caW+Oidd;\n\tdkim-atps=neutral","legolas.ozlabs.org;\n spf=pass (sender SPF authorized) smtp.mailfrom=lists.linux.it\n (client-ip=2001:1418:10:5::2; helo=picard.linux.it;\n envelope-from=ltp-bounces+incoming=patchwork.ozlabs.org@lists.linux.it;\n receiver=patchwork.ozlabs.org)","smtp-out1.suse.de;\n dkim=pass header.d=suse.cz header.s=susede2_rsa header.b=\"B/k3sXGi\";\n dkim=pass header.d=suse.cz header.s=susede2_ed25519 header.b=caW+Oidd"],"Received":["from picard.linux.it (picard.linux.it [IPv6:2001:1418:10:5::2])\n\t(using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)\n\t key-exchange x25519 server-signature ECDSA (secp384r1) server-digest SHA384)\n\t(No client certificate requested)\n\tby legolas.ozlabs.org (Postfix) with ESMTPS id 4fvQjb5BVFz1yDF\n\tfor <incoming@patchwork.ozlabs.org>; Mon, 13 Apr 2026 21:51:31 +1000 (AEST)","from picard.linux.it (localhost [IPv6:::1])\n\tby picard.linux.it (Postfix) with ESMTP id 3A5853E2947\n\tfor <incoming@patchwork.ozlabs.org>; Mon, 13 Apr 2026 13:51:29 +0200 (CEST)","from in-2.smtp.seeweb.it (in-2.smtp.seeweb.it\n [IPv6:2001:4b78:1:20::2])\n (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)\n key-exchange X25519 server-signature ECDSA (secp384r1))\n (No client certificate requested)\n by picard.linux.it (Postfix) with ESMTPS id B6CEC3C0E57\n for <ltp@lists.linux.it>; Mon, 13 Apr 2026 13:51:26 +0200 (CEST)","from smtp-out1.suse.de (smtp-out1.suse.de\n [IPv6:2a07:de40:b251:101:10:150:64:1])\n (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)\n key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest\n SHA256)\n (No client certificate requested)\n by in-2.smtp.seeweb.it (Postfix) with ESMTPS id 104C5600066\n for <ltp@lists.linux.it>; Mon, 13 Apr 2026 13:51:23 +0200 (CEST)","from imap1.dmz-prg2.suse.org (imap1.dmz-prg2.suse.org\n [IPv6:2a07:de40:b281:104:10:150:64:97])\n (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)\n key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest\n SHA256)\n (No client certificate requested)\n by smtp-out1.suse.de (Postfix) with ESMTPS id 5859E6A890;\n Mon, 13 Apr 2026 11:51:20 +0000 (UTC)","from imap1.dmz-prg2.suse.org (localhost [127.0.0.1])\n (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)\n key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest\n SHA256)\n (No client certificate requested)\n by imap1.dmz-prg2.suse.org (Postfix) with ESMTPS id 495CA4AE84;\n Mon, 13 Apr 2026 11:51:20 +0000 (UTC)","from dovecot-director2.suse.de ([2a07:de40:b281:106:10:150:64:167])\n by imap1.dmz-prg2.suse.org with ESMTPSA id bsTlELjY3GknYAAAD6G6ig\n (envelope-from <chrubis@suse.cz>); Mon, 13 Apr 2026 11:51:20 +0000"],"DKIM-Signature":["v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.cz;\n s=susede2_rsa;\n t=1776081082;\n h=from:from:reply-to:date:date:message-id:message-id:to:to:cc:cc:\n mime-version:mime-version:\n content-transfer-encoding:content-transfer-encoding;\n bh=IIGwurMdJ+wnbaSyidhp9V2CT+NgPBztg4JMRVsez9U=;\n b=rcR3fPx+sWSV2IqkG6R1tsMV/SVkL9iLCg33d/RjjF71/Ccc/d/S6MXd0gGC5d05PMoY7S\n Y26PwPcChnCfoGHz3Oofb24T5JOeldWY8dG154+c0H0Z1YDFD48l5rR/A9r/xeNFJKkyeo\n K9mPHakTcPfPPV1wfr+r9QIDksfqlco=","v=1; a=ed25519-sha256; c=relaxed/relaxed; d=suse.cz;\n s=susede2_ed25519; t=1776081082;\n h=from:from:reply-to:date:date:message-id:message-id:to:to:cc:cc:\n mime-version:mime-version:\n content-transfer-encoding:content-transfer-encoding;\n bh=IIGwurMdJ+wnbaSyidhp9V2CT+NgPBztg4JMRVsez9U=;\n b=3tXTaO7izxPGNKo0JjdE8KqU9/Of9FVWt5omFHJB+SVYqtdMHFxcBNeHILFdwKDloJiC1j\n D+lpztT3q1zJQgCA==","v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.cz;\n s=susede2_rsa;\n t=1776081080;\n h=from:from:reply-to:date:date:message-id:message-id:to:to:cc:cc:\n mime-version:mime-version:\n content-transfer-encoding:content-transfer-encoding;\n bh=IIGwurMdJ+wnbaSyidhp9V2CT+NgPBztg4JMRVsez9U=;\n b=B/k3sXGiwy6+In1i3ytJLypKHUwnpB3hK4xvkw3xvKJiVmkFHOPsSeDW5efZber6xEZFqL\n eo7XcEwYUjaMEQ8NVDw+ojOrT9i6+JugneW3x7cHCRi85+2iiqup7+TYKMz1+fmp+JzuEV\n VEIbd4IO2Oe/NSttH8XNVYw0RGlK8RM=","v=1; a=ed25519-sha256; c=relaxed/relaxed; d=suse.cz;\n s=susede2_ed25519; t=1776081080;\n h=from:from:reply-to:date:date:message-id:message-id:to:to:cc:cc:\n mime-version:mime-version:\n content-transfer-encoding:content-transfer-encoding;\n bh=IIGwurMdJ+wnbaSyidhp9V2CT+NgPBztg4JMRVsez9U=;\n b=caW+Oiddq/GbUE+d9iqpxVI3g4ttTEuMJGron2VKms/lJ+lBsrF2F4CIe0mUO13iHJqhmt\n wi8I2msOkJBK9nCw=="],"From":"Cyril Hrubis <chrubis@suse.cz>","To":"ltp@lists.linux.it","Date":"Mon, 13 Apr 2026 13:51:29 +0200","Message-ID":"<20260413115129.30239-1-chrubis@suse.cz>","X-Mailer":"git-send-email 2.52.0","MIME-Version":"1.0","X-Rspamd-Action":"no action","X-Rspamd-Server":"rspamd2.dmz-prg2.suse.org","X-Spamd-Result":"default: False [-3.01 / 50.00]; BAYES_HAM(-3.00)[100.00%];\n NEURAL_HAM_LONG(-1.00)[-1.000]; MID_CONTAINS_FROM(1.00)[];\n R_MISSING_CHARSET(0.50)[];\n R_DKIM_ALLOW(-0.20)[suse.cz:s=susede2_rsa,suse.cz:s=susede2_ed25519];\n NEURAL_HAM_SHORT(-0.20)[-1.000]; MIME_GOOD(-0.10)[text/plain];\n MX_GOOD(-0.01)[]; RCVD_VIA_SMTP_AUTH(0.00)[]; ARC_NA(0.00)[];\n RBL_SPAMHAUS_BLOCKED_OPENRESOLVER(0.00)[2a07:de40:b281:104:10:150:64:97:from];\n MIME_TRACE(0.00)[0:+]; FUZZY_RATELIMITED(0.00)[rspamd.com];\n TO_DN_SOME(0.00)[]; RCVD_COUNT_TWO(0.00)[2];\n RECEIVED_SPAMHAUS_BLOCKED_OPENRESOLVER(0.00)[2a07:de40:b281:106:10:150:64:167:received];\n FROM_HAS_DN(0.00)[]; TO_MATCH_ENVRCPT_ALL(0.00)[];\n DBL_BLOCKED_OPENRESOLVER(0.00)[nvidia.com:email,suse.cz:dkim,suse.cz:mid,suse.cz:email,imap1.dmz-prg2.suse.org:helo,imap1.dmz-prg2.suse.org:rdns];\n RCVD_TLS_ALL(0.00)[]; FROM_EQ_ENVFROM(0.00)[];\n RCPT_COUNT_TWO(0.00)[2];\n DKIM_SIGNED(0.00)[suse.cz:s=susede2_rsa,suse.cz:s=susede2_ed25519];\n SPAMHAUS_XBL(0.00)[2a07:de40:b281:104:10:150:64:97:from];\n DKIM_TRACE(0.00)[suse.cz:+]","X-Rspamd-Queue-Id":"5859E6A890","X-Spam-Score":"-3.01","X-Spam-Level":"","X-Spam-Status":"No, score=0.1 required=7.0 tests=DKIM_SIGNED,DKIM_VALID,\n DKIM_VALID_AU,DKIM_VALID_EF,DMARC_MISSING,SPF_HELO_NONE,SPF_PASS\n shortcircuit=no autolearn=disabled version=4.0.1","X-Spam-Checker-Version":"SpamAssassin 4.0.1 (2024-03-25) on in-2.smtp.seeweb.it","X-Virus-Scanned":"clamav-milter 1.0.9 at in-2.smtp.seeweb.it","X-Virus-Status":"Clean","Subject":"[LTP] [PATCH] lib: Treat kernel ntfs3 as a separate FS","X-BeenThere":"ltp@lists.linux.it","X-Mailman-Version":"2.1.29","Precedence":"list","List-Id":"Linux Test Project <ltp.lists.linux.it>","List-Unsubscribe":"<https://lists.linux.it/options/ltp>,\n <mailto:ltp-request@lists.linux.it?subject=unsubscribe>","List-Archive":"<http://lists.linux.it/pipermail/ltp/>","List-Post":"<mailto:ltp@lists.linux.it>","List-Help":"<mailto:ltp-request@lists.linux.it?subject=help>","List-Subscribe":"<https://lists.linux.it/listinfo/ltp>,\n <mailto:ltp-request@lists.linux.it?subject=subscribe>","Cc":"Matt Ochs <mochs@nvidia.com>","Content-Type":"text/plain; charset=\"us-ascii\"","Content-Transfer-Encoding":"7bit","Errors-To":"ltp-bounces+incoming=patchwork.ozlabs.org@lists.linux.it","Sender":"\"ltp\" <ltp-bounces+incoming=patchwork.ozlabs.org@lists.linux.it>"},"content":"The RW NTFS support for Linux kernel was added back in 2021 in a form of\nntfs3 driver. The old RO NTFS functionality was retained though, hence\nif we mount a filesystem with type \"ntfs\" we read it read-only. On the\ntop of that there is NTFS fuse implementation as well.\n\nHistorically we ignored the kernel NTFS filesystem and went for FUSE\nsince there is not much we can do with read-only filesystem and the code\nstayed like that even after kernel RW support was added. At that point\nwe should have enabled both kernel NTFS driver and fuse NTFS driver and\ntreat them as a different filesystem in order to maximize the coverage.\n\nMeanwhile this even caused failures, which is how this issue finaly\nsurfaced with a fuse based NTFS not being skipped properly because the\ntest library got confused with having both kernel and fuse NTFS\navailable.\n\nThis patch finally fixes all of that by splitting the fuse and kernel\nNTFS support into two separate filesystems (as seen by the test\nlibrary).\n\nThe kernel RW filesystem is called ntfs3 while the fuse based one is\ncallled just ntfs. For that to happen we need to:\n\n- add new ntfs3 fs to the whitelist\n- map ntfs3 to ntfs for mkfs\n- jump directly to fuse for ntfs fs in the fs support check\n  (we jump directly to fuse in the safe_mount() already)\n\nAs a side effect we fixed file_attr05 test to be properly skipped on\nfuse NTFS.\n\nReported-by: Matt Ochs <mochs@nvidia.com>\nTested-by: Matt Ochs <mochs@nvidia.com>\nSigned-off-by: Cyril Hrubis <chrubis@suse.cz>\n---\n lib/tst_mkfs.c               | 3 +++\n lib/tst_supported_fs_types.c | 8 ++++++++\n 2 files changed, 11 insertions(+)","diff":"diff --git a/lib/tst_mkfs.c b/lib/tst_mkfs.c\nindex c619a373d..961ffc091 100644\n--- a/lib/tst_mkfs.c\n+++ b/lib/tst_mkfs.c\n@@ -50,6 +50,9 @@ void tst_mkfs_(const char *file, const int lineno, void (cleanup_fn)(void),\n \t\treturn;\n \t}\n \n+\tif (!strcmp(fs_type, \"ntfs3\"))\n+\t\tfs_type = \"ntfs\";\n+\n \tsnprintf(mkfs, sizeof(mkfs), \"mkfs.%s\", fs_type);\n \n \tif (fs_opts) {\ndiff --git a/lib/tst_supported_fs_types.c b/lib/tst_supported_fs_types.c\nindex 0c8c8dc50..d3020fc48 100644\n--- a/lib/tst_supported_fs_types.c\n+++ b/lib/tst_supported_fs_types.c\n@@ -30,6 +30,7 @@ static const char *const fs_type_whitelist[] = {\n \t\"vfat\",\n \t\"exfat\",\n \t\"ntfs\",\n+\t\"ntfs3\",\n \t\"tmpfs\",\n \tNULL\n };\n@@ -51,6 +52,9 @@ static int has_mkfs(const char *fs_type)\n \t\treturn 1;\n \t}\n \n+\tif (!strcmp(fs_type, \"ntfs3\"))\n+\t\tfs_type = \"ntfs\";\n+\n \tsprintf(buf, \"mkfs.%s >/dev/null 2>&1\", fs_type);\n \n \tret = tst_system(buf);\n@@ -87,6 +91,9 @@ static enum tst_fs_impl has_kernel_support(const char *fs_type)\n \tchar template[PATH_MAX];\n \tint ret;\n \n+\tif (!strcmp(fs_type, \"ntfs\"))\n+\t\tgoto check_fuse;\n+\n \tsnprintf(template, sizeof(template), \"%s/mountXXXXXX\", tmpdir);\n \tif (!mkdtemp(template))\n \t\ttst_brk(TBROK | TERRNO, \"mkdtemp(%s) failed\", template);\n@@ -102,6 +109,7 @@ static enum tst_fs_impl has_kernel_support(const char *fs_type)\n \n \tSAFE_RMDIR(template);\n \n+check_fuse:\n \tif (tst_fs_in_skiplist(fs_type, fs_type_fuse_blacklist)) {\n \t\ttst_res(TINFO, \"Skipping %s because of FUSE blacklist\", fs_type);\n \t\treturn TST_FS_UNSUPPORTED;\n","prefixes":[]}