GFS2: Change maxlen variables to size_t
A message that is not in the archive (sent off-list or not yet received): [email protected]
PATCH 1/1 GFS2: Change maxlen variables to size_t
Hi,
This patch changes some variables (especially maxlen in function gfs2_block_map) from unsigned int to size_t. We need 64-bit arithmetic for very large files (e.g. 1PB) where the variables otherwise get shifted to all 0's.
Regards,
Bob Peterson
Red Hat File Systems
---
fs/gfs2/bmap.c +5 -4
@@ -359,7 +359,7 @@ static inline void release_metapath(struct metapath *mp)* Returns: The length of the extent (minimum of one block) */ -static inline unsigned int gfs2_extent_length (void *start,unsigned int len,__be64 *ptr,unsigned limit,int *eob) +static inline unsigned int gfs2_extent_length (void *start,unsigned int len,__be64 *ptr,size_t limit,int *eob) {const __be64 *end = (start + len);const __be64 *first = ptr;
@@ -449,7 +449,7 @@ static int gfs2_bmap_alloc(struct inode *inode, const sector_t lblock, struct buffer_head *bh_map, struct metapath *mp, const unsigned int sheight, const unsigned int height, - const unsigned int maxlen) + const size_t maxlen) { struct gfs2_inode *ip = GFS2_I(inode);struct gfs2_sbd *sdp =GFS2_SB (inode);
@@ -483,7 +483,8 @@ static int gfs2_bmap_alloc(struct inode *inode, const sector_t lblock, }else {/* Need to allocate indirect blocks */ ptrs_per_blk = height >1 ? sdp->sd_inptrs : sdp->sd_diptrs; - dblks =min (maxlen, ptrs_per_blk - mp->mp_list[end_of_metadata]); + dblks =min (maxlen, (size_t )(ptrs_per_blk - + mp->mp_list[end_of_metadata]));if (height == ip->i_height) {/* Writing into existing tree, extend tree down */ iblks = height - sheight;
@@ -605,7 +606,7 @@ int gfs2_block_map(struct inode *inode, sector_t lblock,struct gfs2_inode *ip =GFS2_I (inode);struct gfs2_sbd *sdp =GFS2_SB (inode);unsigned int bsize = sdp->sd_sb.sb_bsize; -const unsigned int maxlen = bh_map->b_size >> inode->i_blkbits; +const size_t maxlen = bh_map->b_size >> inode->i_blkbits;const u64 *arr = sdp->sd_heightsize;__be64 *ptr;u64 size;
PATCH 1/1 GFS2: Change maxlen variables to size_t
Hi,
Quoted 6 lines · Bob Peterson
Hi,
This patch changes some variables (especially maxlen in function
gfs2_block_map) from unsigned int tosize_t. We need 64-bit arithmetic for very large files (e.g. 1PB) where the variables otherwise get shifted to all 0's.
Now in the -nmw tree. Thanks,
Steve.
Quoted 49 lines
Regards,
Bob Peterson
Red Hat File SystemsSigned-off-by Bob Peterson <[email protected]>---
fs/gfs2/bmap.c +5
-4@@ -359,7 +359,7 @@ static inline void release_metapath(struct metapath *mp)* Returns: The length of the extent (minimum of one block) */ -static inline unsigned int gfs2_extent_length (void *start,unsigned int len,__be64 *ptr,unsigned limit,int *eob) +static inline unsigned int gfs2_extent_length (void *start,unsigned int len,__be64 *ptr,size_t limit,int *eob) {const __be64 *end = (start + len);const __be64 *first = ptr;@@ -449,7 +449,7 @@ static int gfs2_bmap_alloc(struct inode *inode, const sector_t lblock, struct buffer_head *bh_map, struct metapath *mp, const unsigned int sheight, const unsigned int height, - const unsigned int maxlen) + const size_t maxlen) { struct gfs2_inode *ip = GFS2_I(inode);struct gfs2_sbd *sdp =GFS2_SB (inode);@@ -483,7 +483,8 @@ static int gfs2_bmap_alloc(struct inode *inode, const sector_t lblock, }else {/* Need to allocate indirect blocks */ ptrs_per_blk = height >1 ? sdp->sd_inptrs : sdp->sd_diptrs; - dblks =min (maxlen, ptrs_per_blk - mp->mp_list[end_of_metadata]); + dblks =min (maxlen, (size_t )(ptrs_per_blk - + mp->mp_list[end_of_metadata]));if (height == ip->i_height) {/* Writing into existing tree, extend tree down */ iblks = height - sheight;@@ -605,7 +606,7 @@ int gfs2_block_map(struct inode *inode, sector_t lblock,struct gfs2_inode *ip =GFS2_I (inode);struct gfs2_sbd *sdp =GFS2_SB (inode);unsigned int bsize = sdp->sd_sb.sb_bsize; -const unsigned int maxlen = bh_map->b_size >> inode->i_blkbits; +const size_t maxlen = bh_map->b_size >> inode->i_blkbits;const u64 *arr = sdp->sd_heightsize;__be64 *ptr;u64 size;