diff options
Diffstat (limited to 'fs/reiserfs/inode.c')
-rw-r--r-- | fs/reiserfs/inode.c | 30 |
1 files changed, 12 insertions, 18 deletions
diff --git a/fs/reiserfs/inode.c b/fs/reiserfs/inode.c index 59d06871a850..a6d4268fb6c1 100644 --- a/fs/reiserfs/inode.c +++ b/fs/reiserfs/inode.c | |||
@@ -1592,13 +1592,12 @@ struct dentry *reiserfs_fh_to_parent(struct super_block *sb, struct fid *fid, | |||
1592 | (fh_type == 6) ? fid->raw[5] : 0); | 1592 | (fh_type == 6) ? fid->raw[5] : 0); |
1593 | } | 1593 | } |
1594 | 1594 | ||
1595 | int reiserfs_encode_fh(struct dentry *dentry, __u32 * data, int *lenp, | 1595 | int reiserfs_encode_fh(struct inode *inode, __u32 * data, int *lenp, |
1596 | int need_parent) | 1596 | struct inode *parent) |
1597 | { | 1597 | { |
1598 | struct inode *inode = dentry->d_inode; | ||
1599 | int maxlen = *lenp; | 1598 | int maxlen = *lenp; |
1600 | 1599 | ||
1601 | if (need_parent && (maxlen < 5)) { | 1600 | if (parent && (maxlen < 5)) { |
1602 | *lenp = 5; | 1601 | *lenp = 5; |
1603 | return 255; | 1602 | return 255; |
1604 | } else if (maxlen < 3) { | 1603 | } else if (maxlen < 3) { |
@@ -1610,20 +1609,15 @@ int reiserfs_encode_fh(struct dentry *dentry, __u32 * data, int *lenp, | |||
1610 | data[1] = le32_to_cpu(INODE_PKEY(inode)->k_dir_id); | 1609 | data[1] = le32_to_cpu(INODE_PKEY(inode)->k_dir_id); |
1611 | data[2] = inode->i_generation; | 1610 | data[2] = inode->i_generation; |
1612 | *lenp = 3; | 1611 | *lenp = 3; |
1613 | /* no room for directory info? return what we've stored so far */ | 1612 | if (parent) { |
1614 | if (maxlen < 5 || !need_parent) | 1613 | data[3] = parent->i_ino; |
1615 | return 3; | 1614 | data[4] = le32_to_cpu(INODE_PKEY(parent)->k_dir_id); |
1616 | 1615 | *lenp = 5; | |
1617 | spin_lock(&dentry->d_lock); | 1616 | if (maxlen >= 6) { |
1618 | inode = dentry->d_parent->d_inode; | 1617 | data[5] = parent->i_generation; |
1619 | data[3] = inode->i_ino; | 1618 | *lenp = 6; |
1620 | data[4] = le32_to_cpu(INODE_PKEY(inode)->k_dir_id); | 1619 | } |
1621 | *lenp = 5; | 1620 | } |
1622 | if (maxlen >= 6) { | ||
1623 | data[5] = inode->i_generation; | ||
1624 | *lenp = 6; | ||
1625 | } | ||
1626 | spin_unlock(&dentry->d_lock); | ||
1627 | return *lenp; | 1621 | return *lenp; |
1628 | } | 1622 | } |
1629 | 1623 | ||