diff options
Diffstat (limited to 'fs/udf/udfdecl.h')
| -rw-r--r-- | fs/udf/udfdecl.h | 57 | 
1 files changed, 26 insertions, 31 deletions
diff --git a/fs/udf/udfdecl.h b/fs/udf/udfdecl.h index 7e258f15b8ef..88692512a466 100644 --- a/fs/udf/udfdecl.h +++ b/fs/udf/udfdecl.h @@ -34,9 +34,6 @@ extern __printf(3, 4) void _udf_warn(struct super_block *sb,  #define udf_debug(fmt, ...)					\  	pr_debug("%s:%d:%s: " fmt, __FILE__, __LINE__, __func__, ##__VA_ARGS__) -#define udf_fixed_to_variable(x) ( ( ( (x) >> 5 ) * 39 ) + ( (x) & 0x0000001F ) ) -#define udf_variable_to_fixed(x) ( ( ( (x) / 39 ) << 5 ) + ( (x) % 39 ) ) -  #define UDF_EXTENT_LENGTH_MASK	0x3FFFFFFF  #define UDF_EXTENT_FLAG_MASK	0xC0000000 @@ -83,14 +80,24 @@ extern const struct inode_operations udf_file_inode_operations;  extern const struct file_operations udf_file_operations;  extern const struct inode_operations udf_symlink_inode_operations;  extern const struct address_space_operations udf_aops; -extern const struct address_space_operations udf_adinicb_aops;  extern const struct address_space_operations udf_symlink_aops; -struct udf_fileident_bh { -	struct buffer_head *sbh; -	struct buffer_head *ebh; -	int soffset; -	int eoffset; +struct udf_fileident_iter { +	struct inode *dir;		/* Directory we are working with */ +	loff_t pos;			/* Logical position in a dir */ +	struct buffer_head *bh[2];	/* Buffer containing 'pos' and possibly +					 * next buffer if entry straddles +					 * blocks */ +	struct kernel_lb_addr eloc;	/* Start of extent containing 'pos' */ +	uint32_t elen;			/* Length of extent containing 'pos' */ +	sector_t loffset;		/* Block offset of 'pos' within above +					 * extent */ +	struct extent_position epos;	/* Position after the above extent */ +	struct fileIdentDesc fi;	/* Copied directory entry */ +	uint8_t *name;			/* Pointer to entry name */ +	uint8_t *namebuf;		/* Storage for entry name in case +					 * the name is split between two blocks +					 */  };  struct udf_vds_record { @@ -121,22 +128,16 @@ struct inode *udf_find_metadata_inode_efe(struct super_block *sb,  					u32 meta_file_loc, u32 partition_num);  /* namei.c */ -extern int udf_write_fi(struct inode *inode, struct fileIdentDesc *, -			struct fileIdentDesc *, struct udf_fileident_bh *, -			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);  } -static inline uint8_t *udf_get_fi_ident(struct fileIdentDesc *fi) -{ -	return ((uint8_t *)(fi + 1)) + le16_to_cpu(fi->lengthOfImpUse); -}  /* file.c */  extern long udf_ioctl(struct file *, unsigned int, unsigned long); +  /* inode.c */  extern struct inode *__udf_iget(struct super_block *, struct kernel_lb_addr *,  				bool hidden_inode); @@ -151,16 +152,14 @@ static inline struct inode *udf_iget(struct super_block *sb,  	return __udf_iget(sb, ino, false);  }  extern int udf_expand_file_adinicb(struct inode *); -extern struct buffer_head *udf_expand_dir_adinicb(struct inode *inode, -						  udf_pblk_t *block, int *err);  extern struct buffer_head *udf_bread(struct inode *inode, udf_pblk_t block,  				      int create, int *err);  extern int udf_setsize(struct inode *, loff_t);  extern void udf_evict_inode(struct inode *);  extern int udf_write_inode(struct inode *, struct writeback_control *wbc); -extern udf_pblk_t udf_block_map(struct inode *inode, sector_t block);  extern int8_t inode_bmap(struct inode *, sector_t, struct extent_position *,  			 struct kernel_lb_addr *, uint32_t *, sector_t *); +int udf_get_block(struct inode *, sector_t, struct buffer_head *, int);  extern int udf_setup_indirect_aext(struct inode *inode, udf_pblk_t block,  				   struct extent_position *epos);  extern int __udf_add_aext(struct inode *inode, struct extent_position *epos, @@ -177,9 +176,6 @@ extern int8_t udf_current_aext(struct inode *, struct extent_position *,  extern void udf_update_extra_perms(struct inode *inode, umode_t mode);  /* misc.c */ -extern struct buffer_head *udf_tgetblk(struct super_block *sb, -					udf_pblk_t block); -extern struct buffer_head *udf_tread(struct super_block *sb, udf_pblk_t block);  extern struct genericFormat *udf_add_extendedattr(struct inode *, uint32_t,  						  uint32_t, uint8_t);  extern struct genericFormat *udf_get_extendedattr(struct inode *, uint32_t, @@ -194,7 +190,7 @@ extern void udf_new_tag(char *, uint16_t, uint16_t, uint16_t, uint32_t, int);  /* lowlevel.c */  extern unsigned int udf_get_last_session(struct super_block *); -extern unsigned long udf_get_last_block(struct super_block *); +udf_pblk_t udf_get_last_block(struct super_block *);  /* partition.c */  extern uint32_t udf_get_pblock(struct super_block *, uint32_t, uint16_t, @@ -243,14 +239,13 @@ extern udf_pblk_t udf_new_block(struct super_block *sb, struct inode *inode,  				 uint16_t partition, uint32_t goal, int *err);  /* directory.c */ -extern struct fileIdentDesc *udf_fileident_read(struct inode *, loff_t *, -						struct udf_fileident_bh *, -						struct fileIdentDesc *, -						struct extent_position *, -						struct kernel_lb_addr *, uint32_t *, -						sector_t *); -extern struct fileIdentDesc *udf_get_fileident(void *buffer, int bufsize, -					       int *offset); +int udf_fiiter_init(struct udf_fileident_iter *iter, struct inode *dir, +		    loff_t pos); +int udf_fiiter_advance(struct udf_fileident_iter *iter); +void udf_fiiter_release(struct udf_fileident_iter *iter); +void udf_fiiter_write_fi(struct udf_fileident_iter *iter, uint8_t *impuse); +void udf_fiiter_update_elen(struct udf_fileident_iter *iter, uint32_t new_elen); +int udf_fiiter_append_blk(struct udf_fileident_iter *iter);  extern struct long_ad *udf_get_filelongad(uint8_t *, int, uint32_t *, int);  extern struct short_ad *udf_get_fileshortad(uint8_t *, int, uint32_t *, int);  |