Received: by 2002:a25:ab43:0:0:0:0:0 with SMTP id u61csp3708249ybi; Tue, 18 Jun 2019 05:24:09 -0700 (PDT) X-Google-Smtp-Source: APXvYqwFaMcYrPd2sYLBC4Uw6sWpBG2rrilUaaUzvMQKkaVgtKGl17RUmbeb7kFYxP5iceursCc5 X-Received: by 2002:a17:902:ab83:: with SMTP id f3mr23237918plr.122.1560860649606; Tue, 18 Jun 2019 05:24:09 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1560860649; cv=none; d=google.com; s=arc-20160816; b=q5pyjU2A8ee2Q63v1hWSZeqpJv6r4hgpr64AxV8bPFsEKkbNu0+kdGQYQ+gVerMhJ3 2ry/1S6QdUU8x/LreuLOhOqB753MN5tXwolgVzeilmLD+/7X3rSwV9Bg7X6GpHyad02G foTwWb/ik9Qdn2FdzAvKmeN/N6dFTBGP32SC+ZLaz1lkYKKWj+ce6VOfmGv7mq9dSiM6 dDg/Wlna4tkFix9wGIttvbYcbC/sb4IuJKzjeU1DBUTEI6ymfWKm11a9zf08HaMZjL/7 PU9Dp7PeMal4VbP7sIrCAV+rfDmwaWIYYpzCLKpmzZISX8NYqMBz8CmmshIVCSnI+5wZ u2Dw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:mime-version:references:in-reply-to :message-id:date:subject:to:from; bh=dIAwiAyiQuYA7pOZXbFz/jfCFAg5iHwhmeaWKUqGU/8=; b=RtbiWjqRNCgSeoOfIATlPxJgmaq80oyBCPEB1/OgXbTu4MA1YcefyqLbQWo1N1AZ4M rnhSbWKy/wCmqpRFG3w00EYSvMI3rEiL1mEFKABg+oz1XRLth1C+iz7QTh2Mzh1HFyKr 1YT7skYWek4XobA7AdpX8Q2XlV3ytigcKlFS3CRDoGxzRmr/MyNN9T5NbJa/KfZK/n7J I2y7gYqrRSkg8egMZ3rST3aiP1c4ZYdbcq64WQjvj4jCvEBIPW7MRbAQEWBvluAX9yIg Mp6PjqSiIVTvhZPinMUk7RYm2045GuQmKiRtR+3qtkychUaxwGI3zycMH3MJdSCuxOI8 hpHg== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id y6si90714pgp.222.2019.06.18.05.23.53; Tue, 18 Jun 2019 05:24:09 -0700 (PDT) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1729020AbfFRMXU (ORCPT + 99 others); Tue, 18 Jun 2019 08:23:20 -0400 Received: from szxga05-in.huawei.com ([45.249.212.191]:18639 "EHLO huawei.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1726047AbfFRMXS (ORCPT ); Tue, 18 Jun 2019 08:23:18 -0400 Received: from DGGEMS414-HUB.china.huawei.com (unknown [172.30.72.58]) by Forcepoint Email with ESMTP id AAE13FEECF18CAF8C6D5; Tue, 18 Jun 2019 20:23:08 +0800 (CST) Received: from RH5885H-V3.huawei.com (10.90.53.225) by DGGEMS414-HUB.china.huawei.com (10.3.19.214) with Microsoft SMTP Server id 14.3.439.0; Tue, 18 Jun 2019 20:23:01 +0800 From: SunKe To: , , , Subject: [PATCH 1/2] sample_configfs: bin_file read and write Date: Tue, 18 Jun 2019 20:28:28 +0800 Message-ID: <1560860909-51059-2-git-send-email-sunke32@huawei.com> X-Mailer: git-send-email 2.7.4 In-Reply-To: <1560860909-51059-1-git-send-email-sunke32@huawei.com> References: <1560860909-51059-1-git-send-email-sunke32@huawei.com> MIME-Version: 1.0 Content-Type: text/plain X-Originating-IP: [10.90.53.225] X-CFilter-Loop: Reflected Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Add bin_file read and write function Signed-off-by: SunKe --- samples/configfs/configfs_sample.c | 43 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 43 insertions(+) diff --git a/samples/configfs/configfs_sample.c b/samples/configfs/configfs_sample.c index 004a4e2..c76b784 100644 --- a/samples/configfs/configfs_sample.c +++ b/samples/configfs/configfs_sample.c @@ -146,6 +146,8 @@ static struct childless childless_subsys = { struct simple_child { struct config_item item; int storeme; + void *data; + size_t len; }; static inline struct simple_child *to_simple_child(struct config_item *item) @@ -153,6 +155,46 @@ static inline struct simple_child *to_simple_child(struct config_item *item) return item ? container_of(item, struct simple_child, item) : NULL; } +static ssize_t simple_child_bin_storeme_bin_write(struct config_item *item, + const void *data, size_t size) +{ + struct simple_child *simple_child = to_simple_child(item); + + kfree(simple_child->data); + simple_child->data = NULL; + + simple_child->data = kmemdup(data, size, GFP_KERNEL); + if (!simple_child->data) + return -ENOMEM; + simple_child->len = size; + + return 0; +} + +static ssize_t simple_child_bin_storeme_bin_read(struct config_item *item, + void *data, size_t size) +{ + struct simple_child *simple_child = to_simple_child(item); + + if (!data) { + size = simple_child->len; + } else { + memcpy(data, simple_child->data, simple_child->len); + size = simple_child->len; + } + + return size; +} + +#define MAX_SIZE (128 * 1024) + +CONFIGFS_BIN_ATTR(simple_child_bin_, storeme_bin, NULL, MAX_SIZE); + +static struct configfs_bin_attribute *simple_child_bin_attrs[] = { + &simple_child_bin_attr_storeme_bin, + NULL, +}; + static ssize_t simple_child_storeme_show(struct config_item *item, char *page) { return sprintf(page, "%d\n", to_simple_child(item)->storeme); @@ -196,6 +238,7 @@ static struct configfs_item_operations simple_child_item_ops = { static const struct config_item_type simple_child_type = { .ct_item_ops = &simple_child_item_ops, .ct_attrs = simple_child_attrs, + .ct_bin_attrs = simple_child_bin_attrs, .ct_owner = THIS_MODULE, }; -- 2.7.4