udf: Provide function for calculating dir entry length
Provide function for calculating directory entry length and use to reduce code duplication. Signed-off-by: Jan Kara <jack@suse.cz>hifive-unleashed-5.1
parent
fa65653e57
commit
f2e8334711
|
@ -141,10 +141,7 @@ struct fileIdentDesc *udf_fileident_read(struct inode *dir, loff_t *nf_pos,
|
||||||
fibh->ebh->b_data,
|
fibh->ebh->b_data,
|
||||||
sizeof(struct fileIdentDesc) + fibh->soffset);
|
sizeof(struct fileIdentDesc) + fibh->soffset);
|
||||||
|
|
||||||
fi_len = (sizeof(struct fileIdentDesc) +
|
fi_len = udf_dir_entry_len(cfi);
|
||||||
cfi->lengthFileIdent +
|
|
||||||
le16_to_cpu(cfi->lengthOfImpUse) + 3) & ~3;
|
|
||||||
|
|
||||||
*nf_pos += fi_len - (fibh->eoffset - fibh->soffset);
|
*nf_pos += fi_len - (fibh->eoffset - fibh->soffset);
|
||||||
fibh->eoffset = fibh->soffset + fi_len;
|
fibh->eoffset = fibh->soffset + fi_len;
|
||||||
} else {
|
} else {
|
||||||
|
|
|
@ -351,8 +351,6 @@ static struct fileIdentDesc *udf_add_entry(struct inode *dir,
|
||||||
loff_t f_pos;
|
loff_t f_pos;
|
||||||
loff_t size = udf_ext0_offset(dir) + dir->i_size;
|
loff_t size = udf_ext0_offset(dir) + dir->i_size;
|
||||||
int nfidlen;
|
int nfidlen;
|
||||||
uint8_t lfi;
|
|
||||||
uint16_t liu;
|
|
||||||
udf_pblk_t block;
|
udf_pblk_t block;
|
||||||
struct kernel_lb_addr eloc;
|
struct kernel_lb_addr eloc;
|
||||||
uint32_t elen = 0;
|
uint32_t elen = 0;
|
||||||
|
@ -383,7 +381,7 @@ static struct fileIdentDesc *udf_add_entry(struct inode *dir,
|
||||||
namelen = 0;
|
namelen = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
nfidlen = (sizeof(struct fileIdentDesc) + namelen + 3) & ~3;
|
nfidlen = ALIGN(sizeof(struct fileIdentDesc) + namelen, UDF_NAME_PAD);
|
||||||
|
|
||||||
f_pos = udf_ext0_offset(dir);
|
f_pos = udf_ext0_offset(dir);
|
||||||
|
|
||||||
|
@ -424,12 +422,8 @@ static struct fileIdentDesc *udf_add_entry(struct inode *dir,
|
||||||
goto out_err;
|
goto out_err;
|
||||||
}
|
}
|
||||||
|
|
||||||
liu = le16_to_cpu(cfi->lengthOfImpUse);
|
|
||||||
lfi = cfi->lengthFileIdent;
|
|
||||||
|
|
||||||
if ((cfi->fileCharacteristics & FID_FILE_CHAR_DELETED) != 0) {
|
if ((cfi->fileCharacteristics & FID_FILE_CHAR_DELETED) != 0) {
|
||||||
if (((sizeof(struct fileIdentDesc) +
|
if (udf_dir_entry_len(cfi) == nfidlen) {
|
||||||
liu + lfi + 3) & ~3) == nfidlen) {
|
|
||||||
cfi->descTag.tagSerialNum = cpu_to_le16(1);
|
cfi->descTag.tagSerialNum = cpu_to_le16(1);
|
||||||
cfi->fileVersionNum = cpu_to_le16(1);
|
cfi->fileVersionNum = cpu_to_le16(1);
|
||||||
cfi->fileCharacteristics = 0;
|
cfi->fileCharacteristics = 0;
|
||||||
|
@ -1201,9 +1195,7 @@ static int udf_rename(struct inode *old_dir, struct dentry *old_dentry,
|
||||||
|
|
||||||
if (dir_fi) {
|
if (dir_fi) {
|
||||||
dir_fi->icb.extLocation = cpu_to_lelb(UDF_I(new_dir)->i_location);
|
dir_fi->icb.extLocation = cpu_to_lelb(UDF_I(new_dir)->i_location);
|
||||||
udf_update_tag((char *)dir_fi,
|
udf_update_tag((char *)dir_fi, udf_dir_entry_len(dir_fi));
|
||||||
(sizeof(struct fileIdentDesc) +
|
|
||||||
le16_to_cpu(dir_fi->lengthOfImpUse) + 3) & ~3);
|
|
||||||
if (old_iinfo->i_alloc_type == ICBTAG_FLAG_AD_IN_ICB)
|
if (old_iinfo->i_alloc_type == ICBTAG_FLAG_AD_IN_ICB)
|
||||||
mark_inode_dirty(old_inode);
|
mark_inode_dirty(old_inode);
|
||||||
else
|
else
|
||||||
|
|
|
@ -132,6 +132,12 @@ struct inode *udf_find_metadata_inode_efe(struct super_block *sb,
|
||||||
extern int udf_write_fi(struct inode *inode, struct fileIdentDesc *,
|
extern int udf_write_fi(struct inode *inode, struct fileIdentDesc *,
|
||||||
struct fileIdentDesc *, struct udf_fileident_bh *,
|
struct fileIdentDesc *, struct udf_fileident_bh *,
|
||||||
uint8_t *, uint8_t *);
|
uint8_t *, uint8_t *);
|
||||||
|
static inline unsigned int udf_dir_entry_len(struct fileIdentDesc *cfi)
|
||||||
|
{
|
||||||
|
return ALIGN(sizeof(struct fileIdentDesc) +
|
||||||
|
le16_to_cpu(cfi->lengthOfImpUse) + cfi->lengthFileIdent,
|
||||||
|
UDF_NAME_PAD);
|
||||||
|
}
|
||||||
|
|
||||||
/* file.c */
|
/* file.c */
|
||||||
extern long udf_ioctl(struct file *, unsigned int, unsigned long);
|
extern long udf_ioctl(struct file *, unsigned int, unsigned long);
|
||||||
|
|
Loading…
Reference in New Issue