Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 644f9ab3 authored by Christoph Hellwig's avatar Christoph Hellwig Committed by Linus Torvalds
Browse files

ocfs2: new export ops



OCFS2 has it's own 64bit-firendly filehandle format so we can't use the
generic helpers here.  I'll add a struct for the types later.

Signed-off-by: default avatarChristoph Hellwig <hch@lst.de>
Cc: Neil Brown <neilb@suse.de>
Cc: "J. Bruce Fields" <bfields@fieldses.org>
Cc: Mark Fasheh <mark.fasheh@oracle.com>
Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
parent 34c0d154
Loading
Loading
Loading
Loading
+24 −41
Original line number Original line Diff line number Diff line
@@ -45,9 +45,9 @@ struct ocfs2_inode_handle
	u32 ih_generation;
	u32 ih_generation;
};
};


static struct dentry *ocfs2_get_dentry(struct super_block *sb, void *vobjp)
static struct dentry *ocfs2_get_dentry(struct super_block *sb,
		struct ocfs2_inode_handle *handle)
{
{
	struct ocfs2_inode_handle *handle = vobjp;
	struct inode *inode;
	struct inode *inode;
	struct dentry *result;
	struct dentry *result;


@@ -194,54 +194,37 @@ static int ocfs2_encode_fh(struct dentry *dentry, u32 *fh_in, int *max_len,
	return type;
	return type;
}
}


static struct dentry *ocfs2_decode_fh(struct super_block *sb, u32 *fh_in,
static struct dentry *ocfs2_fh_to_dentry(struct super_block *sb,
				      int fh_len, int fileid_type,
		struct fid *fid, int fh_len, int fh_type)
				      int (*acceptable)(void *context,
						        struct dentry *de),
				      void *context)
{
{
	struct ocfs2_inode_handle handle, parent;
	struct ocfs2_inode_handle handle;
	struct dentry *ret = NULL;
	__le32 *fh = (__force __le32 *) fh_in;

	mlog_entry("(0x%p, 0x%p, %d, %d, 0x%p, 0x%p)\n",
		   sb, fh, fh_len, fileid_type, acceptable, context);

	if (fh_len < 3 || fileid_type > 2)
		goto bail;

	if (fileid_type == 2) {
		if (fh_len < 6)
			goto bail;


		parent.ih_blkno = (u64)le32_to_cpu(fh[3]) << 32;
	if (fh_len < 3 || fh_type > 2)
		parent.ih_blkno |= (u64)le32_to_cpu(fh[4]);
		return NULL;
		parent.ih_generation = le32_to_cpu(fh[5]);


		mlog(0, "Decoding parent: blkno: %llu, generation: %u\n",
	handle.ih_blkno = (u64)le32_to_cpu(fid->raw[0]) << 32;
		     (unsigned long long)parent.ih_blkno,
	handle.ih_blkno |= (u64)le32_to_cpu(fid->raw[1]);
		     parent.ih_generation);
	handle.ih_generation = le32_to_cpu(fid->raw[2]);
	return ocfs2_get_dentry(sb, &handle);
}
}


	handle.ih_blkno = (u64)le32_to_cpu(fh[0]) << 32;
static struct dentry *ocfs2_fh_to_parent(struct super_block *sb,
	handle.ih_blkno |= (u64)le32_to_cpu(fh[1]);
		struct fid *fid, int fh_len, int fh_type)
	handle.ih_generation = le32_to_cpu(fh[2]);
{

	struct ocfs2_inode_handle parent;
	mlog(0, "Encoding fh: blkno: %llu, generation: %u\n",
	     (unsigned long long)handle.ih_blkno, handle.ih_generation);


	ret = ocfs2_export_ops.find_exported_dentry(sb, &handle, &parent,
	if (fh_type != 2 || fh_len < 6)
						    acceptable, context);
		return NULL;


bail:
	parent.ih_blkno = (u64)le32_to_cpu(fid->raw[3]) << 32;
	mlog_exit_ptr(ret);
	parent.ih_blkno |= (u64)le32_to_cpu(fid->raw[4]);
	return ret;
	parent.ih_generation = le32_to_cpu(fid->raw[5]);
	return ocfs2_get_dentry(sb, &parent);
}
}


struct export_operations ocfs2_export_ops = {
struct export_operations ocfs2_export_ops = {
	.decode_fh	= ocfs2_decode_fh,
	.encode_fh	= ocfs2_encode_fh,
	.encode_fh	= ocfs2_encode_fh,

	.fh_to_dentry	= ocfs2_fh_to_dentry,
	.fh_to_parent	= ocfs2_fh_to_parent,
	.get_parent	= ocfs2_get_parent,
	.get_parent	= ocfs2_get_parent,
	.get_dentry	= ocfs2_get_dentry,
};
};