예제 #1
0
파일: dir.c 프로젝트: rohsaini/mkunity
static int nfs_sillyrename(struct inode *dir, const char *name, int len)
{
	struct inode	*inode;
	char		silly[16];
	int		slen, ret;

	dir->i_count++;
	if (nfs_lookup(dir, name, len, &inode) < 0)
		return -EIO;		/* arbitrary */
	if (inode->i_count == 1 || NFS_RENAMED_DIR(inode)) {
		iput(inode);
		return -EIO;
	}
	slen = sprintf(silly, ".nfs%ld", inode->i_ino);

	if (len == slen && !strncmp(name, silly, len)) {
		iput(inode);
		return -EIO;		/* DWIM */
	}
	ret = nfs_proc_rename(NFS_SERVER(dir), NFS_FH(dir), name,
					       NFS_FH(dir), silly, 0);
	if (ret >= 0) {
		nfs_lookup_cache_remove(dir, NULL, name);
		nfs_lookup_cache_remove(dir, NULL, silly);
		NFS_RENAMED_DIR(inode) = dir;
		dir->i_count++;
	}
	iput(inode);
	return ret;
}
예제 #2
0
파일: dir.c 프로젝트: rohsaini/mkunity
void nfs_sillyrename_cleanup(struct inode *inode)
{
	struct inode	*dir = NFS_RENAMED_DIR(inode);
	char		silly[14];
	int		error, slen;

	slen = sprintf(silly, ".nfs%ld", inode->i_ino);
	if ((error = nfs_unlink(dir, silly, slen)) < 0) {
		printk("NFS silly_rename cleanup failed (err = %d)\n",
					-error);
	}
	NFS_RENAMED_DIR(inode) = NULL;
}
예제 #3
0
파일: dir.c 프로젝트: shattered/linux-m68k
void nfs_sillyrename_cleanup(struct inode *inode)
{
	struct inode	*dir = NFS_RENAMED_DIR(inode);
	char		silly[14];
	int		error, slen;

	slen = sprintf(silly, ".nfs%ld", inode->i_ino);
	error = nfs_proc_remove(NFS_SERVER(dir), NFS_FH(dir), silly);
	nfs_lookup_cache_remove(dir, NULL, silly);
	if (error < 0)
		printk("NFS silly_rename cleanup failed (err = %d)\n",
					-error);
	NFS_RENAMED_DIR(inode) = NULL;
	iput(dir);
}
예제 #4
0
static void nfs_put_inode(struct inode * inode)
{
	if (NFS_RENAMED_DIR(inode))
		nfs_sillyrename_cleanup(inode);
	if (inode->i_pipe)
		clear_inode(inode);
}