diff options
author | Al Viro <viro@zeniv.linux.org.uk> | 2012-04-02 14:34:06 -0400 |
---|---|---|
committer | Al Viro <viro@zeniv.linux.org.uk> | 2012-05-29 23:28:33 -0400 |
commit | b0b0382bb4904965a9e9fca77ad87514dfda0d1c (patch) | |
tree | dc46873fa74e0d194e4a2571b16f0767e1919ae8 /fs/gfs2 | |
parent | 6d42e7e9f6d86ed4dfacde75a6cf515068f9749c (diff) |
->encode_fh() API change
pass inode + parent's inode or NULL instead of dentry + bool saying
whether we want the parent or not.
NOTE: that needs ceph fix folded in.
Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
Diffstat (limited to 'fs/gfs2')
-rw-r--r-- | fs/gfs2/export.c | 17 |
1 files changed, 5 insertions, 12 deletions
diff --git a/fs/gfs2/export.c b/fs/gfs2/export.c index 70ba891654f8..e8ed6d4a6181 100644 --- a/fs/gfs2/export.c +++ b/fs/gfs2/export.c | |||
@@ -28,15 +28,14 @@ | |||
28 | #define GFS2_LARGE_FH_SIZE 8 | 28 | #define GFS2_LARGE_FH_SIZE 8 |
29 | #define GFS2_OLD_FH_SIZE 10 | 29 | #define GFS2_OLD_FH_SIZE 10 |
30 | 30 | ||
31 | static int gfs2_encode_fh(struct dentry *dentry, __u32 *p, int *len, | 31 | static int gfs2_encode_fh(struct inode *inode, __u32 *p, int *len, |
32 | int connectable) | 32 | struct inode *parent) |
33 | { | 33 | { |
34 | __be32 *fh = (__force __be32 *)p; | 34 | __be32 *fh = (__force __be32 *)p; |
35 | struct inode *inode = dentry->d_inode; | ||
36 | struct super_block *sb = inode->i_sb; | 35 | struct super_block *sb = inode->i_sb; |
37 | struct gfs2_inode *ip = GFS2_I(inode); | 36 | struct gfs2_inode *ip = GFS2_I(inode); |
38 | 37 | ||
39 | if (connectable && (*len < GFS2_LARGE_FH_SIZE)) { | 38 | if (parent && (*len < GFS2_LARGE_FH_SIZE)) { |
40 | *len = GFS2_LARGE_FH_SIZE; | 39 | *len = GFS2_LARGE_FH_SIZE; |
41 | return 255; | 40 | return 255; |
42 | } else if (*len < GFS2_SMALL_FH_SIZE) { | 41 | } else if (*len < GFS2_SMALL_FH_SIZE) { |
@@ -50,14 +49,10 @@ static int gfs2_encode_fh(struct dentry *dentry, __u32 *p, int *len, | |||
50 | fh[3] = cpu_to_be32(ip->i_no_addr & 0xFFFFFFFF); | 49 | fh[3] = cpu_to_be32(ip->i_no_addr & 0xFFFFFFFF); |
51 | *len = GFS2_SMALL_FH_SIZE; | 50 | *len = GFS2_SMALL_FH_SIZE; |
52 | 51 | ||
53 | if (!connectable || inode == sb->s_root->d_inode) | 52 | if (!parent || inode == sb->s_root->d_inode) |
54 | return *len; | 53 | return *len; |
55 | 54 | ||
56 | spin_lock(&dentry->d_lock); | 55 | ip = GFS2_I(parent); |
57 | inode = dentry->d_parent->d_inode; | ||
58 | ip = GFS2_I(inode); | ||
59 | igrab(inode); | ||
60 | spin_unlock(&dentry->d_lock); | ||
61 | 56 | ||
62 | fh[4] = cpu_to_be32(ip->i_no_formal_ino >> 32); | 57 | fh[4] = cpu_to_be32(ip->i_no_formal_ino >> 32); |
63 | fh[5] = cpu_to_be32(ip->i_no_formal_ino & 0xFFFFFFFF); | 58 | fh[5] = cpu_to_be32(ip->i_no_formal_ino & 0xFFFFFFFF); |
@@ -65,8 +60,6 @@ static int gfs2_encode_fh(struct dentry *dentry, __u32 *p, int *len, | |||
65 | fh[7] = cpu_to_be32(ip->i_no_addr & 0xFFFFFFFF); | 60 | fh[7] = cpu_to_be32(ip->i_no_addr & 0xFFFFFFFF); |
66 | *len = GFS2_LARGE_FH_SIZE; | 61 | *len = GFS2_LARGE_FH_SIZE; |
67 | 62 | ||
68 | iput(inode); | ||
69 | |||
70 | return *len; | 63 | return *len; |
71 | } | 64 | } |
72 | 65 | ||