diff options
Diffstat (limited to 'fs/udf/namei.c')
-rw-r--r-- | fs/udf/namei.c | 14 |
1 files changed, 5 insertions, 9 deletions
diff --git a/fs/udf/namei.c b/fs/udf/namei.c index a165c66e3eef..18024178ac4c 100644 --- a/fs/udf/namei.c +++ b/fs/udf/namei.c | |||
@@ -1260,16 +1260,15 @@ static struct dentry *udf_fh_to_parent(struct super_block *sb, | |||
1260 | fid->udf.parent_partref, | 1260 | fid->udf.parent_partref, |
1261 | fid->udf.parent_generation); | 1261 | fid->udf.parent_generation); |
1262 | } | 1262 | } |
1263 | static int udf_encode_fh(struct dentry *de, __u32 *fh, int *lenp, | 1263 | static int udf_encode_fh(struct inode *inode, __u32 *fh, int *lenp, |
1264 | int connectable) | 1264 | struct inode *parent) |
1265 | { | 1265 | { |
1266 | int len = *lenp; | 1266 | int len = *lenp; |
1267 | struct inode *inode = de->d_inode; | ||
1268 | struct kernel_lb_addr location = UDF_I(inode)->i_location; | 1267 | struct kernel_lb_addr location = UDF_I(inode)->i_location; |
1269 | struct fid *fid = (struct fid *)fh; | 1268 | struct fid *fid = (struct fid *)fh; |
1270 | int type = FILEID_UDF_WITHOUT_PARENT; | 1269 | int type = FILEID_UDF_WITHOUT_PARENT; |
1271 | 1270 | ||
1272 | if (connectable && (len < 5)) { | 1271 | if (parent && (len < 5)) { |
1273 | *lenp = 5; | 1272 | *lenp = 5; |
1274 | return 255; | 1273 | return 255; |
1275 | } else if (len < 3) { | 1274 | } else if (len < 3) { |
@@ -1282,14 +1281,11 @@ static int udf_encode_fh(struct dentry *de, __u32 *fh, int *lenp, | |||
1282 | fid->udf.partref = location.partitionReferenceNum; | 1281 | fid->udf.partref = location.partitionReferenceNum; |
1283 | fid->udf.generation = inode->i_generation; | 1282 | fid->udf.generation = inode->i_generation; |
1284 | 1283 | ||
1285 | if (connectable && !S_ISDIR(inode->i_mode)) { | 1284 | if (parent) { |
1286 | spin_lock(&de->d_lock); | 1285 | location = UDF_I(parent)->i_location; |
1287 | inode = de->d_parent->d_inode; | ||
1288 | location = UDF_I(inode)->i_location; | ||
1289 | fid->udf.parent_block = location.logicalBlockNum; | 1286 | fid->udf.parent_block = location.logicalBlockNum; |
1290 | fid->udf.parent_partref = location.partitionReferenceNum; | 1287 | fid->udf.parent_partref = location.partitionReferenceNum; |
1291 | fid->udf.parent_generation = inode->i_generation; | 1288 | fid->udf.parent_generation = inode->i_generation; |
1292 | spin_unlock(&de->d_lock); | ||
1293 | *lenp = 5; | 1289 | *lenp = 5; |
1294 | type = FILEID_UDF_WITH_PARENT; | 1290 | type = FILEID_UDF_WITH_PARENT; |
1295 | } | 1291 | } |