Prev: from Western Union(Reply To: western_unionheadoffice38@yahoo.com.hk)
Next: Bug#584846: Detects only 64MB and fails to boot on Intel Green City board if e820 hooked by GRUB2
From: J. R. Okajima on 22 Jun 2010 02:00 Ian Kent: > +static vfsmount *autofs4_find_vfsmount(struct path *parent, struct dentry *root) > +{ > + struct vfsmount *mnt = NULL; > + struct dentry *child; > + > + spin_lock(&dcache_lock); > + list_for_each_entry(child, &dentry->d_subdirs, d_u.d_child) { dentry->d_subdirs? parent->dentry->...? Or how about iterate_mounts() instead of loop over dentries? For example (just a example), struct args { /* input */ struct dentry *root; /* output */ struct vfsmount *mnt; }; static int compare_mnt(struct vfsmount *mnt, void *arg) { struct args *a = arg; if (mnt->mnt_root != a->root) return 0; a->mnt = mntget(mnt); return 1; } struct vfsmount *autofs4_find_vfsmount(struct dentry *root) { int err; struct args args = { .root = root }; err = iterate_mounts(compare_mnt, &args, current->nsproxy->mnt_ns); } J. R. Okajima -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo(a)vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
From: J. R. Okajima on 22 Jun 2010 22:20
Ian Kent: > I may be missing something about this, but why is it safe to use > iterate_mounts(), since it doesn't take the vfsmount_lock when > traversing the list of mounts? The sample code was not correct. We need to acquire vfsmount_lock or down_read(namespace_sem). Or it may be better to extract the body of iterate_mounts() and create a new function __iterate_mounts() such like that. __iterate_mounts() { /* equiv to the current iterate_mounts */ } iterate_mount() { down_read(namespace_sem); or spin_lock(&vfsmount_lock); __iterate_mount(); spin_unlock(&vfsmount_lock); or up_read(namespace_sem); } J. R. Okajima -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo(a)vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/ |