diff options
Diffstat (limited to 'fs/ext3')
-rw-r--r-- | fs/ext3/super.c | 37 |
1 files changed, 21 insertions, 16 deletions
diff --git a/fs/ext3/super.c b/fs/ext3/super.c index 81868c0bc40e..de55da9e28ba 100644 --- a/fs/ext3/super.c +++ b/fs/ext3/super.c | |||
@@ -631,13 +631,10 @@ static int ext3_show_options(struct seq_file *seq, struct vfsmount *vfs) | |||
631 | } | 631 | } |
632 | 632 | ||
633 | 633 | ||
634 | static struct dentry *ext3_get_dentry(struct super_block *sb, void *vobjp) | 634 | static struct inode *ext3_nfs_get_inode(struct super_block *sb, |
635 | u64 ino, u32 generation) | ||
635 | { | 636 | { |
636 | __u32 *objp = vobjp; | ||
637 | unsigned long ino = objp[0]; | ||
638 | __u32 generation = objp[1]; | ||
639 | struct inode *inode; | 637 | struct inode *inode; |
640 | struct dentry *result; | ||
641 | 638 | ||
642 | if (ino < EXT3_FIRST_INO(sb) && ino != EXT3_ROOT_INO) | 639 | if (ino < EXT3_FIRST_INO(sb) && ino != EXT3_ROOT_INO) |
643 | return ERR_PTR(-ESTALE); | 640 | return ERR_PTR(-ESTALE); |
@@ -660,15 +657,22 @@ static struct dentry *ext3_get_dentry(struct super_block *sb, void *vobjp) | |||
660 | iput(inode); | 657 | iput(inode); |
661 | return ERR_PTR(-ESTALE); | 658 | return ERR_PTR(-ESTALE); |
662 | } | 659 | } |
663 | /* now to find a dentry. | 660 | |
664 | * If possible, get a well-connected one | 661 | return inode; |
665 | */ | 662 | } |
666 | result = d_alloc_anon(inode); | 663 | |
667 | if (!result) { | 664 | static struct dentry *ext3_fh_to_dentry(struct super_block *sb, struct fid *fid, |
668 | iput(inode); | 665 | int fh_len, int fh_type) |
669 | return ERR_PTR(-ENOMEM); | 666 | { |
670 | } | 667 | return generic_fh_to_dentry(sb, fid, fh_len, fh_type, |
671 | return result; | 668 | ext3_nfs_get_inode); |
669 | } | ||
670 | |||
671 | static struct dentry *ext3_fh_to_parent(struct super_block *sb, struct fid *fid, | ||
672 | int fh_len, int fh_type) | ||
673 | { | ||
674 | return generic_fh_to_parent(sb, fid, fh_len, fh_type, | ||
675 | ext3_nfs_get_inode); | ||
672 | } | 676 | } |
673 | 677 | ||
674 | #ifdef CONFIG_QUOTA | 678 | #ifdef CONFIG_QUOTA |
@@ -737,9 +741,10 @@ static const struct super_operations ext3_sops = { | |||
737 | #endif | 741 | #endif |
738 | }; | 742 | }; |
739 | 743 | ||
740 | static struct export_operations ext3_export_ops = { | 744 | static const struct export_operations ext3_export_ops = { |
745 | .fh_to_dentry = ext3_fh_to_dentry, | ||
746 | .fh_to_parent = ext3_fh_to_parent, | ||
741 | .get_parent = ext3_get_parent, | 747 | .get_parent = ext3_get_parent, |
742 | .get_dentry = ext3_get_dentry, | ||
743 | }; | 748 | }; |
744 | 749 | ||
745 | enum { | 750 | enum { |