> > static struct vfsmount *propagation_next(struct vfsmount *p,
> > struct vfsmount *base)
> > {
> > /* first iterate over the slaves */
> > if (!list_empty(&p->mnt_slave_list))
> > return first_slave(p);
>
> I think this code should be
> if (!list_empty(&p->mnt_slave))
> return next_slave(p);
>
> Right? I think I get the idea.
This is a depth-first search, so first_slave() is right.
Here's a less buggy (and even more simplified) version of the
function. Note: it must be called with 'origin' either on a slave
list or at the root pnode. That's because the function checks if the
all vfsmounts in a pnode have been traversed by looking at the
emptiness of mnt_slave. So if origin was in a slave pnode, but is not
the actual slave link, the algorithm will go off the starting pnode
and up to it's master.
So here's a preparation function that finds the right place to start
the propagation.
static struct vfsmount *propagation_first(struct vfsmount *p)
{
struct vfsmount *q = p;
while (list_empty(&q->mnt_slave)) {
q = next_shared(q);
if (q == p)
break;
}
return q;
}
static struct vfsmount *propagation_next(struct vfsmount *p,
struct vfsmount *origin)
{
/* are there any slaves of this mount? */
if (!list_empty(&p->mnt_slave_list))
return first_slave(p);
while (1) {
/* if p->mnt_share is empty, this is a no-op */
p = next_shared(p);
/* finished traversing? */
if (p == origin)
break;
/* more vfsmounts belong to the pnode? */
if (list_empty(&p->mnt_slave))
return p;
/* more slaves? */
if (p->mnt_slave.next != &p->mnt_master->mnt_slave_list)
return next_slave(p);
/* back at master */
p = p->mnt_master;
}
return NULL;
}
-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to [email protected]
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/
[Index of Archives]
[Kernel Newbies]
[Netfilter]
[Bugtraq]
[Photo]
[Gimp]
[Yosemite News]
[MIPS Linux]
[ARM Linux]
[Linux Security]
[Linux RAID]
[Video 4 Linux]
[Linux for the blind]
|
|