Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1754054AbbDHMIP (ORCPT ); Wed, 8 Apr 2015 08:08:15 -0400 Received: from mailout1.samsung.com ([203.254.224.24]:27644 "EHLO mailout1.samsung.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1753580AbbDHMIM (ORCPT ); Wed, 8 Apr 2015 08:08:12 -0400 X-AuditID: cbfee61a-f79516d000006302-a7-55251a2b6a23 From: Krzysztof Opasiak To: balbi@ti.com, gregkh@linuxfoundation.org, jlbec@evilplan.org Cc: andrzej.p@samsung.com, m.szyprowski@samsung.com, linux-api@vger.kernel.org, linux-kernel@vger.kernel.org, linux-usb@vger.kernel.org, Krzysztof Opasiak Subject: [PATCH v2 3/4] usb: gadget: mass_storage: Ensure that lun ids are contiguous Date: Wed, 08 Apr 2015 14:06:47 +0200 Message-id: <1428494808-12566-4-git-send-email-k.opasiak@samsung.com> X-Mailer: git-send-email 1.7.9.5 In-reply-to: <1428494808-12566-1-git-send-email-k.opasiak@samsung.com> References: <1428494808-12566-1-git-send-email-k.opasiak@samsung.com> X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFprJLMWRmVeSWpSXmKPExsVy+t9jAV1tKdVQg0fzJC1mvWxnsTh4v96i efF6NouT576xWNyeOI3NYvP3DjaLy7vmsFksWtbKbLH2yF12B06PpxeDPPbPXcPu0bdlFaPH 8RvbmTw+b5ILYI3isklJzcksSy3St0vgymg/5l4wXbji6MqbzA2M3/i7GDk5JARMJKb9nMIK YYtJXLi3nq2LkYtDSGARo8T9pn3MEM4vRon+T0fZuxg5ONgE9CXm7RIFMUUEHCTO7CgCKWEW 2MYo8XTHDHaQQcIC4RInb31mA7FZBFQlFlyazQRi8wq4Skz5to4VpFdCQEFiziQbkDCngJtE w4cJjCC2EFDJ6a9vmCYw8i5gZFjFKJpakFxQnJSea6hXnJhbXJqXrpecn7uJERxgz6R2MK5s sDjEKMDBqMTDK7BYJVSINbGsuDL3EKMEB7OSCO8ZLtVQId6UxMqq1KL8+KLSnNTiQ4zSHCxK 4rxzdOVChQTSE0tSs1NTC1KLYLJMHJxSDYzbn7l/NFj9YNLPpatna/u/vnLq3/HyP2GTozhl y9ZrB/1XSbV9zepV1XuXaY67bWGNxdqG+6Zi9h6HX+x6Yrrou1zt9NlvE1J8s5dEPws4VHcm 9MeZw4I/eZ1Pzdkd2lbafnp1399Omf2P0jb2LlZqvlQaHfqdaa3u9wYXveYEMY+px9xfBSxQ YinOSDTUYi4qTgQAaz3iPSwCAAA= Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Length: 2619 Lines: 86 Signed-off-by: Krzysztof Opasiak --- drivers/usb/gadget/function/f_mass_storage.c | 35 +++++++++++++++++++++++--- 1 file changed, 31 insertions(+), 4 deletions(-) diff --git a/drivers/usb/gadget/function/f_mass_storage.c b/drivers/usb/gadget/function/f_mass_storage.c index 095b618..9d9fafb 100644 --- a/drivers/usb/gadget/function/f_mass_storage.c +++ b/drivers/usb/gadget/function/f_mass_storage.c @@ -3355,6 +3355,12 @@ static struct config_group *fsg_lun_make(struct config_group *group, goto out; } + if (!fsg_opts->common->luns[num - 1]) { + ret = -EINVAL; + pr_err("LUN ids should be contignous\n"); + goto out; + } + opts = kzalloc(sizeof(*opts), GFP_KERNEL); if (!opts) { ret = -ENOMEM; @@ -3364,12 +3370,17 @@ static struct config_group *fsg_lun_make(struct config_group *group, memset(&config, 0, sizeof(config)); config.removable = true; + /* ensure that lun ids are contiguous */ + ret = configfs_depend_item_unlocked(&(fsg_opts->lun_opts + [num - 1]->group.cg_item)); + if (ret) + goto err_free_opts; + ret = fsg_common_create_lun(fsg_opts->common, &config, num, name, (const char **)&group->cg_item.ci_name); - if (ret) { - kfree(opts); - goto out; - } + if (ret) + goto err_undepend_item; + opts->lun = fsg_opts->common->luns[num]; opts->lun_id = num; BUG_ON(fsg_opts->lun_opts[num]); @@ -3382,6 +3393,16 @@ static struct config_group *fsg_lun_make(struct config_group *group, out: mutex_unlock(&fsg_opts->lock); return ERR_PTR(ret); + +err_undepend_item: + configfs_undepend_item_unlocked(&(fsg_opts->lun_opts + [num - 1]->group.cg_item)); +err_free_opts: + kfree(opts); + + mutex_unlock(&fsg_opts->lock); + return ERR_PTR(ret); + } static void fsg_lun_drop(struct config_group *group, struct config_item *item) @@ -3400,10 +3421,16 @@ static void fsg_lun_drop(struct config_group *group, struct config_item *item) unregister_gadget_item(gadget); } + + /* Allow to remove next one */ + configfs_undepend_item_unlocked(&(fsg_opts->lun_opts + [lun_opts->lun_id - 1]->group.cg_item)); + fsg_common_remove_lun(lun_opts->lun, fsg_opts->common->sysfs); fsg_opts->common->luns[lun_opts->lun_id] = NULL; fsg_opts->lun_opts[lun_opts->lun_id] = NULL; lun_opts->lun_id = 0; + mutex_unlock(&fsg_opts->lock); config_item_put(item); -- 1.7.9.5 -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/