[<prev] [next>] [<thread-prev] [day] [month] [year] [list]
Message-ID: <CAM_iQpVbe=iSoAND1hyEmpEcxuTCguXLbPkyHHhTS0s1=9A69Q@mail.gmail.com>
Date: Thu, 6 Jul 2017 10:56:07 -0700
From: Cong Wang <xiyou.wangcong@...il.com>
To: Eric Dumazet <eric.dumazet@...il.com>
Cc: Linux Kernel Network Developers <netdev@...r.kernel.org>,
borntraeger@...ibm.com, Sainath Grandhi <sainath.grandhi@...el.com>
Subject: Re: [Patch net] tap: convert a mutex to a spinlock
On Thu, Jul 6, 2017 at 1:24 AM, Eric Dumazet <eric.dumazet@...il.com> wrote:
> On Wed, 2017-07-05 at 13:50 -0700, Cong Wang wrote:
>> We are not allowed to block on the RCU reader side, so can't
>> just hold the mutex as before. As a quick fix, convert it to
>> a spinlock.
>>
>> Fixes: d9f1f61c0801 ("tap: Extending tap device create/destroy APIs")
>> Reported-by: Christian Borntraeger <borntraeger@...ibm.com>
>> Cc: Sainath Grandhi <sainath.grandhi@...el.com>
>> Signed-off-by: Cong Wang <xiyou.wangcong@...il.com>
>> ---
>> drivers/net/tap.c | 18 +++++++++---------
>> 1 file changed, 9 insertions(+), 9 deletions(-)
>>
>> diff --git a/drivers/net/tap.c b/drivers/net/tap.c
>> index 4d4173d..d88ae3c 100644
>> --- a/drivers/net/tap.c
>> +++ b/drivers/net/tap.c
>> @@ -106,7 +106,7 @@ struct major_info {
>> struct rcu_head rcu;
>> dev_t major;
>> struct idr minor_idr;
>> - struct mutex minor_lock;
>> + spinlock_t minor_lock;
>> const char *device_name;
>> struct list_head next;
>> };
>> @@ -416,15 +416,15 @@ int tap_get_minor(dev_t major, struct tap_dev *tap)
>> goto unlock;
>> }
>>
>> - mutex_lock(&tap_major->minor_lock);
>> - retval = idr_alloc(&tap_major->minor_idr, tap, 1, TAP_NUM_DEVS, GFP_KERNEL);
>
> idr_preload(GFP_KERNEL);
Are you sure we can use GFP_KERNEL? RCU read lock is already taken
at this point, so I am afraid we can't do preload here.
Powered by blists - more mailing lists