mirror of
https://github.com/Fishwaldo/linux-bl808.git
synced 2025-06-17 20:25:19 +00:00
udf: cleanup directory offset handling
Position in directory returned by readdir is offset of directory entry divided by four (don't ask me why). Make this conversion only when reading f_pos from userspace / writing it there and internally work in bytes. It makes things more easily readable and also fixes a bug (we forgot to divide length of the entry by 4 when advancing f_pos in udf_add_entry()). Signed-off-by: Jan Kara <jack@suse.cz> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
This commit is contained in:
parent
32a8f24dd7
commit
af793295bf
3 changed files with 24 additions and 30 deletions
|
@ -219,8 +219,8 @@ struct buffer_head *udf_expand_dir_adinicb(struct inode *inode, int *block,
|
|||
struct extent_position epos;
|
||||
|
||||
struct udf_fileident_bh sfibh, dfibh;
|
||||
loff_t f_pos = udf_ext0_offset(inode) >> 2;
|
||||
int size = (udf_ext0_offset(inode) + inode->i_size) >> 2;
|
||||
loff_t f_pos = udf_ext0_offset(inode);
|
||||
int size = udf_ext0_offset(inode) + inode->i_size;
|
||||
struct fileIdentDesc cfi, *sfi, *dfi;
|
||||
struct udf_inode_info *iinfo = UDF_I(inode);
|
||||
|
||||
|
@ -256,11 +256,11 @@ struct buffer_head *udf_expand_dir_adinicb(struct inode *inode, int *block,
|
|||
mark_buffer_dirty_inode(dbh, inode);
|
||||
|
||||
sfibh.soffset = sfibh.eoffset =
|
||||
(f_pos & ((inode->i_sb->s_blocksize - 1) >> 2)) << 2;
|
||||
f_pos & (inode->i_sb->s_blocksize - 1);
|
||||
sfibh.sbh = sfibh.ebh = NULL;
|
||||
dfibh.soffset = dfibh.eoffset = 0;
|
||||
dfibh.sbh = dfibh.ebh = dbh;
|
||||
while ((f_pos < size)) {
|
||||
while (f_pos < size) {
|
||||
iinfo->i_alloc_type = ICBTAG_FLAG_AD_IN_ICB;
|
||||
sfi = udf_fileident_read(inode, &f_pos, &sfibh, &cfi, NULL,
|
||||
NULL, NULL, NULL);
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue