From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-7.1 required=3.0 tests=DKIM_SIGNED,DKIM_VALID, DKIM_VALID_AU,FREEMAIL_FORGED_FROMDOMAIN,FREEMAIL_FROM, HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_PATCH,MAILING_LIST_MULTI,SIGNED_OFF_BY, SPF_HELO_NONE,SPF_PASS,URIBL_BLOCKED autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id C2D86C433E0 for ; Wed, 1 Jul 2020 07:05:07 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id 94AFC20773 for ; Wed, 1 Jul 2020 07:05:07 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="ZMNg22jf" Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1728139AbgGAHFG (ORCPT ); Wed, 1 Jul 2020 03:05:06 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:37736 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1727969AbgGAHFF (ORCPT ); Wed, 1 Jul 2020 03:05:05 -0400 Received: from mail-lj1-x242.google.com (mail-lj1-x242.google.com [IPv6:2a00:1450:4864:20::242]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id E7C98C061755 for ; Wed, 1 Jul 2020 00:05:04 -0700 (PDT) Received: by mail-lj1-x242.google.com with SMTP id e4so25678874ljn.4 for ; Wed, 01 Jul 2020 00:05:04 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=mime-version:references:in-reply-to:from:date:message-id:subject:to :cc:content-transfer-encoding; bh=dvUBuTvRieomSCqnJCq8xhXaqV0MYHK0mUXKNMYT7fg=; b=ZMNg22jfuWpv9FHjsLcHmAl1n4nnGMwS8YXn4/XRsSjhkWhDqFYthlc8VwYfnobFe0 7NuOL1C2Q7Jqn6V/3i/diCS7/6kaFbceDtONervucpWDVCF6dbkXc00DO3C38mIHEYrE /VbI83vtmfp6O43qQMuCpF1QQ5L4jxByWQF0VRuOtxy7AnsLpo/bocETdiSoIttQ7vIO +ApYPvAM2bY6c/KD2nqQ4CIPLNv1na6E6h3XSCayN8ctLqIwCSwcYILnEmJM+Kgr5XtV lWGRls5ON69/6fq31hnDpoVdMOATQlGRk6AA6aVGXZ1cVgiJhNQAkrH4VrYQENoEh73T daog== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:mime-version:references:in-reply-to:from:date :message-id:subject:to:cc:content-transfer-encoding; bh=dvUBuTvRieomSCqnJCq8xhXaqV0MYHK0mUXKNMYT7fg=; b=p7dInz6sQF5HG6AZUZIBLpcYuCwqqw3U12lBO0p+T5GPyGxT7QJX93dPlmef9lF5Il t7mbWzSaB9LrwRYl2gjJpAz/q5kU0CI2yBbn103aHB5vu0Z1RdA7M9nCfYCGzgC+mPKk 4qd0iSk4MCTPBDsNZFEhTF5s+pA/y2Wd9zzdKdMWEVUr8BvGlF1I51JXqBgvHsZcQzt8 FWKzEAltrZ9zRofjZQEusybP4WcWY4Nf3jC8/XR2uYTTrpLgz3S9hIqric4bGfrGH0Wm b3amIs8moH6qlar8vqivwGgkTrMJC9kfMeg6j50ZWC/Z0MOjoMYaQ+C15k3cyNWbiAWc xWsw== X-Gm-Message-State: AOAM532wr/OOB06b8t3M8lz5WWn6HefOpTSmG9HJ3/Ogcm2PJFmnzmUS 66VVtMfXeNUn0UQ7W2eXcJJv5tDDHIsrdAa9TOI= X-Google-Smtp-Source: ABdhPJwV5n0TyL60rtFVSJgv1WVFA75LA/7Y+Aomb1kRpVO700ihvwguTRmM/eSrsdaAEArhv7jw1+jQLsLPyUdQed8= X-Received: by 2002:a2e:8e68:: with SMTP id t8mr5916934ljk.335.1593587103306; Wed, 01 Jul 2020 00:05:03 -0700 (PDT) MIME-Version: 1.0 References: <20200630005625.2405062-1-daeho43@gmail.com> <961072bb-4c8f-b01e-666d-1f5e35a8b76d@huawei.com> In-Reply-To: <961072bb-4c8f-b01e-666d-1f5e35a8b76d@huawei.com> From: Daeho Jeong Date: Wed, 1 Jul 2020 16:04:52 +0900 Message-ID: Subject: Re: [f2fs-dev] [PATCH] f2fs: add symbolic link to kobject in sysfs To: Chao Yu Cc: linux-kernel@vger.kernel.org, linux-f2fs-devel@lists.sourceforge.net, kernel-team@android.com, Daeho Jeong Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Actually, I want to keep the mount number remaining to the same number, even if it's re-mounted. Or we need to keep track of the number being increased whenever it's remounted. :( 2020=EB=85=84 7=EC=9B=94 1=EC=9D=BC (=EC=88=98) =EC=98=A4=ED=9B=84 3:36, Ch= ao Yu =EB=8B=98=EC=9D=B4 =EC=9E=91=EC=84=B1: > > Hi Daeho, > > On 2020/6/30 8:56, Daeho Jeong wrote: > > From: Daeho Jeong > > > > Added a symbolic link to directory of sysfs. It will > > create a symbolic link such as "mount_0" and "mount_1" to > > each f2fs mount in the order of mounting filesystem. It will > > provide easy access to sysfs node even if not knowing the > > specific device node name like sda19 and dm-3. > > Just out of curiosity, if we mount/umount as below: > > mount /dev/zram0 /mnt/f2fs0 > mount /dev/zram1 /mnt/f2fs1 > umount /mnt/f2fs0 > mount /dev/zram0 /mnt/f2fs0 > > Shouldn't sysfs structure be: > mount_2 -> zram0 > mount_1 -> zram1 > zram0 > zram1 > > Then we can know zram0 is mounted after zram1? > > However the result shows: > mount_0 -> zram0 > mount_1 -> zram1 > zram0 > zram1 > > Thanks, > > > > > Signed-off-by: Daeho Jeong > > --- > > fs/f2fs/f2fs.h | 4 ++++ > > fs/f2fs/sysfs.c | 31 +++++++++++++++++++++++++++---- > > 2 files changed, 31 insertions(+), 4 deletions(-) > > > > diff --git a/fs/f2fs/f2fs.h b/fs/f2fs/f2fs.h > > index 4b28fd42fdbc..7d6c5f8ce16b 100644 > > --- a/fs/f2fs/f2fs.h > > +++ b/fs/f2fs/f2fs.h > > @@ -1419,6 +1419,8 @@ struct decompress_io_ctx { > > #define MAX_COMPRESS_LOG_SIZE 8 > > #define MAX_COMPRESS_WINDOW_SIZE ((PAGE_SIZE) << MAX_COMPRESS_LOG_= SIZE) > > > > +#define MOUNT_NAME_SIZE 20 > > + > > struct f2fs_sb_info { > > struct super_block *sb; /* pointer to VFS super b= lock */ > > struct proc_dir_entry *s_proc; /* proc entry */ > > @@ -1599,6 +1601,8 @@ struct f2fs_sb_info { > > /* For sysfs suppport */ > > struct kobject s_kobj; > > struct completion s_kobj_unregister; > > + int s_mount_id; > > + char s_mount_name[MOUNT_NAME_SIZE]; > > > > /* For shrinker support */ > > struct list_head s_list; > > diff --git a/fs/f2fs/sysfs.c b/fs/f2fs/sysfs.c > > index ab40e1f89f23..64bbe0b3b830 100644 > > --- a/fs/f2fs/sysfs.c > > +++ b/fs/f2fs/sysfs.c > > @@ -18,6 +18,7 @@ > > #include > > > > static struct proc_dir_entry *f2fs_proc_root; > > +static struct ida f2fs_mount_ida; > > > > /* Sysfs support for f2fs */ > > enum { > > @@ -906,6 +907,9 @@ int __init f2fs_init_sysfs(void) > > } else { > > f2fs_proc_root =3D proc_mkdir("fs/f2fs", NULL); > > } > > + > > + ida_init(&f2fs_mount_ida); > > + > > return ret; > > } > > > > @@ -915,6 +919,7 @@ void f2fs_exit_sysfs(void) > > kset_unregister(&f2fs_kset); > > remove_proc_entry("fs/f2fs", NULL); > > f2fs_proc_root =3D NULL; > > + ida_destroy(&f2fs_mount_ida); > > } > > > > int f2fs_register_sysfs(struct f2fs_sb_info *sbi) > > @@ -926,12 +931,22 @@ int f2fs_register_sysfs(struct f2fs_sb_info *sbi) > > init_completion(&sbi->s_kobj_unregister); > > err =3D kobject_init_and_add(&sbi->s_kobj, &f2fs_sb_ktype, NULL, > > "%s", sb->s_id); > > - if (err) { > > - kobject_put(&sbi->s_kobj); > > - wait_for_completion(&sbi->s_kobj_unregister); > > - return err; > > + if (err) > > + goto err1; > > + > > + sbi->s_mount_id =3D ida_simple_get(&f2fs_mount_ida, 0, 0, GFP_KER= NEL); > > + if (sbi->s_mount_id < 0) { > > + err =3D sbi->s_mount_id; > > + goto err1; > > } > > > > + snprintf(sbi->s_mount_name, MOUNT_NAME_SIZE, "mount_%d", > > + sbi->s_mount_id); > > + err =3D sysfs_create_link(&f2fs_kset.kobj, &sbi->s_kobj, > > + sbi->s_mount_name); > > + if (err) > > + goto err2; > > + > > if (f2fs_proc_root) > > sbi->s_proc =3D proc_mkdir(sb->s_id, f2fs_proc_root); > > > > @@ -946,6 +961,12 @@ int f2fs_register_sysfs(struct f2fs_sb_info *sbi) > > victim_bits_seq_show, sb); > > } > > return 0; > > +err2: > > + ida_simple_remove(&f2fs_mount_ida, sbi->s_mount_id); > > +err1: > > + kobject_put(&sbi->s_kobj); > > + wait_for_completion(&sbi->s_kobj_unregister); > > + return err; > > } > > > > void f2fs_unregister_sysfs(struct f2fs_sb_info *sbi) > > @@ -957,6 +978,8 @@ void f2fs_unregister_sysfs(struct f2fs_sb_info *sbi= ) > > remove_proc_entry("victim_bits", sbi->s_proc); > > remove_proc_entry(sbi->sb->s_id, f2fs_proc_root); > > } > > + sysfs_remove_link(&f2fs_kset.kobj, sbi->s_mount_name); > > + ida_simple_remove(&f2fs_mount_ida, sbi->s_mount_id); > > kobject_del(&sbi->s_kobj); > > kobject_put(&sbi->s_kobj); > > } > > From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-6.8 required=3.0 tests=DKIM_ADSP_CUSTOM_MED, DKIM_INVALID,DKIM_SIGNED,FREEMAIL_FORGED_FROMDOMAIN,FREEMAIL_FROM, HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_PATCH,MAILING_LIST_MULTI,SIGNED_OFF_BY, SPF_HELO_NONE,SPF_PASS autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 28873C433E0 for ; Wed, 1 Jul 2020 07:05:28 +0000 (UTC) Received: from lists.sourceforge.net (lists.sourceforge.net [216.105.38.7]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id E454A20663; Wed, 1 Jul 2020 07:05:27 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=fail reason="signature verification failed" (1024-bit key) header.d=sourceforge.net header.i=@sourceforge.net header.b="bL3BgMsT"; dkim=fail reason="signature verification failed" (1024-bit key) header.d=sf.net header.i=@sf.net header.b="HXTTL/MF"; dkim=fail reason="signature verification failed" (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="ZMNg22jf" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org E454A20663 Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=gmail.com Authentication-Results: mail.kernel.org; spf=pass smtp.mailfrom=linux-f2fs-devel-bounces@lists.sourceforge.net Received: from [127.0.0.1] (helo=sfs-ml-4.v29.lw.sourceforge.com) by sfs-ml-4.v29.lw.sourceforge.com with esmtp (Exim 4.90_1) (envelope-from ) id 1jqWoB-0002lh-Ga; Wed, 01 Jul 2020 07:05:27 +0000 Received: from [172.30.20.202] (helo=mx.sourceforge.net) by sfs-ml-4.v29.lw.sourceforge.com with esmtps (TLSv1.2:ECDHE-RSA-AES256-GCM-SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jqWoA-0002la-7H for linux-f2fs-devel@lists.sourceforge.net; Wed, 01 Jul 2020 07:05:26 +0000 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=sourceforge.net; s=x; h=Content-Transfer-Encoding:Content-Type:Cc:To: Subject:Message-ID:Date:From:In-Reply-To:References:MIME-Version:Sender: Reply-To:Content-ID:Content-Description:Resent-Date:Resent-From:Resent-Sender :Resent-To:Resent-Cc:Resent-Message-ID:List-Id:List-Help:List-Unsubscribe: List-Subscribe:List-Post:List-Owner:List-Archive; bh=dvUBuTvRieomSCqnJCq8xhXaqV0MYHK0mUXKNMYT7fg=; b=bL3BgMsT9R1NsTrqozcQ5ekfQp KEvsQMXCBvqM5V2GuxLiwEtnWptsoBEhBeq3BNsm25hA3mMyVHqAKyc5JLE/pBU0WYW6rpBJSOgAI NQ5kVsM0vD+1ce10HN1QkYvcneGmQeD3cspI8ht22Z7igvvgSNdqPDsgrYY7B6gfe9Tc=; DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=sf.net; s=x ; h=Content-Transfer-Encoding:Content-Type:Cc:To:Subject:Message-ID:Date:From :In-Reply-To:References:MIME-Version:Sender:Reply-To:Content-ID: Content-Description:Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc :Resent-Message-ID:List-Id:List-Help:List-Unsubscribe:List-Subscribe: List-Post:List-Owner:List-Archive; bh=dvUBuTvRieomSCqnJCq8xhXaqV0MYHK0mUXKNMYT7fg=; b=HXTTL/MFN2KnOcDI6twc/yURmn U7UV9eC4X/bTcOKOlD28z/JeQOEoX7kE+9wwY6P8G2RqbyvK+qGkeVSVRbKDQjsWjBYjNvSznW+W+ LJmm4+xMRHu7DI2M8wJp16ViQ5FGfgs20uiyP+h0dpPq7tT4d1eMkwniDi2Rwvx++HUA=; Received: from mail-lj1-f194.google.com ([209.85.208.194]) by sfi-mx-1.v28.lw.sourceforge.com with esmtps (TLSv1.2:ECDHE-RSA-AES128-GCM-SHA256:128) (Exim 4.92.2) id 1jqWo6-008MFM-Sp for linux-f2fs-devel@lists.sourceforge.net; Wed, 01 Jul 2020 07:05:26 +0000 Received: by mail-lj1-f194.google.com with SMTP id h19so25639473ljg.13 for ; Wed, 01 Jul 2020 00:05:22 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=mime-version:references:in-reply-to:from:date:message-id:subject:to :cc:content-transfer-encoding; bh=dvUBuTvRieomSCqnJCq8xhXaqV0MYHK0mUXKNMYT7fg=; b=ZMNg22jfuWpv9FHjsLcHmAl1n4nnGMwS8YXn4/XRsSjhkWhDqFYthlc8VwYfnobFe0 7NuOL1C2Q7Jqn6V/3i/diCS7/6kaFbceDtONervucpWDVCF6dbkXc00DO3C38mIHEYrE /VbI83vtmfp6O43qQMuCpF1QQ5L4jxByWQF0VRuOtxy7AnsLpo/bocETdiSoIttQ7vIO +ApYPvAM2bY6c/KD2nqQ4CIPLNv1na6E6h3XSCayN8ctLqIwCSwcYILnEmJM+Kgr5XtV lWGRls5ON69/6fq31hnDpoVdMOATQlGRk6AA6aVGXZ1cVgiJhNQAkrH4VrYQENoEh73T daog== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:mime-version:references:in-reply-to:from:date :message-id:subject:to:cc:content-transfer-encoding; bh=dvUBuTvRieomSCqnJCq8xhXaqV0MYHK0mUXKNMYT7fg=; b=gNPjseSUR6z4IEH3BEdCpXRCkjpXdV6l++ATSXHSSMdya0IGV9Bzqtmbv2wy7qj4U0 jyfjQpPsnnBGjSpCt1LR9nJpFwWHcQhB+DZhsnIJn1/j+ihoECjA94KViuPYlG9mAjtx xnWOy4haeaNLP/3R7Xf/4gbWvhZmnIQ+r7K/2noWZ2vsmqhQ+6btDjOBONVihvetnsNI MiBTHEuTG6iUPHr1ndC/pTcdwUB2KCCFIzer+8CMpe76+XwxFzIqCrSF0P3WVeU0fgx1 vEvaeUffh5MNR5tpacSIu963nlmgHj/harGJ7K64JghRwCOuN8k5r02nxyoI9wjavNud lgPw== X-Gm-Message-State: AOAM533ULlgtGbji30fKg1WlPJnT7SqOfl4pLbDYB57KbL1z1tn3BK/U egHX4iFTgelR3iXLpFzxU/izuY/J0VaKVjZQpK8= X-Google-Smtp-Source: ABdhPJwV5n0TyL60rtFVSJgv1WVFA75LA/7Y+Aomb1kRpVO700ihvwguTRmM/eSrsdaAEArhv7jw1+jQLsLPyUdQed8= X-Received: by 2002:a2e:8e68:: with SMTP id t8mr5916934ljk.335.1593587103306; Wed, 01 Jul 2020 00:05:03 -0700 (PDT) MIME-Version: 1.0 References: <20200630005625.2405062-1-daeho43@gmail.com> <961072bb-4c8f-b01e-666d-1f5e35a8b76d@huawei.com> In-Reply-To: <961072bb-4c8f-b01e-666d-1f5e35a8b76d@huawei.com> From: Daeho Jeong Date: Wed, 1 Jul 2020 16:04:52 +0900 Message-ID: To: Chao Yu X-Headers-End: 1jqWo6-008MFM-Sp Subject: Re: [f2fs-dev] [PATCH] f2fs: add symbolic link to kobject in sysfs X-BeenThere: linux-f2fs-devel@lists.sourceforge.net X-Mailman-Version: 2.1.21 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Daeho Jeong , kernel-team@android.com, linux-kernel@vger.kernel.org, linux-f2fs-devel@lists.sourceforge.net Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Errors-To: linux-f2fs-devel-bounces@lists.sourceforge.net QWN0dWFsbHksIEkgd2FudCB0byBrZWVwIHRoZSBtb3VudCBudW1iZXIgcmVtYWluaW5nIHRvIHRo ZSBzYW1lCm51bWJlciwgZXZlbiBpZiBpdCdzIHJlLW1vdW50ZWQuCk9yIHdlIG5lZWQgdG8ga2Vl cCB0cmFjayBvZiB0aGUgbnVtYmVyIGJlaW5nIGluY3JlYXNlZCB3aGVuZXZlciBpdCdzCnJlbW91 bnRlZC4gOigKCjIwMjDrhYQgN+yblCAx7J28ICjsiJgpIOyYpO2bhCAzOjM2LCBDaGFvIFl1IDx5 dWNoYW8wQGh1YXdlaS5jb20+64uY7J20IOyekeyEsToKPgo+IEhpIERhZWhvLAo+Cj4gT24gMjAy MC82LzMwIDg6NTYsIERhZWhvIEplb25nIHdyb3RlOgo+ID4gRnJvbTogRGFlaG8gSmVvbmcgPGRh ZWhvamVvbmdAZ29vZ2xlLmNvbT4KPiA+Cj4gPiBBZGRlZCBhIHN5bWJvbGljIGxpbmsgdG8gZGly ZWN0b3J5IG9mIHN5c2ZzLiBJdCB3aWxsCj4gPiBjcmVhdGUgYSBzeW1ib2xpYyBsaW5rIHN1Y2gg YXMgIm1vdW50XzAiIGFuZCAibW91bnRfMSIgdG8KPiA+IGVhY2ggZjJmcyBtb3VudCBpbiB0aGUg b3JkZXIgb2YgbW91bnRpbmcgZmlsZXN5c3RlbS4gSXQgd2lsbAo+ID4gcHJvdmlkZSBlYXN5IGFj Y2VzcyB0byBzeXNmcyBub2RlIGV2ZW4gaWYgbm90IGtub3dpbmcgdGhlCj4gPiBzcGVjaWZpYyBk ZXZpY2Ugbm9kZSBuYW1lIGxpa2Ugc2RhMTkgYW5kIGRtLTMuCj4KPiBKdXN0IG91dCBvZiBjdXJp b3NpdHksIGlmIHdlIG1vdW50L3Vtb3VudCBhcyBiZWxvdzoKPgo+IG1vdW50IC9kZXYvenJhbTAg L21udC9mMmZzMAo+IG1vdW50IC9kZXYvenJhbTEgL21udC9mMmZzMQo+IHVtb3VudCAvbW50L2Yy ZnMwCj4gbW91bnQgL2Rldi96cmFtMCAvbW50L2YyZnMwCj4KPiBTaG91bGRuJ3Qgc3lzZnMgc3Ry dWN0dXJlIGJlOgo+IG1vdW50XzIgLT4genJhbTAKPiBtb3VudF8xIC0+IHpyYW0xCj4genJhbTAK PiB6cmFtMQo+Cj4gVGhlbiB3ZSBjYW4ga25vdyB6cmFtMCBpcyBtb3VudGVkIGFmdGVyIHpyYW0x Pwo+Cj4gSG93ZXZlciB0aGUgcmVzdWx0IHNob3dzOgo+IG1vdW50XzAgLT4genJhbTAKPiBtb3Vu dF8xIC0+IHpyYW0xCj4genJhbTAKPiB6cmFtMQo+Cj4gVGhhbmtzLAo+Cj4gPgo+ID4gU2lnbmVk LW9mZi1ieTogRGFlaG8gSmVvbmcgPGRhZWhvamVvbmdAZ29vZ2xlLmNvbT4KPiA+IC0tLQo+ID4g IGZzL2YyZnMvZjJmcy5oICB8ICA0ICsrKysKPiA+ICBmcy9mMmZzL3N5c2ZzLmMgfCAzMSArKysr KysrKysrKysrKysrKysrKysrKysrKystLS0tCj4gPiAgMiBmaWxlcyBjaGFuZ2VkLCAzMSBpbnNl cnRpb25zKCspLCA0IGRlbGV0aW9ucygtKQo+ID4KPiA+IGRpZmYgLS1naXQgYS9mcy9mMmZzL2Yy ZnMuaCBiL2ZzL2YyZnMvZjJmcy5oCj4gPiBpbmRleCA0YjI4ZmQ0MmZkYmMuLjdkNmM1ZjhjZTE2 YiAxMDA2NDQKPiA+IC0tLSBhL2ZzL2YyZnMvZjJmcy5oCj4gPiArKysgYi9mcy9mMmZzL2YyZnMu aAo+ID4gQEAgLTE0MTksNiArMTQxOSw4IEBAIHN0cnVjdCBkZWNvbXByZXNzX2lvX2N0eCB7Cj4g PiAgI2RlZmluZSBNQVhfQ09NUFJFU1NfTE9HX1NJWkUgICAgICAgICAgICAgICAgOAo+ID4gICNk ZWZpbmUgTUFYX0NPTVBSRVNTX1dJTkRPV19TSVpFICAgICAoKFBBR0VfU0laRSkgPDwgTUFYX0NP TVBSRVNTX0xPR19TSVpFKQo+ID4KPiA+ICsjZGVmaW5lIE1PVU5UX05BTUVfU0laRSAgICAgICAg ICAgICAgICAgICAgICAyMAo+ID4gKwo+ID4gIHN0cnVjdCBmMmZzX3NiX2luZm8gewo+ID4gICAg ICAgc3RydWN0IHN1cGVyX2Jsb2NrICpzYjsgICAgICAgICAgICAgICAgIC8qIHBvaW50ZXIgdG8g VkZTIHN1cGVyIGJsb2NrICovCj4gPiAgICAgICBzdHJ1Y3QgcHJvY19kaXJfZW50cnkgKnNfcHJv YzsgICAgICAgICAgLyogcHJvYyBlbnRyeSAqLwo+ID4gQEAgLTE1OTksNiArMTYwMSw4IEBAIHN0 cnVjdCBmMmZzX3NiX2luZm8gewo+ID4gICAgICAgLyogRm9yIHN5c2ZzIHN1cHBwb3J0ICovCj4g PiAgICAgICBzdHJ1Y3Qga29iamVjdCBzX2tvYmo7Cj4gPiAgICAgICBzdHJ1Y3QgY29tcGxldGlv biBzX2tvYmpfdW5yZWdpc3RlcjsKPiA+ICsgICAgIGludCBzX21vdW50X2lkOwo+ID4gKyAgICAg Y2hhciBzX21vdW50X25hbWVbTU9VTlRfTkFNRV9TSVpFXTsKPiA+Cj4gPiAgICAgICAvKiBGb3Ig c2hyaW5rZXIgc3VwcG9ydCAqLwo+ID4gICAgICAgc3RydWN0IGxpc3RfaGVhZCBzX2xpc3Q7Cj4g PiBkaWZmIC0tZ2l0IGEvZnMvZjJmcy9zeXNmcy5jIGIvZnMvZjJmcy9zeXNmcy5jCj4gPiBpbmRl eCBhYjQwZTFmODlmMjMuLjY0YmJlMGIzYjgzMCAxMDA2NDQKPiA+IC0tLSBhL2ZzL2YyZnMvc3lz ZnMuYwo+ID4gKysrIGIvZnMvZjJmcy9zeXNmcy5jCj4gPiBAQCAtMTgsNiArMTgsNyBAQAo+ID4g ICNpbmNsdWRlIDx0cmFjZS9ldmVudHMvZjJmcy5oPgo+ID4KPiA+ICBzdGF0aWMgc3RydWN0IHBy b2NfZGlyX2VudHJ5ICpmMmZzX3Byb2Nfcm9vdDsKPiA+ICtzdGF0aWMgc3RydWN0IGlkYSBmMmZz X21vdW50X2lkYTsKPiA+Cj4gPiAgLyogU3lzZnMgc3VwcG9ydCBmb3IgZjJmcyAqLwo+ID4gIGVu dW0gewo+ID4gQEAgLTkwNiw2ICs5MDcsOSBAQCBpbnQgX19pbml0IGYyZnNfaW5pdF9zeXNmcyh2 b2lkKQo+ID4gICAgICAgfSBlbHNlIHsKPiA+ICAgICAgICAgICAgICAgZjJmc19wcm9jX3Jvb3Qg PSBwcm9jX21rZGlyKCJmcy9mMmZzIiwgTlVMTCk7Cj4gPiAgICAgICB9Cj4gPiArCj4gPiArICAg ICBpZGFfaW5pdCgmZjJmc19tb3VudF9pZGEpOwo+ID4gKwo+ID4gICAgICAgcmV0dXJuIHJldDsK PiA+ICB9Cj4gPgo+ID4gQEAgLTkxNSw2ICs5MTksNyBAQCB2b2lkIGYyZnNfZXhpdF9zeXNmcyh2 b2lkKQo+ID4gICAgICAga3NldF91bnJlZ2lzdGVyKCZmMmZzX2tzZXQpOwo+ID4gICAgICAgcmVt b3ZlX3Byb2NfZW50cnkoImZzL2YyZnMiLCBOVUxMKTsKPiA+ICAgICAgIGYyZnNfcHJvY19yb290 ID0gTlVMTDsKPiA+ICsgICAgIGlkYV9kZXN0cm95KCZmMmZzX21vdW50X2lkYSk7Cj4gPiAgfQo+ ID4KPiA+ICBpbnQgZjJmc19yZWdpc3Rlcl9zeXNmcyhzdHJ1Y3QgZjJmc19zYl9pbmZvICpzYmkp Cj4gPiBAQCAtOTI2LDEyICs5MzEsMjIgQEAgaW50IGYyZnNfcmVnaXN0ZXJfc3lzZnMoc3RydWN0 IGYyZnNfc2JfaW5mbyAqc2JpKQo+ID4gICAgICAgaW5pdF9jb21wbGV0aW9uKCZzYmktPnNfa29i al91bnJlZ2lzdGVyKTsKPiA+ICAgICAgIGVyciA9IGtvYmplY3RfaW5pdF9hbmRfYWRkKCZzYmkt PnNfa29iaiwgJmYyZnNfc2Jfa3R5cGUsIE5VTEwsCj4gPiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAiJXMiLCBzYi0+c19pZCk7Cj4gPiAtICAgICBpZiAoZXJyKSB7Cj4gPiAtICAgICAg ICAgICAgIGtvYmplY3RfcHV0KCZzYmktPnNfa29iaik7Cj4gPiAtICAgICAgICAgICAgIHdhaXRf Zm9yX2NvbXBsZXRpb24oJnNiaS0+c19rb2JqX3VucmVnaXN0ZXIpOwo+ID4gLSAgICAgICAgICAg ICByZXR1cm4gZXJyOwo+ID4gKyAgICAgaWYgKGVycikKPiA+ICsgICAgICAgICAgICAgZ290byBl cnIxOwo+ID4gKwo+ID4gKyAgICAgc2JpLT5zX21vdW50X2lkID0gaWRhX3NpbXBsZV9nZXQoJmYy ZnNfbW91bnRfaWRhLCAwLCAwLCBHRlBfS0VSTkVMKTsKPiA+ICsgICAgIGlmIChzYmktPnNfbW91 bnRfaWQgPCAwKSB7Cj4gPiArICAgICAgICAgICAgIGVyciA9IHNiaS0+c19tb3VudF9pZDsKPiA+ ICsgICAgICAgICAgICAgZ290byBlcnIxOwo+ID4gICAgICAgfQo+ID4KPiA+ICsgICAgIHNucHJp bnRmKHNiaS0+c19tb3VudF9uYW1lLCBNT1VOVF9OQU1FX1NJWkUsICJtb3VudF8lZCIsCj4gPiAr ICAgICAgICAgICAgICAgICAgICAgc2JpLT5zX21vdW50X2lkKTsKPiA+ICsgICAgIGVyciA9IHN5 c2ZzX2NyZWF0ZV9saW5rKCZmMmZzX2tzZXQua29iaiwgJnNiaS0+c19rb2JqLAo+ID4gKyAgICAg ICAgICAgICAgICAgICAgIHNiaS0+c19tb3VudF9uYW1lKTsKPiA+ICsgICAgIGlmIChlcnIpCj4g PiArICAgICAgICAgICAgIGdvdG8gZXJyMjsKPiA+ICsKPiA+ICAgICAgIGlmIChmMmZzX3Byb2Nf cm9vdCkKPiA+ICAgICAgICAgICAgICAgc2JpLT5zX3Byb2MgPSBwcm9jX21rZGlyKHNiLT5zX2lk LCBmMmZzX3Byb2Nfcm9vdCk7Cj4gPgo+ID4gQEAgLTk0Niw2ICs5NjEsMTIgQEAgaW50IGYyZnNf cmVnaXN0ZXJfc3lzZnMoc3RydWN0IGYyZnNfc2JfaW5mbyAqc2JpKQo+ID4gICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgdmljdGltX2JpdHNfc2VxX3Nob3csIHNiKTsKPiA+ICAgICAgIH0K PiA+ICAgICAgIHJldHVybiAwOwo+ID4gK2VycjI6Cj4gPiArICAgICBpZGFfc2ltcGxlX3JlbW92 ZSgmZjJmc19tb3VudF9pZGEsIHNiaS0+c19tb3VudF9pZCk7Cj4gPiArZXJyMToKPiA+ICsgICAg IGtvYmplY3RfcHV0KCZzYmktPnNfa29iaik7Cj4gPiArICAgICB3YWl0X2Zvcl9jb21wbGV0aW9u KCZzYmktPnNfa29ial91bnJlZ2lzdGVyKTsKPiA+ICsgICAgIHJldHVybiBlcnI7Cj4gPiAgfQo+ ID4KPiA+ICB2b2lkIGYyZnNfdW5yZWdpc3Rlcl9zeXNmcyhzdHJ1Y3QgZjJmc19zYl9pbmZvICpz YmkpCj4gPiBAQCAtOTU3LDYgKzk3OCw4IEBAIHZvaWQgZjJmc191bnJlZ2lzdGVyX3N5c2ZzKHN0 cnVjdCBmMmZzX3NiX2luZm8gKnNiaSkKPiA+ICAgICAgICAgICAgICAgcmVtb3ZlX3Byb2NfZW50 cnkoInZpY3RpbV9iaXRzIiwgc2JpLT5zX3Byb2MpOwo+ID4gICAgICAgICAgICAgICByZW1vdmVf cHJvY19lbnRyeShzYmktPnNiLT5zX2lkLCBmMmZzX3Byb2Nfcm9vdCk7Cj4gPiAgICAgICB9Cj4g PiArICAgICBzeXNmc19yZW1vdmVfbGluaygmZjJmc19rc2V0LmtvYmosIHNiaS0+c19tb3VudF9u YW1lKTsKPiA+ICsgICAgIGlkYV9zaW1wbGVfcmVtb3ZlKCZmMmZzX21vdW50X2lkYSwgc2JpLT5z X21vdW50X2lkKTsKPiA+ICAgICAgIGtvYmplY3RfZGVsKCZzYmktPnNfa29iaik7Cj4gPiAgICAg ICBrb2JqZWN0X3B1dCgmc2JpLT5zX2tvYmopOwo+ID4gIH0KPiA+CgoKX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KTGludXgtZjJmcy1kZXZlbCBtYWlsaW5n IGxpc3QKTGludXgtZjJmcy1kZXZlbEBsaXN0cy5zb3VyY2Vmb3JnZS5uZXQKaHR0cHM6Ly9saXN0 cy5zb3VyY2Vmb3JnZS5uZXQvbGlzdHMvbGlzdGluZm8vbGludXgtZjJmcy1kZXZlbAo=