Re: [RFC PATCH 2/2] lightnvm: Append device name to target name

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



2016-05-23 17:16 GMT+08:00 Matias Bjørling <mb@xxxxxxxxxxx>:
> On 05/23/2016 11:13 AM, Wenwei Tao wrote:
>>
>> From: Wenwei Tao <ww.tao0320@xxxxxxxxx>
>>
>> We may create targets with same name on different
>> backend devices, this is not what we want, so append
>> the device name to target name to make the new target
>> name unique in the system.
>>
>> Signed-off-by: Wenwei Tao <ww.tao0320@xxxxxxxxx>
>> ---
>>   drivers/lightnvm/gennvm.c | 13 +++++++++++--
>>   1 file changed, 11 insertions(+), 2 deletions(-)
>>
>> diff --git a/drivers/lightnvm/gennvm.c b/drivers/lightnvm/gennvm.c
>> index 39ff0af..ecb09cb 100644
>> --- a/drivers/lightnvm/gennvm.c
>> +++ b/drivers/lightnvm/gennvm.c
>> @@ -43,9 +43,18 @@ static int gen_create_tgt(struct nvm_dev *dev, struct
>> nvm_ioctl_create *create)
>>         struct gendisk *tdisk;
>>         struct nvm_tgt_type *tt;
>>         struct nvm_target *t;
>> +       char tgtname[DISK_NAME_LEN];
>>         void *targetdata;
>>         int ret = -ENOMEM;
>>
>> +       if (strlen(dev->name) + strlen(create->tgtname) + 1 >
>> DISK_NAME_LEN) {
>> +               pr_err("nvm: target name too long. %s:%s\n",
>> +                               dev->name, create->tgtname);
>> +               return -EINVAL;
>> +       }
>> +
>> +       sprintf(tgtname, "%s%s", dev->name, create->tgtname);
>> +
>>         tt = nvm_find_target_type(create->tgttype, 1);
>>         if (!tt) {
>>                 pr_err("nvm: target type %s not found\n",
>> create->tgttype);
>> @@ -53,7 +62,7 @@ static int gen_create_tgt(struct nvm_dev *dev, struct
>> nvm_ioctl_create *create)
>>         }
>>
>>         mutex_lock(&gn->lock);
>> -       t = gen_find_target(gn, create->tgtname);
>> +       t = gen_find_target(gn, tgtname);
>>         if (t) {
>>                 pr_err("nvm: target name already exists.\n");
>>                 ret = -EINVAL;
>> @@ -73,7 +82,7 @@ static int gen_create_tgt(struct nvm_dev *dev, struct
>> nvm_ioctl_create *create)
>>         if (!tdisk)
>>                 goto err_queue;
>>
>> -       sprintf(tdisk->disk_name, "%s", create->tgtname);
>> +       sprintf(tdisk->disk_name, "%s", tgtname);
>>         tdisk->flags = GENHD_FL_EXT_DEVT;
>>         tdisk->major = 0;
>>         tdisk->first_minor = 0;
>>
>
> Hi Wenwei, what about the case where a target instance has multiple devices
> associated?
>
You mean a target may be build on multiple backend devices ?

> I am okay with having the user choosing a unique name for the target to be
> exposed.
You mean user should check the name before create the target?
Before move target mgmt into media mgr, that would be okay(after apply
lightnvm: hold lock until finish the target creation), since all
targets are in the global list.
Now consider below case:
There are two users A and B. A want to create target test0 upon
device0 B want to create test0 upon device1,
before creation they both check whether test0 is exist (e.g. by list
/dev/test0) , they all find test0 is not exist now, and they continue
their
creation. Both of them use disk name test0 to call add_disk, that
would cause panic.
--
To unsubscribe from this list: send the line "unsubscribe linux-block" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html



[Index of Archives]     [Linux RAID]     [Linux SCSI]     [Linux ATA RAID]     [IDE]     [Linux Wireless]     [Linux Kernel]     [ATH6KL]     [Linux Bluetooth]     [Linux Netdev]     [Kernel Newbies]     [Security]     [Git]     [Netfilter]     [Bugtraq]     [Yosemite News]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Device Mapper]

  Powered by Linux