get:
Show a patch.

patch:
Update a patch.

put:
Update a patch.

GET /api/1.1/patches/2231571/?format=api
HTTP 200 OK
Allow: GET, PUT, PATCH, HEAD, OPTIONS
Content-Type: application/json
Vary: Accept

{
    "id": 2231571,
    "url": "http://patchwork.ozlabs.org/api/1.1/patches/2231571/?format=api",
    "web_url": "http://patchwork.ozlabs.org/project/linux-ext4/patch/177758363622.1314717.3266454364549497435.stgit@frogsfrogsfrogs/",
    "project": {
        "id": 8,
        "url": "http://patchwork.ozlabs.org/api/1.1/projects/8/?format=api",
        "name": "Linux ext4 filesystem development",
        "link_name": "linux-ext4",
        "list_id": "linux-ext4.vger.kernel.org",
        "list_email": "linux-ext4@vger.kernel.org",
        "web_url": null,
        "scm_url": null,
        "webscm_url": null
    },
    "msgid": "<177758363622.1314717.3266454364549497435.stgit@frogsfrogsfrogs>",
    "date": "2026-04-30T21:16:19",
    "name": "[05/13] mount_service: update mtab after a successful mount",
    "commit_ref": null,
    "pull_url": null,
    "state": "new",
    "archived": false,
    "hash": "a7103039799025b9b3c0e1565314cde467ec3dfa",
    "submitter": {
        "id": 77032,
        "url": "http://patchwork.ozlabs.org/api/1.1/people/77032/?format=api",
        "name": "Darrick J. Wong",
        "email": "djwong@kernel.org"
    },
    "delegate": null,
    "mbox": "http://patchwork.ozlabs.org/project/linux-ext4/patch/177758363622.1314717.3266454364549497435.stgit@frogsfrogsfrogs/mbox/",
    "series": [
        {
            "id": 502386,
            "url": "http://patchwork.ozlabs.org/api/1.1/series/502386/?format=api",
            "web_url": "http://patchwork.ozlabs.org/project/linux-ext4/list/?series=502386",
            "date": "2026-04-30T21:15:17",
            "name": "[01/13] Refactor mount code / move common functions to mount_util.c",
            "version": 1,
            "mbox": "http://patchwork.ozlabs.org/series/502386/mbox/"
        }
    ],
    "comments": "http://patchwork.ozlabs.org/api/patches/2231571/comments/",
    "check": "pending",
    "checks": "http://patchwork.ozlabs.org/api/patches/2231571/checks/",
    "tags": {},
    "headers": {
        "Return-Path": "\n <SRS0=BOlS=C5=vger.kernel.org=linux-ext4+bounces-16257-patchwork-incoming=ozlabs.org@ozlabs.org>",
        "X-Original-To": [
            "incoming@patchwork.ozlabs.org",
            "linux-ext4@vger.kernel.org"
        ],
        "Delivered-To": [
            "patchwork-incoming@legolas.ozlabs.org",
            "patchwork-incoming@ozlabs.org"
        ],
        "Authentication-Results": [
            "legolas.ozlabs.org;\n\tdkim=pass (2048-bit key;\n unprotected) header.d=kernel.org header.i=@kernel.org header.a=rsa-sha256\n header.s=k20201202 header.b=RLVlkmp2;\n\tdkim-atps=neutral",
            "legolas.ozlabs.org;\n spf=pass (sender SPF authorized) smtp.mailfrom=ozlabs.org\n (client-ip=2404:9400:2221:ea00::3; helo=mail.ozlabs.org;\n envelope-from=srs0=bols=c5=vger.kernel.org=linux-ext4+bounces-16257-patchwork-incoming=ozlabs.org@ozlabs.org;\n receiver=patchwork.ozlabs.org)",
            "gandalf.ozlabs.org;\n arc=pass smtp.remote-ip=104.64.211.4 arc.chain=subspace.kernel.org",
            "gandalf.ozlabs.org;\n dmarc=pass (p=quarantine dis=none) header.from=kernel.org",
            "gandalf.ozlabs.org;\n\tdkim=pass (2048-bit key;\n unprotected) header.d=kernel.org header.i=@kernel.org header.a=rsa-sha256\n header.s=k20201202 header.b=RLVlkmp2;\n\tdkim-atps=neutral",
            "gandalf.ozlabs.org;\n spf=pass (sender SPF authorized) smtp.mailfrom=vger.kernel.org\n (client-ip=104.64.211.4; helo=sin.lore.kernel.org;\n envelope-from=linux-ext4+bounces-16257-patchwork-incoming=ozlabs.org@vger.kernel.org;\n receiver=ozlabs.org)",
            "smtp.subspace.kernel.org;\n\tdkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org\n header.b=\"RLVlkmp2\"",
            "smtp.subspace.kernel.org;\n arc=none smtp.client-ip=10.30.226.201"
        ],
        "Received": [
            "from mail.ozlabs.org (mail.ozlabs.org [IPv6:2404:9400:2221:ea00::3])\n\t(using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)\n\t key-exchange x25519)\n\t(No client certificate requested)\n\tby legolas.ozlabs.org (Postfix) with ESMTPS id 4g66T64nfRz1yHZ\n\tfor <incoming@patchwork.ozlabs.org>; Fri, 01 May 2026 07:17:46 +1000 (AEST)",
            "from mail.ozlabs.org (mail.ozlabs.org [IPv6:2404:9400:2221:ea00::3])\n\tby gandalf.ozlabs.org (Postfix) with ESMTP id 4g66T64JJ1z4wSd\n\tfor <incoming@patchwork.ozlabs.org>; Fri, 01 May 2026 07:17:46 +1000 (AEST)",
            "by gandalf.ozlabs.org (Postfix)\n\tid 4g66T64Cskz4wTD; Fri, 01 May 2026 07:17:46 +1000 (AEST)",
            "from sin.lore.kernel.org (sin.lore.kernel.org [104.64.211.4])\n\t(using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)\n\t key-exchange x25519)\n\t(No client certificate requested)\n\tby gandalf.ozlabs.org (Postfix) with ESMTPS id 4g66T31H5qz4wSd\n\tfor <patchwork-incoming@ozlabs.org>; Fri, 01 May 2026 07:17:43 +1000 (AEST)",
            "from smtp.subspace.kernel.org (conduit.subspace.kernel.org\n [100.90.174.1])\n\tby sin.lore.kernel.org (Postfix) with ESMTP id 43419300B9D4\n\tfor <patchwork-incoming@ozlabs.org>; Thu, 30 Apr 2026 21:16:22 +0000 (UTC)",
            "from localhost.localdomain (localhost.localdomain [127.0.0.1])\n\tby smtp.subspace.kernel.org (Postfix) with ESMTP id 11C793B6C08;\n\tThu, 30 Apr 2026 21:16:21 +0000 (UTC)",
            "from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org\n [10.30.226.201])\n\t(using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits))\n\t(No client certificate requested)\n\tby smtp.subspace.kernel.org (Postfix) with ESMTPS id BCDC81A08AF;\n\tThu, 30 Apr 2026 21:16:20 +0000 (UTC)",
            "by smtp.kernel.org (Postfix) with ESMTPSA id 58271C2BCB3;\n\tThu, 30 Apr 2026 21:16:20 +0000 (UTC)"
        ],
        "ARC-Seal": [
            "i=2; a=rsa-sha256; d=ozlabs.org; s=201707; t=1777583866; cv=pass;\n\tb=qlchqT++W09m5JiRG+evWUfspXW+vDGrAYFViaHg9BNXZXOOktwA3OsjlQrh5g3GfhHBbu1dA7fy+3KrTsZ3eiG0ojvogV+k5BHGPAhqmOyvKXvH0A6RGPxe8rRGOX52OXwD6H6GepepTIUPCajXha+xzCa6+gvplf9PjqTqPjApc2qCDKxgPiyrVEvoMQ1IGQIi+QgARWsbloH92QIVST3Ifmj2PoaWdubh5rH1LhT/HOBl1v/QKKe1o4mB4dzDGsLxuGkJJ3PO4Mp8nwRwnqYY5B9JEkbu1CHUIv1uRhe+rmwBAT942bMX7wg9o2FX9CwziaNqAdA0HU8Hgae+Cw==",
            "i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116;\n\tt=1777583780; cv=none;\n b=imw/TkNOF5mrOnzmESp1hXGun/epiJwXg4ZC1x1jdRRqrzE7Nd/PGIq186pbtXvwXDNPMfKt0HUCdjYhlGYmJzvtCdJ152OfurWJ1I+/rQX3ETlXNrzpqRiXIdiNLX9Gy+CsZZ0FqHR+QzbKqbJevWZdgp2vzvdvWa01bWpr5XU="
        ],
        "ARC-Message-Signature": [
            "i=2; a=rsa-sha256; d=ozlabs.org; s=201707;\n\tt=1777583866; c=relaxed/relaxed;\n\tbh=I0QxnE1DP9Q4BFYW1YnHjZrNDbwOjVmszwB0Q4JOCV0=;\n\th=Date:Subject:From:To:Cc:Message-ID:In-Reply-To:References:\n\t MIME-Version:Content-Type;\n b=W5dFpUL5HpkA9xh2EN+uUlR/caOr2aQQ3tseZmDFDIkqZuLXaiXi3mpWculDfAsnAXXGAQiQilF6X/DTvSwqBxv2M2ptwrKYdmvl2LcogWipKUIwljNE1kSq2dGs3WgFYRdRFliyd4rJQQ00G7nx9Bq+Uz5Cd8Pt9Sd5njDtQ+doMzoYCffQ0ZEt5y4Z3xW9Ro5CRWoImFuui05PZnDLV6DVx274d8OARsYaWnXpta138Wi9NAqNbvuNfZ+OqSSICBvD6wdjuEcBDUH3OUS4QskgtGOnsEIDQSZCTbt4KjU3rD0Ubyy4ZnovkE1oczI6ocOb3nU0l9CDxfQSJsTU4g==",
            "i=1; a=rsa-sha256; d=subspace.kernel.org;\n\ts=arc-20240116; t=1777583780; c=relaxed/simple;\n\tbh=9mgB2mB1YnfDFua4CNi1SAWbnO+CjtvvDNJtl1MOJyk=;\n\th=Date:Subject:From:To:Cc:Message-ID:In-Reply-To:References:\n\t MIME-Version:Content-Type;\n b=o2teHwM8HyzQI6rgYz7As/vO3T6gdxFAuiZNzW2SiugDsPSCa9JD8g8XgL4WN039k9QwUcsFvjbgqRRxt6RQ0J/LAm1xlbr8d5jbUKvHRm+VlUxBhoEghOw2BgGxgHeXIedDHgY+IZkV9+jM/DQUbAjZqVksw5lZKcHJLigLOCo="
        ],
        "ARC-Authentication-Results": [
            "i=2; gandalf.ozlabs.org;\n dmarc=pass (p=quarantine dis=none) header.from=kernel.org;\n dkim=pass (2048-bit key;\n unprotected) header.d=kernel.org header.i=@kernel.org header.a=rsa-sha256\n header.s=k20201202 header.b=RLVlkmp2; dkim-atps=neutral;\n spf=pass (client-ip=104.64.211.4; helo=sin.lore.kernel.org;\n envelope-from=linux-ext4+bounces-16257-patchwork-incoming=ozlabs.org@vger.kernel.org;\n receiver=ozlabs.org) smtp.mailfrom=vger.kernel.org",
            "i=1; smtp.subspace.kernel.org;\n dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org\n header.b=RLVlkmp2; arc=none smtp.client-ip=10.30.226.201"
        ],
        "DKIM-Signature": "v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org;\n\ts=k20201202; t=1777583780;\n\tbh=9mgB2mB1YnfDFua4CNi1SAWbnO+CjtvvDNJtl1MOJyk=;\n\th=Date:Subject:From:To:Cc:In-Reply-To:References:From;\n\tb=RLVlkmp2o2a1RPPArdwziDZ+OEf8jG5fKhtQIFRz6IQRqy7gkR5TnehXUvwILWEjl\n\t Ko7fcKBOPWTdEM/2BJHAJyVMT3ZPEZhRpi5ZXq8Bv0lfV8qWtBymQc3h7692j6Dz/b\n\t FL0pRx5h6nBlaoVVBfxapUBJguCzUI+oaVek41cJgh+VkWBpENYLBTkp9UH8vZkYPk\n\t AH7t7yixaOO6ISsBiCBzRQEwMq969KIIRv8xmgquOoCrLT/kP8xRcSU2j8QvyE5TLE\n\t EGvXf/Kj+cnQP5sKq2d2ex16dvIY5kg3/Ea/tDhCJGhwBh8opMhKRZxqnLL2vtjs8L\n\t T5K7thLmw5LBA==",
        "Date": "Thu, 30 Apr 2026 14:16:19 -0700",
        "Subject": "[PATCH 05/13] mount_service: update mtab after a successful mount",
        "From": "\"Darrick J. Wong\" <djwong@kernel.org>",
        "To": "bernd@bsbernd.com, djwong@kernel.org",
        "Cc": "linux-fsdevel@vger.kernel.org, fuse-devel@lists.linux.dev,\n linux-ext4@vger.kernel.org, miklos@szeredi.hu, neal@gompa.dev,\n joannelkoong@gmail.com",
        "Message-ID": "<177758363622.1314717.3266454364549497435.stgit@frogsfrogsfrogs>",
        "In-Reply-To": "<177758363484.1314717.11777978893472254088.stgit@frogsfrogsfrogs>",
        "References": "<177758363484.1314717.11777978893472254088.stgit@frogsfrogsfrogs>",
        "Precedence": "bulk",
        "X-Mailing-List": "linux-ext4@vger.kernel.org",
        "List-Id": "<linux-ext4.vger.kernel.org>",
        "List-Subscribe": "<mailto:linux-ext4+subscribe@vger.kernel.org>",
        "List-Unsubscribe": "<mailto:linux-ext4+unsubscribe@vger.kernel.org>",
        "MIME-Version": "1.0",
        "Content-Type": "text/plain; charset=\"utf-8\"",
        "Content-Transfer-Encoding": "7bit",
        "X-Spam-Status": "No, score=-1.2 required=5.0 tests=ARC_SIGNED,ARC_VALID,\n\tDKIMWL_WL_HIGH,DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,DMARC_PASS,\n\tMAILING_LIST_MULTI,SPF_HELO_NONE,SPF_PASS autolearn=disabled\n\tversion=4.0.1",
        "X-Spam-Checker-Version": "SpamAssassin 4.0.1 (2024-03-25) on gandalf.ozlabs.org"
    },
    "content": "From: Darrick J. Wong <djwong@kernel.org>\n\nUpdate \"mtab\" so that non-kernel mount options (e.g. \"x-fubar=XXX\") are\nrecorded somewhere so that userspace utilities can pick that up.  Note\nthat this likely is not the venerable /etc/mtab, which has been a\nsymlink to procfs for years.  On a modern system, these non-kernel\noptions end up /run/mount/utab.\n\nBut that's not a detail that libfuse has to worry about directly; it's\nreally just calling mount -f(ake) to make the changes it wants.  Old\nhats may remember the use of mount -f to update /etc/mtab after mounting\nthe root filesystem.\n\nSigned-off-by: \"Darrick J. Wong\" <djwong@kernel.org>\n---\n include/fuse_service_priv.h |    1 \n lib/mount_common_i.h        |    1 \n lib/fuse_service.c          |   15 +++++++\n lib/mount.c                 |    7 +++\n util/mount_service.c        |   95 +++++++++++++++++++++++++++++++++++++++++++\n 5 files changed, 119 insertions(+)",
    "diff": "diff --git a/include/fuse_service_priv.h b/include/fuse_service_priv.h\nindex a3773d90c7db7e..8560b1ac610143 100644\n--- a/include/fuse_service_priv.h\n+++ b/include/fuse_service_priv.h\n@@ -39,6 +39,7 @@ struct fuse_service_memfd_argv {\n #define FUSE_SERVICE_MOUNT_CMD\t\t0x444f4954\t/* DOIT */\n #define FUSE_SERVICE_UNMOUNT_CMD\t0x554d4e54\t/* UMNT */\n #define FUSE_SERVICE_BYE_CMD\t\t0x42594545\t/* BYEE */\n+#define FUSE_SERVICE_MTABOPTS_CMD\t0x4d544142\t/* MTAB */\n \n /* mount.service sends replies to the fuse server */\n #define FUSE_SERVICE_OPEN_REPLY\t\t0x46494c45\t/* FILE */\ndiff --git a/lib/mount_common_i.h b/lib/mount_common_i.h\nindex 631dff3e6f8aaf..541cdebae4f47a 100644\n--- a/lib/mount_common_i.h\n+++ b/lib/mount_common_i.h\n@@ -15,6 +15,7 @@ struct mount_opts;\n char *fuse_mnt_build_source(const struct mount_opts *mo);\n char *fuse_mnt_build_type(const struct mount_opts *mo);\n char *fuse_mnt_kernel_opts(const struct mount_opts *mo);\n+char *fuse_mnt_mtab_opts(const struct mount_opts *mo);\n unsigned int fuse_mnt_flags(const struct mount_opts *mo);\n \n \ndiff --git a/lib/fuse_service.c b/lib/fuse_service.c\nindex ef512c76120a0f..83c1d564a18b0c 100644\n--- a/lib/fuse_service.c\n+++ b/lib/fuse_service.c\n@@ -992,6 +992,7 @@ int fuse_service_session_mount(struct fuse_service *sf, struct fuse_session *se,\n \tchar *fstype = fuse_mnt_build_type(se->mo);\n \tchar *source = fuse_mnt_build_source(se->mo);\n \tchar *mntopts = fuse_mnt_kernel_opts(se->mo);\n+\tchar *mtabopts = fuse_mnt_mtab_opts(se->mo);\n \tchar path[32];\n \tint ret;\n \tint error = 0;\n@@ -1062,6 +1063,19 @@ int fuse_service_session_mount(struct fuse_service *sf, struct fuse_session *se,\n \t\t}\n \t}\n \n+\tif (mtabopts) {\n+\t\tret = send_string(sf, FUSE_SERVICE_MTABOPTS_CMD, mtabopts,\n+\t\t\t\t  &error);\n+\t\tif (ret)\n+\t\t\tgoto out_strings;\n+\t\tif (error) {\n+\t\t\tfuse_log(FUSE_LOG_ERR, \"fuse: service fs mtab options: %s\\n\",\n+\t\t\t\t strerror(error));\n+\t\t\tret = -error;\n+\t\t\tgoto out_strings;\n+\t\t}\n+\t}\n+\n \tret = send_mount(sf, fuse_mnt_flags(se->mo), &error);\n \tif (ret)\n \t\tgoto out_strings;\n@@ -1082,6 +1096,7 @@ int fuse_service_session_mount(struct fuse_service *sf, struct fuse_session *se,\n \t(void)chdir(\"/\");\n \n out_strings:\n+\tfree(mtabopts);\n \tfree(mntopts);\n \tfree(source);\n \tfree(fstype);\ndiff --git a/lib/mount.c b/lib/mount.c\nindex 952d8899dcf218..84c73579ab2daf 100644\n--- a/lib/mount.c\n+++ b/lib/mount.c\n@@ -758,6 +758,13 @@ char *fuse_mnt_kernel_opts(const struct mount_opts *mo)\n \treturn NULL;\n }\n \n+char *fuse_mnt_mtab_opts(const struct mount_opts *mo)\n+{\n+\tif (mo->mtab_opts)\n+\t\treturn strdup(mo->mtab_opts);\n+\treturn NULL;\n+}\n+\n unsigned int fuse_mnt_flags(const struct mount_opts *mo)\n {\n \treturn mo->flags;\ndiff --git a/util/mount_service.c b/util/mount_service.c\nindex f2a515a2cc3b37..915a0c4b610792 100644\n--- a/util/mount_service.c\n+++ b/util/mount_service.c\n@@ -61,6 +61,9 @@ struct mount_service {\n \t/* mount options */\n \tchar *mntopts;\n \n+\t/* mtab options */\n+\tchar *mtabopts;\n+\n \t/* socket fd */\n \tint sockfd;\n \n@@ -86,6 +89,13 @@ struct mount_service {\n \tbool fuseblk;\n };\n \n+static char IGNORE_MTAB;\n+\n+static inline bool have_real_mtabopts(const struct mount_service *mo)\n+{\n+\treturn mo->mtabopts && mo->mtabopts != &IGNORE_MTAB;\n+}\n+\n static ssize_t __send_fd(struct mount_service *mo,\n \t\t\t struct fuse_service_requested_file *req,\n \t\t\t size_t req_sz, int fd)\n@@ -1018,6 +1028,55 @@ static int mount_service_handle_mntopts_cmd(struct mount_service *mo,\n \treturn mount_service_send_reply(mo, 0);\n }\n \n+static int mount_service_handle_mtabopts_cmd(struct mount_service *mo,\n+\t\t\t\t\t     const struct fuse_service_packet *p,\n+\t\t\t\t\t     size_t psz)\n+{\n+\tstruct fuse_service_string_command *oc =\n+\t\t\tcontainer_of(p, struct fuse_service_string_command, p);\n+\tchar *tokstr = oc->value;\n+\tchar *tok, *savetok;\n+\n+\tif (psz < sizeof_fuse_service_string_command(1)) {\n+\t\tfprintf(stderr, \"%s: mtab options command too small\\n\",\n+\t\t\tmo->msgtag);\n+\t\treturn mount_service_send_reply(mo, EINVAL);\n+\t}\n+\n+\tif (!check_null_endbyte(p, psz)) {\n+\t\tfprintf(stderr, \"%s: mtab options command must be null terminated\\n\",\n+\t\t\tmo->msgtag);\n+\t\treturn mount_service_send_reply(mo, EINVAL);\n+\t}\n+\n+\tif (mo->mtabopts) {\n+\t\tfprintf(stderr, \"%s: mtab options respecified!\\n\",\n+\t\t\tmo->msgtag);\n+\t\treturn mount_service_send_reply(mo, EINVAL);\n+\t}\n+\n+\tmo->mtabopts = strdup(oc->value);\n+\tif (!mo->mtabopts) {\n+\t\tint error = errno;\n+\n+\t\tfprintf(stderr, \"%s: alloc mtab options string: %s\\n\",\n+\t\t\tmo->msgtag, strerror(error));\n+\t\treturn mount_service_send_reply(mo, error);\n+\t}\n+\n+\t/* strtok_r mutates tokstr aka oc->value */\n+\twhile ((tok = strtok_r(tokstr, \",\", &savetok)) != NULL) {\n+\t\tif (!strcmp(tok, \"-n\")) {\n+\t\t\tfree(mo->mtabopts);\n+\t\t\tmo->mtabopts = &IGNORE_MTAB;\n+\t\t}\n+\n+\t\ttokstr = NULL;\n+\t}\n+\n+\treturn mount_service_send_reply(mo, 0);\n+}\n+\n static int attach_to_mountpoint(struct mount_service *mo, mode_t expected_fmt,\n \t\t\t\tchar *mntpt)\n {\n@@ -1293,6 +1352,14 @@ static int mount_service_regular_mount(struct mount_service *mo,\n \t\tgoto out_fstype;\n \t}\n \n+\t/*\n+\t * The mount succeeded, so we send a positive reply even if the mtab\n+\t * update fails.\n+\t */\n+\tif (have_real_mtabopts(mo))\n+\t\tfuse_mnt_add_mount(mo->msgtag, mo->source, mo->resv_mountpoint,\n+\t\t\t\t   fstype, mo->mtabopts);\n+\n \tmo->mounted = true;\n \tret = mount_service_send_reply(mo, 0);\n out_fstype:\n@@ -1485,6 +1552,22 @@ static int mount_service_fsopen_mount(struct mount_service *mo,\n \t\tgoto fail_mount;\n \t}\n \n+\t/*\n+\t * The mount succeeded, so we send a positive reply even if the mtab\n+\t * update fails.\n+\t */\n+\tif (have_real_mtabopts(mo)) {\n+\t\tchar *fstype = NULL;\n+\n+\t\tasprintf(&fstype, \"%s.%s\", fsname(mo), mo->subtype);\n+\t\tif (fstype) {\n+\t\t\tfuse_mnt_add_mount(mo->msgtag, mo->source,\n+\t\t\t\t\t   mo->resv_mountpoint, fstype,\n+\t\t\t\t\t   mo->mtabopts);\n+\t\t\tfree(fstype);\n+\t\t}\n+\t}\n+\n \tmo->mounted = true;\n \treturn mount_service_send_reply(mo, 0);\n \n@@ -1592,6 +1675,13 @@ static int mount_service_handle_unmount_cmd(struct mount_service *mo,\n \t\treturn mount_service_send_reply(mo, error);\n \t}\n \n+\t/*\n+\t * The unmount succeeded, so we send a positive reply even if the mtab\n+\t * update fails.\n+\t */\n+\tif (have_real_mtabopts(mo))\n+\t\tfuse_mnt_remove_mount(mo->msgtag, mo->resv_mountpoint);\n+\n \tmo->mounted = false;\n \treturn mount_service_send_reply(mo, 0);\n }\n@@ -1631,6 +1721,8 @@ static void mount_service_destroy(struct mount_service *mo)\n \tfree(mo->mountpoint);\n \tfree(mo->real_mountpoint);\n \tfree(mo->resv_mountpoint);\n+\tif (have_real_mtabopts(mo))\n+\t\tfree(mo->mtabopts);\n \tfree(mo->mntopts);\n \tfree(mo->subtype);\n \n@@ -1720,6 +1812,9 @@ int mount_service_main(int argc, char *argv[])\n \t\t\tret = mount_service_handle_mountpoint_cmd(&mo, p, sz,\n \t\t\t\t\t\t\t\t  argc, argv);\n \t\t\tbreak;\n+\t\tcase FUSE_SERVICE_MTABOPTS_CMD:\n+\t\t\tret = mount_service_handle_mtabopts_cmd(&mo, p, sz);\n+\t\t\tbreak;\n \t\tcase FUSE_SERVICE_MOUNT_CMD:\n \t\t\tret = mount_service_handle_mount_cmd(&mo, p, sz);\n \t\t\tbreak;\n",
    "prefixes": [
        "05/13"
    ]
}