Re: [PATCH 8/8] xarray: Don't clear marks in xas_store()

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

 



On Wed, Feb 05, 2020 at 01:59:04PM -0800, Matthew Wilcox wrote:

> > How is RCU mark reading used anyhow?
> 
> We iterate over pages in the page cache with, eg, the dirty bit set.
> This bug will lead to the loop terminating early and failing to find
> dirty pages that it should.

But the inhernetly weak sync of marks and pointers means that
iteration will miss some dirty pages and return some clean pages. It
is all OK for some reason?
 
> > Actually the clearing of marks by xa_store(, NULL) is creating a very
> > subtle bug in drivers/infiniband/core/device.c :( Can you add a Fixes
> > line too:
> > 
> > ib_set_client_data() is assuming the marks for the entry will not
> > change, but if the caller passed in NULL they get wrongly reset, and
> > three call sites pass in NULL:
> >  drivers/infiniband/ulp/srpt/ib_srpt.c
> >  net/rds/ib.c
> >  net/smc/smc_ib.c
> > Fixes: 0df91bb67334 ("RDMA/devices: Use xarray to store the client_data")
> 
> There's no bug here.
> 
> If you're actually storing NULL in the array, then the marks would go
> away.  That's inherent -- imagine you have an array with a single entry
> at 64.  Then you store NULL there.  That causes the node to be deleted,
> and the marks must necessarily disappear with it -- there's nowhere to
> store them!

Ah, it is allocating! These little behavior differences are tricky to
remember over with infrequent use :(

Jason



[Index of Archives]     [Linux Ext4 Filesystem]     [Union Filesystem]     [Filesystem Testing]     [Ceph Users]     [Ecryptfs]     [AutoFS]     [Kernel Newbies]     [Share Photos]     [Security]     [Netfilter]     [Bugtraq]     [Yosemite News]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux Cachefs]     [Reiser Filesystem]     [Linux RAID]     [Samba]     [Device Mapper]     [CEPH Development]

  Powered by Linux