* Take a reference to the root dentry so we get a chance to * clean up the dentry tree on umount. * See autofs4_force_release. */ sbi->root = dget(root);  /* 
int autofs4_fill_super(struct super_block *s, void *data, int silent){	struct inode * root_inode;	struct dentry * root;	struct file * pipe;	int pipefd;	struct autofs_sb_info *sbi;	struct autofs_info *ino;	int minproto, maxproto;	sbi = (struct autofs_sb_info *) kmalloc(sizeof(*sbi), GFP_KERNEL);	if ( !sbi )		goto fail_unlock;	DPRINTK("starting up, sbi = %p",sbi);	memset(sbi, 0, sizeof(*sbi));	s->s_fs_info = sbi;	sbi->magic = AUTOFS_SBI_MAGIC;	sbi->catatonic = 0;	sbi->exp_timeout = 0;	sbi->oz_pgrp = process_group(current);	sbi->sb = s;	sbi->version = 0;	sbi->sub_version = 0;	init_MUTEX(&sbi->wq_sem);	spin_lock_init(&sbi->fs_lock);	sbi->queues = NULL;	s->s_blocksize = 1024;	s->s_blocksize_bits = 10;	s->s_magic = AUTOFS_SUPER_MAGIC;	s->s_op = &autofs4_sops;	s->s_time_gran = 1;	/*	 * Get the root inode and dentry, but defer checking for errors.	 */	ino = autofs4_mkroot(sbi);	if (!ino)		goto fail_free;	root_inode = autofs4_get_inode(s, ino);	kfree(ino);	if (!root_inode)		goto fail_free;	root_inode->i_op = &autofs4_root_inode_operations;	root_inode->i_fop = &autofs4_root_operations;	root = d_alloc_root(root_inode);	pipe = NULL;	if (!root)		goto fail_iput;	/* Can this call block? */	if (parse_options(data, &pipefd,			  &root_inode->i_uid, &root_inode->i_gid,			  &sbi->oz_pgrp,			  &minproto, &maxproto)) {		printk("autofs: called with bogus options\n");		goto fail_dput;	}	/* Couldn't this be tested earlier? */	if (maxproto < AUTOFS_MIN_PROTO_VERSION ||	    minproto > AUTOFS_MAX_PROTO_VERSION) {		printk("autofs: kernel does not match daemon version "		       "daemon (%d, %d) kernel (%d, %d)\n",			minproto, maxproto,			AUTOFS_MIN_PROTO_VERSION, AUTOFS_MAX_PROTO_VERSION);		goto fail_dput;	}	sbi->version = maxproto > AUTOFS_MAX_PROTO_VERSION ? AUTOFS_MAX_PROTO_VERSION : maxproto;	sbi->sub_version = AUTOFS_PROTO_SUBVERSION;	DPRINTK("pipe fd = %d, pgrp = %u", pipefd, sbi->oz_pgrp);	pipe = fget(pipefd);		if ( !pipe ) {		printk("autofs: could not open pipe file descriptor\n");		goto fail_dput;	}	if ( !pipe->f_op || !pipe->f_op->write )		goto fail_fput;	sbi->pipe = pipe;	/*	 * Success! Install the root dentry now to indicate completion.	 */	s->s_root = root;	return 0;		/*	 * Failure ... clean up.	 */fail_fput:	printk("autofs: pipe file descriptor does not contain proper ops\n");	fput(pipe);	/* fall through */fail_dput:	dput(root);	goto fail_free;fail_iput:	printk("autofs: get root dentry failed\n");	iput(root_inode);fail_free:	kfree(sbi);fail_unlock:	return -EINVAL;}
10457	/local/tlutelli/issta_data/temp/c/2005_temp/2005/10457/104e49fc1e1656142869fab0e75d7df52b72eed9/inode.c/clean/fs/autofs4/inode.c