 /* * Check if mount is still attached, if not, let whoever holds it deal * with the sucker */ if (mnt->mnt_parent == mnt) { spin_unlock(&vfsmount_lock); return; } 
static void expire_mount(struct vfsmount *mnt, struct list_head *mounts){	spin_lock(&vfsmount_lock);	/*	 * Check that it is still dead: the count should now be 2 - as	 * contributed by the vfsmount parent and the mntget above	 */	if (atomic_read(&mnt->mnt_count) == 2) {		struct nameidata old_nd;		/* delete from the namespace */		list_del_init(&mnt->mnt_list);		detach_mnt(mnt, &old_nd);		spin_unlock(&vfsmount_lock);		path_release(&old_nd);		/*		 * Now lay it to rest if this was the last ref on the superblock		 */		if (atomic_read(&mnt->mnt_sb->s_active) == 1) {			/* last instance - try to be smart */			lock_kernel();			DQUOT_OFF(mnt->mnt_sb);			acct_auto_close(mnt->mnt_sb);			unlock_kernel();		}		mntput(mnt);	} else {		/*		 * Someone brought it back to life whilst we didn't have any		 * locks held so return it to the expiration list		 */		list_add_tail(&mnt->mnt_fslink, mounts);		spin_unlock(&vfsmount_lock);	}}
10457	/local/tlutelli/issta_data/temp/c/2005_temp/2005/10457/ed42c879b7b1463aa7a15fdbbeb2b1914d60be8a/namespace.c/buggy/fs/namespace.c