Messages in this thread Patch in this message |  | | Date | Fri, 25 May 2001 15:11:27 -0400 (EDT) | From | Alexander Viro <> | Subject | [PATCH] (part 6) fs/super.c cleanups |
| |
Expands add_vfsmnt() call in kern_mount(), takes alloc_vfsmnt() before reading superblock and makes (in add_vfsmnt()) insertion into vfsmntlist unconditional (kern_mount()) was the only case when we didn't want it to happen. Moreover, recovery in kern_mount() becomes simpler.
Please, apply. diff -urN S5-pre6-alloc_vfsmnt/fs/super.c S5-pre6-kern_mount/fs/super.c --- S5-pre6-alloc_vfsmnt/fs/super.c Fri May 25 04:13:30 2001 +++ S5-pre6-kern_mount/fs/super.c Fri May 25 15:07:19 2001 @@ -365,8 +365,7 @@ mnt->mnt_parent = mnt; } list_add(&mnt->mnt_instances, &sb->s_mounts); - if (nd || dev_name) - list_add(&mnt->mnt_list, vfsmntlist.prev); + list_add(&mnt->mnt_list, vfsmntlist.prev); spin_unlock(&dcache_lock); out: return mnt; @@ -945,21 +944,31 @@ struct vfsmount *kern_mount(struct file_system_type *type) { - kdev_t dev = get_unnamed_dev(); struct super_block *sb; - struct vfsmount *mnt; - if (!dev) + struct vfsmount *mnt = alloc_vfsmnt(); + kdev_t dev; + + if (!mnt) + return ERR_PTR(-ENOMEM); + + dev = get_unnamed_dev(); + if (!dev) { + kfree(mnt); return ERR_PTR(-EMFILE); + } sb = read_super(dev, NULL, type, 0, NULL, 0); if (!sb) { put_unnamed_dev(dev); + kfree(mnt); return ERR_PTR(-EINVAL); } - mnt = add_vfsmnt(NULL, sb->s_root, NULL); - if (!mnt) { - kill_super(sb); - return ERR_PTR(-ENOMEM); - } + mnt->mnt_sb = sb; + mnt->mnt_root = dget(sb->s_root); + mnt->mnt_mountpoint = mnt->mnt_root; + mnt->mnt_parent = mnt; + spin_lock(&dcache_lock); + list_add(&mnt->mnt_instances, &sb->s_mounts); + spin_unlock(&dcache_lock); type->kern_mnt = mnt; return mnt; } - To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
|  |