linux-fsdevel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH] fs: add roundup_to_blocksize and bytes_to_blocks helper functions
@ 2009-04-19 18:42 Marcin Slusarz
  2009-04-19 18:51 ` [PATCH] filesystems: start using roundup_to_blocksize and bytes_to_blocks Marcin Slusarz
  2009-04-22 21:10 ` [PATCH] fs: add roundup_to_blocksize and bytes_to_blocks helper functions Andrew Morton
  0 siblings, 2 replies; 8+ messages in thread
From: Marcin Slusarz @ 2009-04-19 18:42 UTC (permalink / raw)
  To: linux-fsdevel; +Cc: LKML

bytes_to_blocks is open coded in more than 30 places
roundup_to_blocksize is open coded in more than 15 places

Signed-off-by: Marcin Slusarz <marcin.slusarz@gmail.com>
---
 include/linux/fs.h |   12 ++++++++++++
 1 files changed, 12 insertions(+), 0 deletions(-)

diff --git a/include/linux/fs.h b/include/linux/fs.h
index e766be0..1b4e5b6 100644
--- a/include/linux/fs.h
+++ b/include/linux/fs.h
@@ -2451,5 +2451,17 @@ int proc_nr_files(struct ctl_table *table, int write, struct file *filp,
 
 int get_filesystem_list(char * buf);
 
+static inline
+unsigned long long roundup_to_blocksize(unsigned long long bytes, struct super_block *sb)
+{
+	return (bytes + sb->s_blocksize - 1) & ~(sb->s_blocksize - 1);
+}
+
+static inline
+blkcnt_t bytes_to_blocks(unsigned long long bytes, struct super_block *sb)
+{
+	return (bytes + sb->s_blocksize - 1) >> sb->s_blocksize_bits;
+}
+
 #endif /* __KERNEL__ */
 #endif /* _LINUX_FS_H */
-- 
1.6.0.6


^ permalink raw reply related	[flat|nested] 8+ messages in thread

* [PATCH] filesystems: start using roundup_to_blocksize and bytes_to_blocks
  2009-04-19 18:42 [PATCH] fs: add roundup_to_blocksize and bytes_to_blocks helper functions Marcin Slusarz
@ 2009-04-19 18:51 ` Marcin Slusarz
  2009-04-20 19:07   ` Dave Kleikamp
  2009-04-22 21:10 ` [PATCH] fs: add roundup_to_blocksize and bytes_to_blocks helper functions Andrew Morton
  1 sibling, 1 reply; 8+ messages in thread
From: Marcin Slusarz @ 2009-04-19 18:51 UTC (permalink / raw)
  To: linux-fsdevel; +Cc: LKML

Signed-off-by: Marcin Slusarz <marcin.slusarz@gmail.com>
---
If requested I can create one patch per filesystem, but it would be easier
if the first patch could be applied to 2.6.30.
---
 fs/adfs/inode.c         |    3 +-
 fs/btrfs/extent_io.c    |   10 ++----
 fs/btrfs/ioctl.c        |    2 +-
 fs/fat/cache.c          |    7 +---
 fs/hfs/extent.c         |    2 +-
 fs/hfs/inode.c          |    2 +-
 fs/hfsplus/extents.c    |    2 +-
 fs/hfsplus/inode.c      |    2 +-
 fs/jfs/xattr.c          |   25 +++++-----------
 fs/minix/itree_common.c |    2 +-
 fs/nfs/super.c          |   10 ++----
 fs/nilfs2/inode.c       |    4 +--
 fs/ntfs/aops.c          |    6 ++--
 fs/ocfs2/namei.c        |    2 +-
 fs/reiserfs/inode.c     |    5 +--
 fs/sysv/itree.c         |    7 +---
 fs/udf/inode.c          |   74 ++++++++++++++++++++--------------------------
 fs/udf/namei.c          |    2 +-
 fs/udf/truncate.c       |    9 ++----
 19 files changed, 67 insertions(+), 109 deletions(-)

diff --git a/fs/adfs/inode.c b/fs/adfs/inode.c
index e647200..8baec96 100644
--- a/fs/adfs/inode.c
+++ b/fs/adfs/inode.c
@@ -273,8 +273,7 @@ adfs_iget(struct super_block *sb, struct object_info *obj)
 	inode->i_ino	 = obj->file_id;
 	inode->i_size	 = obj->size;
 	inode->i_nlink	 = 2;
-	inode->i_blocks	 = (inode->i_size + sb->s_blocksize - 1) >>
-			    sb->s_blocksize_bits;
+	inode->i_blocks	 = bytes_to_blocks(inode->i_size, sb);
 
 	/*
 	 * we need to save the parent directory ID so that
diff --git a/fs/btrfs/extent_io.c b/fs/btrfs/extent_io.c
index eb2bee8..582bf76 100644
--- a/fs/btrfs/extent_io.c
+++ b/fs/btrfs/extent_io.c
@@ -1959,7 +1959,6 @@ static int __extent_read_full_page(struct extent_io_tree *tree,
 	size_t page_offset = 0;
 	size_t iosize;
 	size_t disk_io_size;
-	size_t blocksize = inode->i_sb->s_blocksize;
 	unsigned long this_bio_flag = 0;
 
 	set_page_extent_mapped(page);
@@ -2008,7 +2007,7 @@ static int __extent_read_full_page(struct extent_io_tree *tree,
 
 		iosize = min(extent_map_end(em) - cur, end - cur + 1);
 		cur_end = min(extent_map_end(em) - 1, end);
-		iosize = (iosize + blocksize - 1) & ~((u64)blocksize - 1);
+		iosize = roundup_to_blocksize(iosize, inode->i_sb);
 		if (this_bio_flag & EXTENT_BIO_COMPRESSED) {
 			disk_io_size = em->block_len;
 			sector = em->block_start >> 9;
@@ -2129,7 +2128,6 @@ static int __extent_writepage(struct page *page, struct writeback_control *wbc,
 	int ret;
 	int nr = 0;
 	size_t pg_offset = 0;
-	size_t blocksize;
 	loff_t i_size = i_size_read(inode);
 	unsigned long end_index = i_size >> PAGE_CACHE_SHIFT;
 	u64 nr_delalloc;
@@ -2221,7 +2219,6 @@ static int __extent_writepage(struct page *page, struct writeback_control *wbc,
 	}
 
 	set_extent_uptodate(tree, start, page_end, GFP_NOFS);
-	blocksize = inode->i_sb->s_blocksize;
 
 	while (cur <= end) {
 		if (cur >= last_byte) {
@@ -2244,7 +2241,7 @@ static int __extent_writepage(struct page *page, struct writeback_control *wbc,
 		BUG_ON(extent_map_end(em) <= cur);
 		BUG_ON(end < cur);
 		iosize = min(extent_map_end(em) - cur, end - cur + 1);
-		iosize = (iosize + blocksize - 1) & ~((u64)blocksize - 1);
+		iosize = roundup_to_blocksize(iosize, inode->i_sb);
 		sector = (em->block_start + extent_offset) >> 9;
 		bdev = em->bdev;
 		block_start = em->block_start;
@@ -2616,9 +2613,8 @@ int extent_invalidatepage(struct extent_io_tree *tree,
 {
 	u64 start = ((u64)page->index << PAGE_CACHE_SHIFT);
 	u64 end = start + PAGE_CACHE_SIZE - 1;
-	size_t blocksize = page->mapping->host->i_sb->s_blocksize;
 
-	start += (offset + blocksize - 1) & ~(blocksize - 1);
+	start += roundup_to_blocksize(offset, page->mapping->host->i_sb);
 	if (start > end)
 		return 0;
 
diff --git a/fs/btrfs/ioctl.c b/fs/btrfs/ioctl.c
index 7594bec..1eeedbe 100644
--- a/fs/btrfs/ioctl.c
+++ b/fs/btrfs/ioctl.c
@@ -804,7 +804,7 @@ static long btrfs_ioctl_clone(struct file *file, unsigned long srcfd,
 		olen = len = src->i_size - off;
 	/* if we extend to eof, continue to block boundary */
 	if (off + len == src->i_size)
-		len = ((src->i_size + bs-1) & ~(bs-1))
+		len = roundup_to_blocksize(src->i_size, root->fs_info->sb)
 			- off;
 
 	/* verify the end result is block aligned */
diff --git a/fs/fat/cache.c b/fs/fat/cache.c
index b426022..93fe0ce 100644
--- a/fs/fat/cache.c
+++ b/fs/fat/cache.c
@@ -297,8 +297,6 @@ int fat_bmap(struct inode *inode, sector_t sector, sector_t *phys,
 {
 	struct super_block *sb = inode->i_sb;
 	struct msdos_sb_info *sbi = MSDOS_SB(sb);
-	const unsigned long blocksize = sb->s_blocksize;
-	const unsigned char blocksize_bits = sb->s_blocksize_bits;
 	sector_t last_block;
 	int cluster, offset;
 
@@ -312,7 +310,7 @@ int fat_bmap(struct inode *inode, sector_t sector, sector_t *phys,
 		return 0;
 	}
 
-	last_block = (i_size_read(inode) + (blocksize - 1)) >> blocksize_bits;
+	last_block = bytes_to_blocks(i_size_read(inode), inode->i_sb);
 	if (sector >= last_block) {
 		if (!create)
 			return 0;
@@ -321,8 +319,7 @@ int fat_bmap(struct inode *inode, sector_t sector, sector_t *phys,
 		 * ->mmu_private can access on only allocation path.
 		 * (caller must hold ->i_mutex)
 		 */
-		last_block = (MSDOS_I(inode)->mmu_private + (blocksize - 1))
-			>> blocksize_bits;
+		last_block = bytes_to_blocks(MSDOS_I(inode)->mmu_private, inode->i_sb);
 		if (sector >= last_block)
 			return 0;
 	}
diff --git a/fs/hfs/extent.c b/fs/hfs/extent.c
index 2c16316..6b0860d 100644
--- a/fs/hfs/extent.c
+++ b/fs/hfs/extent.c
@@ -519,7 +519,7 @@ void hfs_file_truncate(struct inode *inode)
 	HFS_I(inode)->alloc_blocks = blk_cnt;
 out:
 	HFS_I(inode)->phys_size = inode->i_size;
-	HFS_I(inode)->fs_blocks = (inode->i_size + sb->s_blocksize - 1) >> sb->s_blocksize_bits;
+	HFS_I(inode)->fs_blocks = bytes_to_blocks(inode->i_size, sb);
 	inode_set_bytes(inode, HFS_I(inode)->fs_blocks << sb->s_blocksize_bits);
 	mark_inode_dirty(inode);
 }
diff --git a/fs/hfs/inode.c b/fs/hfs/inode.c
index a1cbff2..25b1e2a 100644
--- a/fs/hfs/inode.c
+++ b/fs/hfs/inode.c
@@ -243,7 +243,7 @@ void hfs_inode_read_fork(struct inode *inode, struct hfs_extent *ext,
 	HFS_I(inode)->first_blocks = count;
 
 	inode->i_size = HFS_I(inode)->phys_size = log_size;
-	HFS_I(inode)->fs_blocks = (log_size + sb->s_blocksize - 1) >> sb->s_blocksize_bits;
+	HFS_I(inode)->fs_blocks = bytes_to_blocks(log_size, sb);
 	inode_set_bytes(inode, HFS_I(inode)->fs_blocks << sb->s_blocksize_bits);
 	HFS_I(inode)->alloc_blocks = be32_to_cpu(phys_size) /
 				     HFS_SB(sb)->alloc_blksz;
diff --git a/fs/hfsplus/extents.c b/fs/hfsplus/extents.c
index 0022eec..9245716 100644
--- a/fs/hfsplus/extents.c
+++ b/fs/hfsplus/extents.c
@@ -500,7 +500,7 @@ void hfsplus_file_truncate(struct inode *inode)
 	HFSPLUS_I(inode).alloc_blocks = blk_cnt;
 out:
 	HFSPLUS_I(inode).phys_size = inode->i_size;
-	HFSPLUS_I(inode).fs_blocks = (inode->i_size + sb->s_blocksize - 1) >> sb->s_blocksize_bits;
+	HFSPLUS_I(inode).fs_blocks = bytes_to_blocks(inode->i_size, sb);
 	inode_set_bytes(inode, HFSPLUS_I(inode).fs_blocks << sb->s_blocksize_bits);
 	mark_inode_dirty(inode);
 }
diff --git a/fs/hfsplus/inode.c b/fs/hfsplus/inode.c
index 1bcf597..0c95bd5 100644
--- a/fs/hfsplus/inode.c
+++ b/fs/hfsplus/inode.c
@@ -377,7 +377,7 @@ void hfsplus_inode_read_fork(struct inode *inode, struct hfsplus_fork_raw *fork)
 
 	HFSPLUS_I(inode).alloc_blocks = be32_to_cpu(fork->total_blocks);
 	inode->i_size = HFSPLUS_I(inode).phys_size = be64_to_cpu(fork->total_size);
-	HFSPLUS_I(inode).fs_blocks = (inode->i_size + sb->s_blocksize - 1) >> sb->s_blocksize_bits;
+	HFSPLUS_I(inode).fs_blocks = bytes_to_blocks(inode->i_size, sb);
 	inode_set_bytes(inode, HFSPLUS_I(inode).fs_blocks << sb->s_blocksize_bits);
 	HFSPLUS_I(inode).clump_blocks = be32_to_cpu(fork->clump_size) >> HFSPLUS_SB(sb).alloc_blksz_shift;
 	if (!HFSPLUS_I(inode).clump_blocks)
diff --git a/fs/jfs/xattr.c b/fs/jfs/xattr.c
index 61dfa81..59aefb1 100644
--- a/fs/jfs/xattr.c
+++ b/fs/jfs/xattr.c
@@ -257,7 +257,7 @@ static int ea_write(struct inode *ip, struct jfs_ea_list *ealist, int size,
 	}
 
 	/* figure out how many blocks we need */
-	nblocks = (size + (sb->s_blocksize - 1)) >> sb->s_blocksize_bits;
+	nblocks = bytes_to_blocks(size, sb);
 
 	/* Allocate new blocks to quota. */
 	if (vfs_dq_alloc_block(ip, nblocks)) {
@@ -284,9 +284,7 @@ static int ea_write(struct inode *ip, struct jfs_ea_list *ealist, int size,
 		 * the nearest aggregate block size
 		 */
 		nb = min(PSIZE, nbytes);
-		bytes_to_write =
-		    ((((nb + sb->s_blocksize - 1)) >> sb->s_blocksize_bits))
-		    << sb->s_blocksize_bits;
+		bytes_to_write = roundup_to_blocksize(nb, sb);
 
 		if (!(mp = get_metapage(ip, blkno + i, bytes_to_write, 1))) {
 			rc = -EIO;
@@ -424,9 +422,7 @@ static int ea_read(struct inode *ip, struct jfs_ea_list *ealist)
 		 * the nearest aggregate block size
 		 */
 		nb = min(PSIZE, nbytes);
-		bytes_to_read =
-		    ((((nb + sb->s_blocksize - 1)) >> sb->s_blocksize_bits))
-		    << sb->s_blocksize_bits;
+		bytes_to_read = roundup_to_blocksize(nb, sb);
 
 		if (!(mp = read_metapage(ip, blkno + i, bytes_to_read, 1)))
 			return -EIO;
@@ -505,8 +501,7 @@ static int ea_get(struct inode *inode, struct ea_buffer *ea_buf, int min_size)
 			jfs_error(sb, "ea_get: invalid ea.flag)");
 			return -EIO;
 		}
-		current_blocks = (ea_size + sb->s_blocksize - 1) >>
-		    sb->s_blocksize_bits;
+		current_blocks = bytes_to_blocks(ea_size, sb);
 	}
 	size = max(min_size, ea_size);
 
@@ -520,8 +515,7 @@ static int ea_get(struct inode *inode, struct ea_buffer *ea_buf, int min_size)
 			return -ENOMEM;
 
 		ea_buf->flag = EA_MALLOC;
-		ea_buf->max_size = (size + sb->s_blocksize - 1) &
-		    ~(sb->s_blocksize - 1);
+		ea_buf->max_size = roundup_to_blocksize(size, sb);
 
 		if (ea_size == 0)
 			return 0;
@@ -533,8 +527,7 @@ static int ea_get(struct inode *inode, struct ea_buffer *ea_buf, int min_size)
 		}
 		goto size_check;
 	}
-	blocks_needed = (min_size + sb->s_blocksize - 1) >>
-	    sb->s_blocksize_bits;
+	blocks_needed = bytes_to_blocks(min_size, sb);
 
 	if (blocks_needed > current_blocks) {
 		/* Allocate new blocks to quota. */
@@ -564,8 +557,7 @@ static int ea_get(struct inode *inode, struct ea_buffer *ea_buf, int min_size)
 			goto clean_up;
 		}
 		ea_buf->xattr = ea_buf->mp->data;
-		ea_buf->max_size = (min_size + sb->s_blocksize - 1) &
-		    ~(sb->s_blocksize - 1);
+		ea_buf->max_size = roundup_to_blocksize(min_size, sb);
 		if (ea_size == 0)
 			return 0;
 		if ((rc = ea_read(inode, ea_buf->xattr))) {
@@ -584,8 +576,7 @@ static int ea_get(struct inode *inode, struct ea_buffer *ea_buf, int min_size)
 		goto clean_up;
 	}
 	ea_buf->xattr = ea_buf->mp->data;
-	ea_buf->max_size = (ea_size + sb->s_blocksize - 1) &
-	    ~(sb->s_blocksize - 1);
+	ea_buf->max_size = roundup_to_blocksize(ea_size, sb);
 
       size_check:
 	if (EALIST_SIZE(ea_buf->xattr) != ea_size) {
diff --git a/fs/minix/itree_common.c b/fs/minix/itree_common.c
index a731cab..52832b4 100644
--- a/fs/minix/itree_common.c
+++ b/fs/minix/itree_common.c
@@ -302,7 +302,7 @@ static inline void truncate (struct inode * inode)
 	int first_whole;
 	long iblock;
 
-	iblock = (inode->i_size + sb->s_blocksize -1) >> sb->s_blocksize_bits;
+	iblock = bytes_to_blocks(inode->i_size, sb);
 	block_truncate_page(inode->i_mapping, inode->i_size, get_block);
 
 	n = block_to_path(inode, iblock, offsets);
diff --git a/fs/nfs/super.c b/fs/nfs/super.c
index 6717200..b9be272 100644
--- a/fs/nfs/super.c
+++ b/fs/nfs/super.c
@@ -385,8 +385,6 @@ void nfs_sb_deactive(struct super_block *sb)
 static int nfs_statfs(struct dentry *dentry, struct kstatfs *buf)
 {
 	struct nfs_server *server = NFS_SB(dentry->d_sb);
-	unsigned char blockbits;
-	unsigned long blockres;
 	struct nfs_fh *fh = NFS_FH(dentry->d_inode);
 	struct nfs_fattr fattr;
 	struct nfs_fsstat res = {
@@ -414,11 +412,9 @@ static int nfs_statfs(struct dentry *dentry, struct kstatfs *buf)
 	 * fields in units of f_bsize.
 	 */
 	buf->f_bsize = dentry->d_sb->s_blocksize;
-	blockbits = dentry->d_sb->s_blocksize_bits;
-	blockres = (1 << blockbits) - 1;
-	buf->f_blocks = (res.tbytes + blockres) >> blockbits;
-	buf->f_bfree = (res.fbytes + blockres) >> blockbits;
-	buf->f_bavail = (res.abytes + blockres) >> blockbits;
+	buf->f_blocks = roundup_to_blocksize(res.tbytes, dentry->d_sb);
+	buf->f_bfree = roundup_to_blocksize(res.fbytes, dentry->d_sb);
+	buf->f_bavail = roundup_to_blocksize(res.abytes, dentry->d_sb);
 
 	buf->f_files = res.tfiles;
 	buf->f_ffree = res.afiles;
diff --git a/fs/nilfs2/inode.c b/fs/nilfs2/inode.c
index 49ab4a4..0fae142 100644
--- a/fs/nilfs2/inode.c
+++ b/fs/nilfs2/inode.c
@@ -581,7 +581,6 @@ static void nilfs_truncate_bmap(struct nilfs_inode_info *ii,
 void nilfs_truncate(struct inode *inode)
 {
 	unsigned long blkoff;
-	unsigned int blocksize;
 	struct nilfs_transaction_info ti;
 	struct super_block *sb = inode->i_sb;
 	struct nilfs_inode_info *ii = NILFS_I(inode);
@@ -591,8 +590,7 @@ void nilfs_truncate(struct inode *inode)
 	if (IS_APPEND(inode) || IS_IMMUTABLE(inode))
 		return;
 
-	blocksize = sb->s_blocksize;
-	blkoff = (inode->i_size + blocksize - 1) >> sb->s_blocksize_bits;
+	blkoff = bytes_to_blocks(inode->i_size, sb);
 	nilfs_transaction_begin(sb, &ti, 0); /* never fails */
 
 	block_truncate_page(inode->i_mapping, inode->i_size, nilfs_get_block);
diff --git a/fs/ntfs/aops.c b/fs/ntfs/aops.c
index b38f944..3316812 100644
--- a/fs/ntfs/aops.c
+++ b/fs/ntfs/aops.c
@@ -231,7 +231,7 @@ static int ntfs_read_block(struct page *page)
 	 */
 	iblock = (s64)page->index << (PAGE_CACHE_SHIFT - blocksize_bits);
 	read_lock_irqsave(&ni->size_lock, flags);
-	lblock = (ni->allocated_size + blocksize - 1) >> blocksize_bits;
+	lblock = bytes_to_blocks(ni->allocated_size, vol->sb);
 	init_size = ni->initialized_size;
 	i_size = i_size_read(vi);
 	read_unlock_irqrestore(&ni->size_lock, flags);
@@ -239,7 +239,7 @@ static int ntfs_read_block(struct page *page)
 		/* Race with shrinking truncate. */
 		init_size = i_size;
 	}
-	zblock = (init_size + blocksize - 1) >> blocksize_bits;
+	zblock = bytes_to_blocks(init_size, vol->sb);
 
 	/* Loop through all the buffers in the page. */
 	rl = NULL;
@@ -970,7 +970,7 @@ static int ntfs_write_mst_block(struct page *page,
 			(PAGE_CACHE_SHIFT - bh_size_bits);
 
 	/* The first out of bounds block for the data size. */
-	dblock = (i_size_read(vi) + bh_size - 1) >> bh_size_bits;
+	dblock = bytes_to_blocks(i_size_read(vi), vol->sb);
 
 	rl = NULL;
 	err = err2 = nr_bhs = nr_recs = nr_locked_nis = 0;
diff --git a/fs/ocfs2/namei.c b/fs/ocfs2/namei.c
index 2220f93..51ca438 100644
--- a/fs/ocfs2/namei.c
+++ b/fs/ocfs2/namei.c
@@ -1481,7 +1481,7 @@ static int ocfs2_create_symlink_data(struct ocfs2_super *osb,
 	bytes_left = i_size_read(inode) + 1;
 	/* we can't trust i_blocks because we're actually going to
 	 * write i_size + 1 bytes. */
-	blocks = (bytes_left + sb->s_blocksize - 1) >> sb->s_blocksize_bits;
+	blocks = bytes_to_blocks(bytes_left, sb);
 
 	mlog_entry("i_blocks = %llu, i_size = %llu, blocks = %d\n",
 			(unsigned long long)inode->i_blocks,
diff --git a/fs/reiserfs/inode.c b/fs/reiserfs/inode.c
index 6fd0f47..6f1616f 100644
--- a/fs/reiserfs/inode.c
+++ b/fs/reiserfs/inode.c
@@ -1053,7 +1053,6 @@ reiserfs_readpages(struct file *file, struct address_space *mapping,
 static int real_space_diff(struct inode *inode, int sd_size)
 {
 	int bytes;
-	loff_t blocksize = inode->i_sb->s_blocksize;
 
 	if (S_ISLNK(inode->i_mode) || S_ISDIR(inode->i_mode))
 		return sd_size;
@@ -1066,9 +1065,7 @@ static int real_space_diff(struct inode *inode, int sd_size)
 	 ** tail, we add 4 bytes to pretend there really is an unformatted
 	 ** node pointer
 	 */
-	bytes =
-	    ((inode->i_size +
-	      (blocksize - 1)) >> inode->i_sb->s_blocksize_bits) * UNFM_P_SIZE +
+	bytes = bytes_to_blocks(inode->i_size, inode->i_sb) * UNFM_P_SIZE +
 	    sd_size;
 	return bytes;
 }
diff --git a/fs/sysv/itree.c b/fs/sysv/itree.c
index f042eec..f221b6b 100644
--- a/fs/sysv/itree.c
+++ b/fs/sysv/itree.c
@@ -369,15 +369,12 @@ void sysv_truncate (struct inode * inode)
 	sysv_zone_t nr = 0;
 	int n;
 	long iblock;
-	unsigned blocksize;
 
 	if (!(S_ISREG(inode->i_mode) || S_ISDIR(inode->i_mode) ||
 	    S_ISLNK(inode->i_mode)))
 		return;
 
-	blocksize = inode->i_sb->s_blocksize;
-	iblock = (inode->i_size + blocksize-1)
-					>> inode->i_sb->s_blocksize_bits;
+	iblock = bytes_to_blocks(inode->i_size, inode->i_sb);
 
 	block_truncate_page(inode->i_mapping, inode->i_size, get_block);
 
@@ -430,7 +427,7 @@ static unsigned sysv_nblocks(struct super_block *s, loff_t size)
 	struct sysv_sb_info *sbi = SYSV_SB(s);
 	int ptrs_bits = sbi->s_ind_per_block_bits;
 	unsigned blocks, res, direct = DIRECT, i = DEPTH;
-	blocks = (size + s->s_blocksize - 1) >> s->s_blocksize_bits;
+	blocks = bytes_to_blocks(size, s);
 	res = blocks;
 	while (--i && blocks > direct) {
 		blocks = ((blocks - direct - 1) >> ptrs_bits) + 1;
diff --git a/fs/udf/inode.c b/fs/udf/inode.c
index e7533f7..55b20e2 100644
--- a/fs/udf/inode.c
+++ b/fs/udf/inode.c
@@ -376,13 +376,9 @@ int udf_extend_file(struct inode *inode, struct extent_position *last_pos,
 	iinfo = UDF_I(inode);
 	/* Round the last extent up to a multiple of block size */
 	if (last_ext->extLength & (sb->s_blocksize - 1)) {
-		last_ext->extLength =
-			(last_ext->extLength & UDF_EXTENT_FLAG_MASK) |
-			(((last_ext->extLength & UDF_EXTENT_LENGTH_MASK) +
-			  sb->s_blocksize - 1) & ~(sb->s_blocksize - 1));
-		iinfo->i_lenExtents =
-			(iinfo->i_lenExtents + sb->s_blocksize - 1) &
-			~(sb->s_blocksize - 1);
+		last_ext->extLength = (last_ext->extLength & UDF_EXTENT_FLAG_MASK) |
+			roundup_to_blocksize(last_ext->extLength & UDF_EXTENT_LENGTH_MASK, sb);
+		iinfo->i_lenExtents = roundup_to_blocksize(iinfo->i_lenExtents, sb);
 	}
 
 	/* Last extent are just preallocated blocks? */
@@ -527,8 +523,7 @@ static struct buffer_head *inode_getblk(struct inode *inode, sector_t block,
 
 		if (etype != (EXT_NOT_RECORDED_NOT_ALLOCATED >> 30))
 			pgoal = eloc.logicalBlockNum +
-				((elen + inode->i_sb->s_blocksize - 1) >>
-				 inode->i_sb->s_blocksize_bits);
+				bytes_to_blocks(elen, inode->i_sb);
 
 		count++;
 	} while (lbcount + elen <= b_off);
@@ -548,8 +543,7 @@ static struct buffer_head *inode_getblk(struct inode *inode, sector_t block,
 	if (etype == (EXT_RECORDED_ALLOCATED >> 30)) {
 		if (elen & (inode->i_sb->s_blocksize - 1)) {
 			elen = EXT_RECORDED_ALLOCATED |
-				((elen + inode->i_sb->s_blocksize - 1) &
-				 ~(inode->i_sb->s_blocksize - 1));
+				roundup_to_blocksize(elen, inode->i_sb);
 			etype = udf_write_aext(inode, &cur_epos, &eloc, elen, 1);
 		}
 		brelse(prev_epos.bh);
@@ -709,8 +703,9 @@ static void udf_split_extents(struct inode *inode, int *c, int offset,
 	    (laarr[*c].extLength >> 30) ==
 				(EXT_NOT_RECORDED_NOT_ALLOCATED >> 30)) {
 		int curr = *c;
-		int blen = ((laarr[curr].extLength & UDF_EXTENT_LENGTH_MASK) +
-			    blocksize - 1) >> blocksize_bits;
+		int blen = bytes_to_blocks(
+				laarr[curr].extLength & UDF_EXTENT_LENGTH_MASK,
+				inode->i_sb);
 		int8_t etype = (laarr[curr].extLength >> 30);
 
 		if (blen == 1)
@@ -778,10 +773,8 @@ static void udf_prealloc_extents(struct inode *inode, int c, int lastblock,
 					(EXT_NOT_RECORDED_ALLOCATED >> 30)) {
 			start = c + 1;
 			length = currlength =
-				(((laarr[c + 1].extLength &
-					UDF_EXTENT_LENGTH_MASK) +
-				inode->i_sb->s_blocksize - 1) >>
-				inode->i_sb->s_blocksize_bits);
+				bytes_to_blocks(laarr[c + 1].extLength &
+					UDF_EXTENT_LENGTH_MASK, inode->i_sb);
 		} else
 			start = c;
 	}
@@ -792,19 +785,17 @@ static void udf_prealloc_extents(struct inode *inode, int c, int lastblock,
 				length += UDF_DEFAULT_PREALLOC_BLOCKS;
 		} else if ((laarr[i].extLength >> 30) ==
 				(EXT_NOT_RECORDED_NOT_ALLOCATED >> 30)) {
-			length += (((laarr[i].extLength &
-						UDF_EXTENT_LENGTH_MASK) +
-				    inode->i_sb->s_blocksize - 1) >>
-				    inode->i_sb->s_blocksize_bits);
+			length += bytes_to_blocks(laarr[i].extLength &
+						UDF_EXTENT_LENGTH_MASK,
+						inode->i_sb);
 		} else
 			break;
 	}
 
 	if (length) {
 		int next = laarr[start].extLocation.logicalBlockNum +
-			(((laarr[start].extLength & UDF_EXTENT_LENGTH_MASK) +
-			  inode->i_sb->s_blocksize - 1) >>
-			  inode->i_sb->s_blocksize_bits);
+			bytes_to_blocks(laarr[start].extLength &
+					UDF_EXTENT_LENGTH_MASK, inode->i_sb);
 		int numalloc = udf_prealloc_blocks(inode->i_sb, inode,
 				laarr[start].extLocation.partitionReferenceNum,
 				next, (UDF_DEFAULT_PREALLOC_BLOCKS > length ?
@@ -831,10 +822,9 @@ static void udf_prealloc_extents(struct inode *inode, int c, int lastblock,
 			}
 
 			for (i = start + 1; numalloc && i < *endnum; i++) {
-				int elen = ((laarr[i].extLength &
-						UDF_EXTENT_LENGTH_MASK) +
-					    inode->i_sb->s_blocksize - 1) >>
-					    inode->i_sb->s_blocksize_bits;
+				int elen = bytes_to_blocks(laarr[i].extLength &
+						UDF_EXTENT_LENGTH_MASK,
+						inode->i_sb);
 
 				if (elen > numalloc) {
 					laarr[i].extLength -=
@@ -875,8 +865,9 @@ static void udf_merge_extents(struct inode *inode,
 				(EXT_NOT_RECORDED_NOT_ALLOCATED >> 30)) ||
 			((lip1->extLocation.logicalBlockNum -
 			  li->extLocation.logicalBlockNum) ==
-			(((li->extLength & UDF_EXTENT_LENGTH_MASK) +
-			blocksize - 1) >> blocksize_bits)))) {
+					bytes_to_blocks(li->extLength &
+							UDF_EXTENT_LENGTH_MASK,
+							inode->i_sb)))) {
 
 			if (((li->extLength & UDF_EXTENT_LENGTH_MASK) +
 				(lip1->extLength & UDF_EXTENT_LENGTH_MASK) +
@@ -897,9 +888,9 @@ static void udf_merge_extents(struct inode *inode,
 						blocksize_bits);
 			} else {
 				li->extLength = lip1->extLength +
-					(((li->extLength &
-						UDF_EXTENT_LENGTH_MASK) +
-					 blocksize - 1) & ~(blocksize - 1));
+					roundup_to_blocksize(li->extLength &
+						UDF_EXTENT_LENGTH_MASK,
+						inode->i_sb);
 				if (*endnum > (i + 2))
 					memmove(&laarr[i + 1], &laarr[i + 2],
 						sizeof(struct long_ad) *
@@ -912,9 +903,8 @@ static void udf_merge_extents(struct inode *inode,
 			   ((lip1->extLength >> 30) ==
 				(EXT_NOT_RECORDED_NOT_ALLOCATED >> 30))) {
 			udf_free_blocks(inode->i_sb, inode, &li->extLocation, 0,
-					((li->extLength &
-					  UDF_EXTENT_LENGTH_MASK) +
-					 blocksize - 1) >> blocksize_bits);
+					bytes_to_blocks(li->extLength &
+					  UDF_EXTENT_LENGTH_MASK, inode->i_sb));
 			li->extLocation.logicalBlockNum = 0;
 			li->extLocation.partitionReferenceNum = 0;
 
@@ -932,9 +922,9 @@ static void udf_merge_extents(struct inode *inode,
 						blocksize;
 			} else {
 				li->extLength = lip1->extLength +
-					(((li->extLength &
-						UDF_EXTENT_LENGTH_MASK) +
-					  blocksize - 1) & ~(blocksize - 1));
+					roundup_to_blocksize(li->extLength &
+						UDF_EXTENT_LENGTH_MASK,
+						inode->i_sb);
 				if (*endnum > (i + 2))
 					memmove(&laarr[i + 1], &laarr[i + 2],
 						sizeof(struct long_ad) *
@@ -946,9 +936,9 @@ static void udf_merge_extents(struct inode *inode,
 					(EXT_NOT_RECORDED_ALLOCATED >> 30)) {
 			udf_free_blocks(inode->i_sb, inode,
 					&li->extLocation, 0,
-					((li->extLength &
-						UDF_EXTENT_LENGTH_MASK) +
-					 blocksize - 1) >> blocksize_bits);
+					bytes_to_blocks(li->extLength &
+						UDF_EXTENT_LENGTH_MASK,
+						inode->i_sb));
 			li->extLocation.logicalBlockNum = 0;
 			li->extLocation.partitionReferenceNum = 0;
 			li->extLength = (li->extLength &
diff --git a/fs/udf/namei.c b/fs/udf/namei.c
index 6a29fa3..78550ef 100644
--- a/fs/udf/namei.c
+++ b/fs/udf/namei.c
@@ -410,7 +410,7 @@ static struct fileIdentDesc *udf_add_entry(struct inode *dir,
 add:
 	/* Is there any extent whose size we need to round up? */
 	if (dinfo->i_alloc_type != ICBTAG_FLAG_AD_IN_ICB && elen) {
-		elen = (elen + sb->s_blocksize - 1) & ~(sb->s_blocksize - 1);
+		elen = roundup_to_blocksize(elen, sb);
 		if (dinfo->i_alloc_type == ICBTAG_FLAG_AD_SHORT)
 			epos.offset -= sizeof(struct short_ad);
 		else if (dinfo->i_alloc_type == ICBTAG_FLAG_AD_LONG)
diff --git a/fs/udf/truncate.c b/fs/udf/truncate.c
index 225527c..6fa3839 100644
--- a/fs/udf/truncate.c
+++ b/fs/udf/truncate.c
@@ -32,10 +32,8 @@ static void extent_trunc(struct inode *inode, struct extent_position *epos,
 			 uint32_t nelen)
 {
 	struct kernel_lb_addr neloc = {};
-	int last_block = (elen + inode->i_sb->s_blocksize - 1) >>
-		inode->i_sb->s_blocksize_bits;
-	int first_block = (nelen + inode->i_sb->s_blocksize - 1) >>
-		inode->i_sb->s_blocksize_bits;
+	int last_block = bytes_to_blocks(elen, inode->i_sb);
+	int first_block = bytes_to_blocks(nelen, inode->i_sb);
 
 	if (nelen) {
 		if (etype == (EXT_NOT_RECORDED_ALLOCATED >> 30)) {
@@ -256,8 +254,7 @@ void udf_truncate_extents(struct inode *inode)
 						udf_get_lb_pblock(sb, &eloc, 0));
 				if (elen)
 					indirect_ext_len =
-						(elen + sb->s_blocksize - 1) >>
-						sb->s_blocksize_bits;
+						bytes_to_blocks(elen, sb);
 				else
 					indirect_ext_len = 1;
 			} else {
-- 
1.6.0.6



^ permalink raw reply related	[flat|nested] 8+ messages in thread

* Re: [PATCH] filesystems: start using roundup_to_blocksize and bytes_to_blocks
  2009-04-19 18:51 ` [PATCH] filesystems: start using roundup_to_blocksize and bytes_to_blocks Marcin Slusarz
@ 2009-04-20 19:07   ` Dave Kleikamp
  2009-04-20 20:22     ` Dave Kleikamp
  0 siblings, 1 reply; 8+ messages in thread
From: Dave Kleikamp @ 2009-04-20 19:07 UTC (permalink / raw)
  To: Marcin Slusarz; +Cc: linux-fsdevel, LKML

Looks good from a jfs perspective.  Really cleans up that code.

On Sun, 2009-04-19 at 20:51 +0200, Marcin Slusarz wrote:
> Signed-off-by: Marcin Slusarz <marcin.slusarz@gmail.com>
Signed-off-by: Dave Kleikamp <shaggy@linux.vnet.ibm.com>

> ---
> If requested I can create one patch per filesystem, but it would be easier
> if the first patch could be applied to 2.6.30.

If the first patch goes in by itself, I'd be happy to break out and push
the jfs piece.

Thanks,
Shaggy

> ---
>  fs/adfs/inode.c         |    3 +-
>  fs/btrfs/extent_io.c    |   10 ++----
>  fs/btrfs/ioctl.c        |    2 +-
>  fs/fat/cache.c          |    7 +---
>  fs/hfs/extent.c         |    2 +-
>  fs/hfs/inode.c          |    2 +-
>  fs/hfsplus/extents.c    |    2 +-
>  fs/hfsplus/inode.c      |    2 +-
>  fs/jfs/xattr.c          |   25 +++++-----------
>  fs/minix/itree_common.c |    2 +-
>  fs/nfs/super.c          |   10 ++----
>  fs/nilfs2/inode.c       |    4 +--
>  fs/ntfs/aops.c          |    6 ++--
>  fs/ocfs2/namei.c        |    2 +-
>  fs/reiserfs/inode.c     |    5 +--
>  fs/sysv/itree.c         |    7 +---
>  fs/udf/inode.c          |   74 ++++++++++++++++++++--------------------------
>  fs/udf/namei.c          |    2 +-
>  fs/udf/truncate.c       |    9 ++----
>  19 files changed, 67 insertions(+), 109 deletions(-)
> 
> diff --git a/fs/adfs/inode.c b/fs/adfs/inode.c
> index e647200..8baec96 100644
> --- a/fs/adfs/inode.c
> +++ b/fs/adfs/inode.c
> @@ -273,8 +273,7 @@ adfs_iget(struct super_block *sb, struct object_info *obj)
>  	inode->i_ino	 = obj->file_id;
>  	inode->i_size	 = obj->size;
>  	inode->i_nlink	 = 2;
> -	inode->i_blocks	 = (inode->i_size + sb->s_blocksize - 1) >>
> -			    sb->s_blocksize_bits;
> +	inode->i_blocks	 = bytes_to_blocks(inode->i_size, sb);
> 
>  	/*
>  	 * we need to save the parent directory ID so that
> diff --git a/fs/btrfs/extent_io.c b/fs/btrfs/extent_io.c
> index eb2bee8..582bf76 100644
> --- a/fs/btrfs/extent_io.c
> +++ b/fs/btrfs/extent_io.c
> @@ -1959,7 +1959,6 @@ static int __extent_read_full_page(struct extent_io_tree *tree,
>  	size_t page_offset = 0;
>  	size_t iosize;
>  	size_t disk_io_size;
> -	size_t blocksize = inode->i_sb->s_blocksize;
>  	unsigned long this_bio_flag = 0;
> 
>  	set_page_extent_mapped(page);
> @@ -2008,7 +2007,7 @@ static int __extent_read_full_page(struct extent_io_tree *tree,
> 
>  		iosize = min(extent_map_end(em) - cur, end - cur + 1);
>  		cur_end = min(extent_map_end(em) - 1, end);
> -		iosize = (iosize + blocksize - 1) & ~((u64)blocksize - 1);
> +		iosize = roundup_to_blocksize(iosize, inode->i_sb);
>  		if (this_bio_flag & EXTENT_BIO_COMPRESSED) {
>  			disk_io_size = em->block_len;
>  			sector = em->block_start >> 9;
> @@ -2129,7 +2128,6 @@ static int __extent_writepage(struct page *page, struct writeback_control *wbc,
>  	int ret;
>  	int nr = 0;
>  	size_t pg_offset = 0;
> -	size_t blocksize;
>  	loff_t i_size = i_size_read(inode);
>  	unsigned long end_index = i_size >> PAGE_CACHE_SHIFT;
>  	u64 nr_delalloc;
> @@ -2221,7 +2219,6 @@ static int __extent_writepage(struct page *page, struct writeback_control *wbc,
>  	}
> 
>  	set_extent_uptodate(tree, start, page_end, GFP_NOFS);
> -	blocksize = inode->i_sb->s_blocksize;
> 
>  	while (cur <= end) {
>  		if (cur >= last_byte) {
> @@ -2244,7 +2241,7 @@ static int __extent_writepage(struct page *page, struct writeback_control *wbc,
>  		BUG_ON(extent_map_end(em) <= cur);
>  		BUG_ON(end < cur);
>  		iosize = min(extent_map_end(em) - cur, end - cur + 1);
> -		iosize = (iosize + blocksize - 1) & ~((u64)blocksize - 1);
> +		iosize = roundup_to_blocksize(iosize, inode->i_sb);
>  		sector = (em->block_start + extent_offset) >> 9;
>  		bdev = em->bdev;
>  		block_start = em->block_start;
> @@ -2616,9 +2613,8 @@ int extent_invalidatepage(struct extent_io_tree *tree,
>  {
>  	u64 start = ((u64)page->index << PAGE_CACHE_SHIFT);
>  	u64 end = start + PAGE_CACHE_SIZE - 1;
> -	size_t blocksize = page->mapping->host->i_sb->s_blocksize;
> 
> -	start += (offset + blocksize - 1) & ~(blocksize - 1);
> +	start += roundup_to_blocksize(offset, page->mapping->host->i_sb);
>  	if (start > end)
>  		return 0;
> 
> diff --git a/fs/btrfs/ioctl.c b/fs/btrfs/ioctl.c
> index 7594bec..1eeedbe 100644
> --- a/fs/btrfs/ioctl.c
> +++ b/fs/btrfs/ioctl.c
> @@ -804,7 +804,7 @@ static long btrfs_ioctl_clone(struct file *file, unsigned long srcfd,
>  		olen = len = src->i_size - off;
>  	/* if we extend to eof, continue to block boundary */
>  	if (off + len == src->i_size)
> -		len = ((src->i_size + bs-1) & ~(bs-1))
> +		len = roundup_to_blocksize(src->i_size, root->fs_info->sb)
>  			- off;
> 
>  	/* verify the end result is block aligned */
> diff --git a/fs/fat/cache.c b/fs/fat/cache.c
> index b426022..93fe0ce 100644
> --- a/fs/fat/cache.c
> +++ b/fs/fat/cache.c
> @@ -297,8 +297,6 @@ int fat_bmap(struct inode *inode, sector_t sector, sector_t *phys,
>  {
>  	struct super_block *sb = inode->i_sb;
>  	struct msdos_sb_info *sbi = MSDOS_SB(sb);
> -	const unsigned long blocksize = sb->s_blocksize;
> -	const unsigned char blocksize_bits = sb->s_blocksize_bits;
>  	sector_t last_block;
>  	int cluster, offset;
> 
> @@ -312,7 +310,7 @@ int fat_bmap(struct inode *inode, sector_t sector, sector_t *phys,
>  		return 0;
>  	}
> 
> -	last_block = (i_size_read(inode) + (blocksize - 1)) >> blocksize_bits;
> +	last_block = bytes_to_blocks(i_size_read(inode), inode->i_sb);
>  	if (sector >= last_block) {
>  		if (!create)
>  			return 0;
> @@ -321,8 +319,7 @@ int fat_bmap(struct inode *inode, sector_t sector, sector_t *phys,
>  		 * ->mmu_private can access on only allocation path.
>  		 * (caller must hold ->i_mutex)
>  		 */
> -		last_block = (MSDOS_I(inode)->mmu_private + (blocksize - 1))
> -			>> blocksize_bits;
> +		last_block = bytes_to_blocks(MSDOS_I(inode)->mmu_private, inode->i_sb);
>  		if (sector >= last_block)
>  			return 0;
>  	}
> diff --git a/fs/hfs/extent.c b/fs/hfs/extent.c
> index 2c16316..6b0860d 100644
> --- a/fs/hfs/extent.c
> +++ b/fs/hfs/extent.c
> @@ -519,7 +519,7 @@ void hfs_file_truncate(struct inode *inode)
>  	HFS_I(inode)->alloc_blocks = blk_cnt;
>  out:
>  	HFS_I(inode)->phys_size = inode->i_size;
> -	HFS_I(inode)->fs_blocks = (inode->i_size + sb->s_blocksize - 1) >> sb->s_blocksize_bits;
> +	HFS_I(inode)->fs_blocks = bytes_to_blocks(inode->i_size, sb);
>  	inode_set_bytes(inode, HFS_I(inode)->fs_blocks << sb->s_blocksize_bits);
>  	mark_inode_dirty(inode);
>  }
> diff --git a/fs/hfs/inode.c b/fs/hfs/inode.c
> index a1cbff2..25b1e2a 100644
> --- a/fs/hfs/inode.c
> +++ b/fs/hfs/inode.c
> @@ -243,7 +243,7 @@ void hfs_inode_read_fork(struct inode *inode, struct hfs_extent *ext,
>  	HFS_I(inode)->first_blocks = count;
> 
>  	inode->i_size = HFS_I(inode)->phys_size = log_size;
> -	HFS_I(inode)->fs_blocks = (log_size + sb->s_blocksize - 1) >> sb->s_blocksize_bits;
> +	HFS_I(inode)->fs_blocks = bytes_to_blocks(log_size, sb);
>  	inode_set_bytes(inode, HFS_I(inode)->fs_blocks << sb->s_blocksize_bits);
>  	HFS_I(inode)->alloc_blocks = be32_to_cpu(phys_size) /
>  				     HFS_SB(sb)->alloc_blksz;
> diff --git a/fs/hfsplus/extents.c b/fs/hfsplus/extents.c
> index 0022eec..9245716 100644
> --- a/fs/hfsplus/extents.c
> +++ b/fs/hfsplus/extents.c
> @@ -500,7 +500,7 @@ void hfsplus_file_truncate(struct inode *inode)
>  	HFSPLUS_I(inode).alloc_blocks = blk_cnt;
>  out:
>  	HFSPLUS_I(inode).phys_size = inode->i_size;
> -	HFSPLUS_I(inode).fs_blocks = (inode->i_size + sb->s_blocksize - 1) >> sb->s_blocksize_bits;
> +	HFSPLUS_I(inode).fs_blocks = bytes_to_blocks(inode->i_size, sb);
>  	inode_set_bytes(inode, HFSPLUS_I(inode).fs_blocks << sb->s_blocksize_bits);
>  	mark_inode_dirty(inode);
>  }
> diff --git a/fs/hfsplus/inode.c b/fs/hfsplus/inode.c
> index 1bcf597..0c95bd5 100644
> --- a/fs/hfsplus/inode.c
> +++ b/fs/hfsplus/inode.c
> @@ -377,7 +377,7 @@ void hfsplus_inode_read_fork(struct inode *inode, struct hfsplus_fork_raw *fork)
> 
>  	HFSPLUS_I(inode).alloc_blocks = be32_to_cpu(fork->total_blocks);
>  	inode->i_size = HFSPLUS_I(inode).phys_size = be64_to_cpu(fork->total_size);
> -	HFSPLUS_I(inode).fs_blocks = (inode->i_size + sb->s_blocksize - 1) >> sb->s_blocksize_bits;
> +	HFSPLUS_I(inode).fs_blocks = bytes_to_blocks(inode->i_size, sb);
>  	inode_set_bytes(inode, HFSPLUS_I(inode).fs_blocks << sb->s_blocksize_bits);
>  	HFSPLUS_I(inode).clump_blocks = be32_to_cpu(fork->clump_size) >> HFSPLUS_SB(sb).alloc_blksz_shift;
>  	if (!HFSPLUS_I(inode).clump_blocks)
> diff --git a/fs/jfs/xattr.c b/fs/jfs/xattr.c
> index 61dfa81..59aefb1 100644
> --- a/fs/jfs/xattr.c
> +++ b/fs/jfs/xattr.c
> @@ -257,7 +257,7 @@ static int ea_write(struct inode *ip, struct jfs_ea_list *ealist, int size,
>  	}
> 
>  	/* figure out how many blocks we need */
> -	nblocks = (size + (sb->s_blocksize - 1)) >> sb->s_blocksize_bits;
> +	nblocks = bytes_to_blocks(size, sb);
> 
>  	/* Allocate new blocks to quota. */
>  	if (vfs_dq_alloc_block(ip, nblocks)) {
> @@ -284,9 +284,7 @@ static int ea_write(struct inode *ip, struct jfs_ea_list *ealist, int size,
>  		 * the nearest aggregate block size
>  		 */
>  		nb = min(PSIZE, nbytes);
> -		bytes_to_write =
> -		    ((((nb + sb->s_blocksize - 1)) >> sb->s_blocksize_bits))
> -		    << sb->s_blocksize_bits;
> +		bytes_to_write = roundup_to_blocksize(nb, sb);
> 
>  		if (!(mp = get_metapage(ip, blkno + i, bytes_to_write, 1))) {
>  			rc = -EIO;
> @@ -424,9 +422,7 @@ static int ea_read(struct inode *ip, struct jfs_ea_list *ealist)
>  		 * the nearest aggregate block size
>  		 */
>  		nb = min(PSIZE, nbytes);
> -		bytes_to_read =
> -		    ((((nb + sb->s_blocksize - 1)) >> sb->s_blocksize_bits))
> -		    << sb->s_blocksize_bits;
> +		bytes_to_read = roundup_to_blocksize(nb, sb);
> 
>  		if (!(mp = read_metapage(ip, blkno + i, bytes_to_read, 1)))
>  			return -EIO;
> @@ -505,8 +501,7 @@ static int ea_get(struct inode *inode, struct ea_buffer *ea_buf, int min_size)
>  			jfs_error(sb, "ea_get: invalid ea.flag)");
>  			return -EIO;
>  		}
> -		current_blocks = (ea_size + sb->s_blocksize - 1) >>
> -		    sb->s_blocksize_bits;
> +		current_blocks = bytes_to_blocks(ea_size, sb);
>  	}
>  	size = max(min_size, ea_size);
> 
> @@ -520,8 +515,7 @@ static int ea_get(struct inode *inode, struct ea_buffer *ea_buf, int min_size)
>  			return -ENOMEM;
> 
>  		ea_buf->flag = EA_MALLOC;
> -		ea_buf->max_size = (size + sb->s_blocksize - 1) &
> -		    ~(sb->s_blocksize - 1);
> +		ea_buf->max_size = roundup_to_blocksize(size, sb);
> 
>  		if (ea_size == 0)
>  			return 0;
> @@ -533,8 +527,7 @@ static int ea_get(struct inode *inode, struct ea_buffer *ea_buf, int min_size)
>  		}
>  		goto size_check;
>  	}
> -	blocks_needed = (min_size + sb->s_blocksize - 1) >>
> -	    sb->s_blocksize_bits;
> +	blocks_needed = bytes_to_blocks(min_size, sb);
> 
>  	if (blocks_needed > current_blocks) {
>  		/* Allocate new blocks to quota. */
> @@ -564,8 +557,7 @@ static int ea_get(struct inode *inode, struct ea_buffer *ea_buf, int min_size)
>  			goto clean_up;
>  		}
>  		ea_buf->xattr = ea_buf->mp->data;
> -		ea_buf->max_size = (min_size + sb->s_blocksize - 1) &
> -		    ~(sb->s_blocksize - 1);
> +		ea_buf->max_size = roundup_to_blocksize(min_size, sb);
>  		if (ea_size == 0)
>  			return 0;
>  		if ((rc = ea_read(inode, ea_buf->xattr))) {
> @@ -584,8 +576,7 @@ static int ea_get(struct inode *inode, struct ea_buffer *ea_buf, int min_size)
>  		goto clean_up;
>  	}
>  	ea_buf->xattr = ea_buf->mp->data;
> -	ea_buf->max_size = (ea_size + sb->s_blocksize - 1) &
> -	    ~(sb->s_blocksize - 1);
> +	ea_buf->max_size = roundup_to_blocksize(ea_size, sb);
> 
>        size_check:
>  	if (EALIST_SIZE(ea_buf->xattr) != ea_size) {
> diff --git a/fs/minix/itree_common.c b/fs/minix/itree_common.c
> index a731cab..52832b4 100644
> --- a/fs/minix/itree_common.c
> +++ b/fs/minix/itree_common.c
> @@ -302,7 +302,7 @@ static inline void truncate (struct inode * inode)
>  	int first_whole;
>  	long iblock;
> 
> -	iblock = (inode->i_size + sb->s_blocksize -1) >> sb->s_blocksize_bits;
> +	iblock = bytes_to_blocks(inode->i_size, sb);
>  	block_truncate_page(inode->i_mapping, inode->i_size, get_block);
> 
>  	n = block_to_path(inode, iblock, offsets);
> diff --git a/fs/nfs/super.c b/fs/nfs/super.c
> index 6717200..b9be272 100644
> --- a/fs/nfs/super.c
> +++ b/fs/nfs/super.c
> @@ -385,8 +385,6 @@ void nfs_sb_deactive(struct super_block *sb)
>  static int nfs_statfs(struct dentry *dentry, struct kstatfs *buf)
>  {
>  	struct nfs_server *server = NFS_SB(dentry->d_sb);
> -	unsigned char blockbits;
> -	unsigned long blockres;
>  	struct nfs_fh *fh = NFS_FH(dentry->d_inode);
>  	struct nfs_fattr fattr;
>  	struct nfs_fsstat res = {
> @@ -414,11 +412,9 @@ static int nfs_statfs(struct dentry *dentry, struct kstatfs *buf)
>  	 * fields in units of f_bsize.
>  	 */
>  	buf->f_bsize = dentry->d_sb->s_blocksize;
> -	blockbits = dentry->d_sb->s_blocksize_bits;
> -	blockres = (1 << blockbits) - 1;
> -	buf->f_blocks = (res.tbytes + blockres) >> blockbits;
> -	buf->f_bfree = (res.fbytes + blockres) >> blockbits;
> -	buf->f_bavail = (res.abytes + blockres) >> blockbits;
> +	buf->f_blocks = roundup_to_blocksize(res.tbytes, dentry->d_sb);
> +	buf->f_bfree = roundup_to_blocksize(res.fbytes, dentry->d_sb);
> +	buf->f_bavail = roundup_to_blocksize(res.abytes, dentry->d_sb);
> 
>  	buf->f_files = res.tfiles;
>  	buf->f_ffree = res.afiles;
> diff --git a/fs/nilfs2/inode.c b/fs/nilfs2/inode.c
> index 49ab4a4..0fae142 100644
> --- a/fs/nilfs2/inode.c
> +++ b/fs/nilfs2/inode.c
> @@ -581,7 +581,6 @@ static void nilfs_truncate_bmap(struct nilfs_inode_info *ii,
>  void nilfs_truncate(struct inode *inode)
>  {
>  	unsigned long blkoff;
> -	unsigned int blocksize;
>  	struct nilfs_transaction_info ti;
>  	struct super_block *sb = inode->i_sb;
>  	struct nilfs_inode_info *ii = NILFS_I(inode);
> @@ -591,8 +590,7 @@ void nilfs_truncate(struct inode *inode)
>  	if (IS_APPEND(inode) || IS_IMMUTABLE(inode))
>  		return;
> 
> -	blocksize = sb->s_blocksize;
> -	blkoff = (inode->i_size + blocksize - 1) >> sb->s_blocksize_bits;
> +	blkoff = bytes_to_blocks(inode->i_size, sb);
>  	nilfs_transaction_begin(sb, &ti, 0); /* never fails */
> 
>  	block_truncate_page(inode->i_mapping, inode->i_size, nilfs_get_block);
> diff --git a/fs/ntfs/aops.c b/fs/ntfs/aops.c
> index b38f944..3316812 100644
> --- a/fs/ntfs/aops.c
> +++ b/fs/ntfs/aops.c
> @@ -231,7 +231,7 @@ static int ntfs_read_block(struct page *page)
>  	 */
>  	iblock = (s64)page->index << (PAGE_CACHE_SHIFT - blocksize_bits);
>  	read_lock_irqsave(&ni->size_lock, flags);
> -	lblock = (ni->allocated_size + blocksize - 1) >> blocksize_bits;
> +	lblock = bytes_to_blocks(ni->allocated_size, vol->sb);
>  	init_size = ni->initialized_size;
>  	i_size = i_size_read(vi);
>  	read_unlock_irqrestore(&ni->size_lock, flags);
> @@ -239,7 +239,7 @@ static int ntfs_read_block(struct page *page)
>  		/* Race with shrinking truncate. */
>  		init_size = i_size;
>  	}
> -	zblock = (init_size + blocksize - 1) >> blocksize_bits;
> +	zblock = bytes_to_blocks(init_size, vol->sb);
> 
>  	/* Loop through all the buffers in the page. */
>  	rl = NULL;
> @@ -970,7 +970,7 @@ static int ntfs_write_mst_block(struct page *page,
>  			(PAGE_CACHE_SHIFT - bh_size_bits);
> 
>  	/* The first out of bounds block for the data size. */
> -	dblock = (i_size_read(vi) + bh_size - 1) >> bh_size_bits;
> +	dblock = bytes_to_blocks(i_size_read(vi), vol->sb);
> 
>  	rl = NULL;
>  	err = err2 = nr_bhs = nr_recs = nr_locked_nis = 0;
> diff --git a/fs/ocfs2/namei.c b/fs/ocfs2/namei.c
> index 2220f93..51ca438 100644
> --- a/fs/ocfs2/namei.c
> +++ b/fs/ocfs2/namei.c
> @@ -1481,7 +1481,7 @@ static int ocfs2_create_symlink_data(struct ocfs2_super *osb,
>  	bytes_left = i_size_read(inode) + 1;
>  	/* we can't trust i_blocks because we're actually going to
>  	 * write i_size + 1 bytes. */
> -	blocks = (bytes_left + sb->s_blocksize - 1) >> sb->s_blocksize_bits;
> +	blocks = bytes_to_blocks(bytes_left, sb);
> 
>  	mlog_entry("i_blocks = %llu, i_size = %llu, blocks = %d\n",
>  			(unsigned long long)inode->i_blocks,
> diff --git a/fs/reiserfs/inode.c b/fs/reiserfs/inode.c
> index 6fd0f47..6f1616f 100644
> --- a/fs/reiserfs/inode.c
> +++ b/fs/reiserfs/inode.c
> @@ -1053,7 +1053,6 @@ reiserfs_readpages(struct file *file, struct address_space *mapping,
>  static int real_space_diff(struct inode *inode, int sd_size)
>  {
>  	int bytes;
> -	loff_t blocksize = inode->i_sb->s_blocksize;
> 
>  	if (S_ISLNK(inode->i_mode) || S_ISDIR(inode->i_mode))
>  		return sd_size;
> @@ -1066,9 +1065,7 @@ static int real_space_diff(struct inode *inode, int sd_size)
>  	 ** tail, we add 4 bytes to pretend there really is an unformatted
>  	 ** node pointer
>  	 */
> -	bytes =
> -	    ((inode->i_size +
> -	      (blocksize - 1)) >> inode->i_sb->s_blocksize_bits) * UNFM_P_SIZE +
> +	bytes = bytes_to_blocks(inode->i_size, inode->i_sb) * UNFM_P_SIZE +
>  	    sd_size;
>  	return bytes;
>  }
> diff --git a/fs/sysv/itree.c b/fs/sysv/itree.c
> index f042eec..f221b6b 100644
> --- a/fs/sysv/itree.c
> +++ b/fs/sysv/itree.c
> @@ -369,15 +369,12 @@ void sysv_truncate (struct inode * inode)
>  	sysv_zone_t nr = 0;
>  	int n;
>  	long iblock;
> -	unsigned blocksize;
> 
>  	if (!(S_ISREG(inode->i_mode) || S_ISDIR(inode->i_mode) ||
>  	    S_ISLNK(inode->i_mode)))
>  		return;
> 
> -	blocksize = inode->i_sb->s_blocksize;
> -	iblock = (inode->i_size + blocksize-1)
> -					>> inode->i_sb->s_blocksize_bits;
> +	iblock = bytes_to_blocks(inode->i_size, inode->i_sb);
> 
>  	block_truncate_page(inode->i_mapping, inode->i_size, get_block);
> 
> @@ -430,7 +427,7 @@ static unsigned sysv_nblocks(struct super_block *s, loff_t size)
>  	struct sysv_sb_info *sbi = SYSV_SB(s);
>  	int ptrs_bits = sbi->s_ind_per_block_bits;
>  	unsigned blocks, res, direct = DIRECT, i = DEPTH;
> -	blocks = (size + s->s_blocksize - 1) >> s->s_blocksize_bits;
> +	blocks = bytes_to_blocks(size, s);
>  	res = blocks;
>  	while (--i && blocks > direct) {
>  		blocks = ((blocks - direct - 1) >> ptrs_bits) + 1;
> diff --git a/fs/udf/inode.c b/fs/udf/inode.c
> index e7533f7..55b20e2 100644
> --- a/fs/udf/inode.c
> +++ b/fs/udf/inode.c
> @@ -376,13 +376,9 @@ int udf_extend_file(struct inode *inode, struct extent_position *last_pos,
>  	iinfo = UDF_I(inode);
>  	/* Round the last extent up to a multiple of block size */
>  	if (last_ext->extLength & (sb->s_blocksize - 1)) {
> -		last_ext->extLength =
> -			(last_ext->extLength & UDF_EXTENT_FLAG_MASK) |
> -			(((last_ext->extLength & UDF_EXTENT_LENGTH_MASK) +
> -			  sb->s_blocksize - 1) & ~(sb->s_blocksize - 1));
> -		iinfo->i_lenExtents =
> -			(iinfo->i_lenExtents + sb->s_blocksize - 1) &
> -			~(sb->s_blocksize - 1);
> +		last_ext->extLength = (last_ext->extLength & UDF_EXTENT_FLAG_MASK) |
> +			roundup_to_blocksize(last_ext->extLength & UDF_EXTENT_LENGTH_MASK, sb);
> +		iinfo->i_lenExtents = roundup_to_blocksize(iinfo->i_lenExtents, sb);
>  	}
> 
>  	/* Last extent are just preallocated blocks? */
> @@ -527,8 +523,7 @@ static struct buffer_head *inode_getblk(struct inode *inode, sector_t block,
> 
>  		if (etype != (EXT_NOT_RECORDED_NOT_ALLOCATED >> 30))
>  			pgoal = eloc.logicalBlockNum +
> -				((elen + inode->i_sb->s_blocksize - 1) >>
> -				 inode->i_sb->s_blocksize_bits);
> +				bytes_to_blocks(elen, inode->i_sb);
> 
>  		count++;
>  	} while (lbcount + elen <= b_off);
> @@ -548,8 +543,7 @@ static struct buffer_head *inode_getblk(struct inode *inode, sector_t block,
>  	if (etype == (EXT_RECORDED_ALLOCATED >> 30)) {
>  		if (elen & (inode->i_sb->s_blocksize - 1)) {
>  			elen = EXT_RECORDED_ALLOCATED |
> -				((elen + inode->i_sb->s_blocksize - 1) &
> -				 ~(inode->i_sb->s_blocksize - 1));
> +				roundup_to_blocksize(elen, inode->i_sb);
>  			etype = udf_write_aext(inode, &cur_epos, &eloc, elen, 1);
>  		}
>  		brelse(prev_epos.bh);
> @@ -709,8 +703,9 @@ static void udf_split_extents(struct inode *inode, int *c, int offset,
>  	    (laarr[*c].extLength >> 30) ==
>  				(EXT_NOT_RECORDED_NOT_ALLOCATED >> 30)) {
>  		int curr = *c;
> -		int blen = ((laarr[curr].extLength & UDF_EXTENT_LENGTH_MASK) +
> -			    blocksize - 1) >> blocksize_bits;
> +		int blen = bytes_to_blocks(
> +				laarr[curr].extLength & UDF_EXTENT_LENGTH_MASK,
> +				inode->i_sb);
>  		int8_t etype = (laarr[curr].extLength >> 30);
> 
>  		if (blen == 1)
> @@ -778,10 +773,8 @@ static void udf_prealloc_extents(struct inode *inode, int c, int lastblock,
>  					(EXT_NOT_RECORDED_ALLOCATED >> 30)) {
>  			start = c + 1;
>  			length = currlength =
> -				(((laarr[c + 1].extLength &
> -					UDF_EXTENT_LENGTH_MASK) +
> -				inode->i_sb->s_blocksize - 1) >>
> -				inode->i_sb->s_blocksize_bits);
> +				bytes_to_blocks(laarr[c + 1].extLength &
> +					UDF_EXTENT_LENGTH_MASK, inode->i_sb);
>  		} else
>  			start = c;
>  	}
> @@ -792,19 +785,17 @@ static void udf_prealloc_extents(struct inode *inode, int c, int lastblock,
>  				length += UDF_DEFAULT_PREALLOC_BLOCKS;
>  		} else if ((laarr[i].extLength >> 30) ==
>  				(EXT_NOT_RECORDED_NOT_ALLOCATED >> 30)) {
> -			length += (((laarr[i].extLength &
> -						UDF_EXTENT_LENGTH_MASK) +
> -				    inode->i_sb->s_blocksize - 1) >>
> -				    inode->i_sb->s_blocksize_bits);
> +			length += bytes_to_blocks(laarr[i].extLength &
> +						UDF_EXTENT_LENGTH_MASK,
> +						inode->i_sb);
>  		} else
>  			break;
>  	}
> 
>  	if (length) {
>  		int next = laarr[start].extLocation.logicalBlockNum +
> -			(((laarr[start].extLength & UDF_EXTENT_LENGTH_MASK) +
> -			  inode->i_sb->s_blocksize - 1) >>
> -			  inode->i_sb->s_blocksize_bits);
> +			bytes_to_blocks(laarr[start].extLength &
> +					UDF_EXTENT_LENGTH_MASK, inode->i_sb);
>  		int numalloc = udf_prealloc_blocks(inode->i_sb, inode,
>  				laarr[start].extLocation.partitionReferenceNum,
>  				next, (UDF_DEFAULT_PREALLOC_BLOCKS > length ?
> @@ -831,10 +822,9 @@ static void udf_prealloc_extents(struct inode *inode, int c, int lastblock,
>  			}
> 
>  			for (i = start + 1; numalloc && i < *endnum; i++) {
> -				int elen = ((laarr[i].extLength &
> -						UDF_EXTENT_LENGTH_MASK) +
> -					    inode->i_sb->s_blocksize - 1) >>
> -					    inode->i_sb->s_blocksize_bits;
> +				int elen = bytes_to_blocks(laarr[i].extLength &
> +						UDF_EXTENT_LENGTH_MASK,
> +						inode->i_sb);
> 
>  				if (elen > numalloc) {
>  					laarr[i].extLength -=
> @@ -875,8 +865,9 @@ static void udf_merge_extents(struct inode *inode,
>  				(EXT_NOT_RECORDED_NOT_ALLOCATED >> 30)) ||
>  			((lip1->extLocation.logicalBlockNum -
>  			  li->extLocation.logicalBlockNum) ==
> -			(((li->extLength & UDF_EXTENT_LENGTH_MASK) +
> -			blocksize - 1) >> blocksize_bits)))) {
> +					bytes_to_blocks(li->extLength &
> +							UDF_EXTENT_LENGTH_MASK,
> +							inode->i_sb)))) {
> 
>  			if (((li->extLength & UDF_EXTENT_LENGTH_MASK) +
>  				(lip1->extLength & UDF_EXTENT_LENGTH_MASK) +
> @@ -897,9 +888,9 @@ static void udf_merge_extents(struct inode *inode,
>  						blocksize_bits);
>  			} else {
>  				li->extLength = lip1->extLength +
> -					(((li->extLength &
> -						UDF_EXTENT_LENGTH_MASK) +
> -					 blocksize - 1) & ~(blocksize - 1));
> +					roundup_to_blocksize(li->extLength &
> +						UDF_EXTENT_LENGTH_MASK,
> +						inode->i_sb);
>  				if (*endnum > (i + 2))
>  					memmove(&laarr[i + 1], &laarr[i + 2],
>  						sizeof(struct long_ad) *
> @@ -912,9 +903,8 @@ static void udf_merge_extents(struct inode *inode,
>  			   ((lip1->extLength >> 30) ==
>  				(EXT_NOT_RECORDED_NOT_ALLOCATED >> 30))) {
>  			udf_free_blocks(inode->i_sb, inode, &li->extLocation, 0,
> -					((li->extLength &
> -					  UDF_EXTENT_LENGTH_MASK) +
> -					 blocksize - 1) >> blocksize_bits);
> +					bytes_to_blocks(li->extLength &
> +					  UDF_EXTENT_LENGTH_MASK, inode->i_sb));
>  			li->extLocation.logicalBlockNum = 0;
>  			li->extLocation.partitionReferenceNum = 0;
> 
> @@ -932,9 +922,9 @@ static void udf_merge_extents(struct inode *inode,
>  						blocksize;
>  			} else {
>  				li->extLength = lip1->extLength +
> -					(((li->extLength &
> -						UDF_EXTENT_LENGTH_MASK) +
> -					  blocksize - 1) & ~(blocksize - 1));
> +					roundup_to_blocksize(li->extLength &
> +						UDF_EXTENT_LENGTH_MASK,
> +						inode->i_sb);
>  				if (*endnum > (i + 2))
>  					memmove(&laarr[i + 1], &laarr[i + 2],
>  						sizeof(struct long_ad) *
> @@ -946,9 +936,9 @@ static void udf_merge_extents(struct inode *inode,
>  					(EXT_NOT_RECORDED_ALLOCATED >> 30)) {
>  			udf_free_blocks(inode->i_sb, inode,
>  					&li->extLocation, 0,
> -					((li->extLength &
> -						UDF_EXTENT_LENGTH_MASK) +
> -					 blocksize - 1) >> blocksize_bits);
> +					bytes_to_blocks(li->extLength &
> +						UDF_EXTENT_LENGTH_MASK,
> +						inode->i_sb));
>  			li->extLocation.logicalBlockNum = 0;
>  			li->extLocation.partitionReferenceNum = 0;
>  			li->extLength = (li->extLength &
> diff --git a/fs/udf/namei.c b/fs/udf/namei.c
> index 6a29fa3..78550ef 100644
> --- a/fs/udf/namei.c
> +++ b/fs/udf/namei.c
> @@ -410,7 +410,7 @@ static struct fileIdentDesc *udf_add_entry(struct inode *dir,
>  add:
>  	/* Is there any extent whose size we need to round up? */
>  	if (dinfo->i_alloc_type != ICBTAG_FLAG_AD_IN_ICB && elen) {
> -		elen = (elen + sb->s_blocksize - 1) & ~(sb->s_blocksize - 1);
> +		elen = roundup_to_blocksize(elen, sb);
>  		if (dinfo->i_alloc_type == ICBTAG_FLAG_AD_SHORT)
>  			epos.offset -= sizeof(struct short_ad);
>  		else if (dinfo->i_alloc_type == ICBTAG_FLAG_AD_LONG)
> diff --git a/fs/udf/truncate.c b/fs/udf/truncate.c
> index 225527c..6fa3839 100644
> --- a/fs/udf/truncate.c
> +++ b/fs/udf/truncate.c
> @@ -32,10 +32,8 @@ static void extent_trunc(struct inode *inode, struct extent_position *epos,
>  			 uint32_t nelen)
>  {
>  	struct kernel_lb_addr neloc = {};
> -	int last_block = (elen + inode->i_sb->s_blocksize - 1) >>
> -		inode->i_sb->s_blocksize_bits;
> -	int first_block = (nelen + inode->i_sb->s_blocksize - 1) >>
> -		inode->i_sb->s_blocksize_bits;
> +	int last_block = bytes_to_blocks(elen, inode->i_sb);
> +	int first_block = bytes_to_blocks(nelen, inode->i_sb);
> 
>  	if (nelen) {
>  		if (etype == (EXT_NOT_RECORDED_ALLOCATED >> 30)) {
> @@ -256,8 +254,7 @@ void udf_truncate_extents(struct inode *inode)
>  						udf_get_lb_pblock(sb, &eloc, 0));
>  				if (elen)
>  					indirect_ext_len =
> -						(elen + sb->s_blocksize - 1) >>
> -						sb->s_blocksize_bits;
> +						bytes_to_blocks(elen, sb);
>  				else
>  					indirect_ext_len = 1;
>  			} else {
-- 
David Kleikamp
IBM Linux Technology Center


^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: [PATCH] filesystems: start using roundup_to_blocksize and bytes_to_blocks
  2009-04-20 19:07   ` Dave Kleikamp
@ 2009-04-20 20:22     ` Dave Kleikamp
  0 siblings, 0 replies; 8+ messages in thread
From: Dave Kleikamp @ 2009-04-20 20:22 UTC (permalink / raw)
  To: Marcin Slusarz; +Cc: linux-fsdevel, LKML

On Mon, 2009-04-20 at 14:07 -0500, Dave Kleikamp wrote:
> Looks good from a jfs perspective.  Really cleans up that code.
> 
> On Sun, 2009-04-19 at 20:51 +0200, Marcin Slusarz wrote:
> > Signed-off-by: Marcin Slusarz <marcin.slusarz@gmail.com>
Acked-by: Dave Kleikamp <shaggy@linux.vnet.ibm.com>

Sorry.  Should be acked-by rather than signed-off-by, and I really
didn't need to quote the whole patch.  Blame it on Monday.

Thanks,
Shaggy
-- 
David Kleikamp
IBM Linux Technology Center


^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: [PATCH] fs: add roundup_to_blocksize and bytes_to_blocks helper functions
  2009-04-19 18:42 [PATCH] fs: add roundup_to_blocksize and bytes_to_blocks helper functions Marcin Slusarz
  2009-04-19 18:51 ` [PATCH] filesystems: start using roundup_to_blocksize and bytes_to_blocks Marcin Slusarz
@ 2009-04-22 21:10 ` Andrew Morton
  2009-04-22 21:40   ` Dave Kleikamp
  2009-04-26 17:21   ` Marcin Slusarz
  1 sibling, 2 replies; 8+ messages in thread
From: Andrew Morton @ 2009-04-22 21:10 UTC (permalink / raw)
  To: Marcin Slusarz; +Cc: linux-fsdevel, linux-kernel

On Sun, 19 Apr 2009 20:42:15 +0200
Marcin Slusarz <marcin.slusarz@gmail.com> wrote:

> bytes_to_blocks is open coded in more than 30 places
> roundup_to_blocksize is open coded in more than 15 places
> 

It would be nice to document these a bit.  Kernel-wide helpers..

> ---
>  include/linux/fs.h |   12 ++++++++++++
>  1 files changed, 12 insertions(+), 0 deletions(-)
> 
> diff --git a/include/linux/fs.h b/include/linux/fs.h
> index e766be0..1b4e5b6 100644
> --- a/include/linux/fs.h
> +++ b/include/linux/fs.h
> @@ -2451,5 +2451,17 @@ int proc_nr_files(struct ctl_table *table, int write, struct file *filp,
>  
>  int get_filesystem_list(char * buf);
>  
> +static inline
> +unsigned long long roundup_to_blocksize(unsigned long long bytes, struct super_block *sb)
> +{
> +	return (bytes + sb->s_blocksize - 1) & ~(sb->s_blocksize - 1);

This is ALIGN(bytes, sb->s_blocksize).  Dunno if that's any clearer though.

> +}
> +
> +static inline
> +blkcnt_t bytes_to_blocks(unsigned long long bytes, struct super_block *sb)
> +{
> +	return (bytes + sb->s_blocksize - 1) >> sb->s_blocksize_bits;
> +}

I wonder whether `unsigned long long' was the best choice of type here.

Probably `bytes' should be loff_t.

roundup_to_blocksize() could/should return loff_t too, I think.

roundup_to_blocksize() isn't a terribly good name, IMO.  The name
conveys no sense of what the function returns.  It _sounds_ like it
returns a "block size".  But it doesn't - it returns a loff_t. 
round_up_file_offset_to_block_size() is a bit long though :(



^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: [PATCH] fs: add roundup_to_blocksize and bytes_to_blocks helper functions
  2009-04-22 21:10 ` [PATCH] fs: add roundup_to_blocksize and bytes_to_blocks helper functions Andrew Morton
@ 2009-04-22 21:40   ` Dave Kleikamp
  2009-04-22 21:52     ` Andrew Morton
  2009-04-26 17:21   ` Marcin Slusarz
  1 sibling, 1 reply; 8+ messages in thread
From: Dave Kleikamp @ 2009-04-22 21:40 UTC (permalink / raw)
  To: Andrew Morton; +Cc: Marcin Slusarz, linux-fsdevel, linux-kernel

On Wed, 2009-04-22 at 14:10 -0700, Andrew Morton wrote:

> roundup_to_blocksize() isn't a terribly good name, IMO.  The name
> conveys no sense of what the function returns.  It _sounds_ like it
> returns a "block size".  But it doesn't - it returns a loff_t. 
> round_up_file_offset_to_block_size() is a bit long though :(

Is round_up_to_block() any better?  I don't think the trailing "size"
helps.

Shaggy
-- 
David Kleikamp
IBM Linux Technology Center


^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: [PATCH] fs: add roundup_to_blocksize and bytes_to_blocks helper functions
  2009-04-22 21:40   ` Dave Kleikamp
@ 2009-04-22 21:52     ` Andrew Morton
  0 siblings, 0 replies; 8+ messages in thread
From: Andrew Morton @ 2009-04-22 21:52 UTC (permalink / raw)
  To: Dave Kleikamp; +Cc: marcin.slusarz, linux-fsdevel, linux-kernel

On Wed, 22 Apr 2009 16:40:00 -0500
Dave Kleikamp <shaggy@linux.vnet.ibm.com> wrote:

> On Wed, 2009-04-22 at 14:10 -0700, Andrew Morton wrote:
> 
> > roundup_to_blocksize() isn't a terribly good name, IMO.  The name
> > conveys no sense of what the function returns.  It _sounds_ like it
> > returns a "block size".  But it doesn't - it returns a loff_t. 
> > round_up_file_offset_to_block_size() is a bit long though :(
> 
> Is round_up_to_block() any better?  I don't think the trailing "size"
> helps.

dunno.

If the function is documented and if its arg is a loff_t rather than a
bare ull then I guess that makes things sufficiently clear that we
don't have to fuss about its name too much.


^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: [PATCH] fs: add roundup_to_blocksize and bytes_to_blocks helper functions
  2009-04-22 21:10 ` [PATCH] fs: add roundup_to_blocksize and bytes_to_blocks helper functions Andrew Morton
  2009-04-22 21:40   ` Dave Kleikamp
@ 2009-04-26 17:21   ` Marcin Slusarz
  1 sibling, 0 replies; 8+ messages in thread
From: Marcin Slusarz @ 2009-04-26 17:21 UTC (permalink / raw)
  To: Andrew Morton; +Cc: linux-fsdevel, linux-kernel, Dave Kleikamp

Andrew Morton pisze:
> On Sun, 19 Apr 2009 20:42:15 +0200
> Marcin Slusarz <marcin.slusarz@gmail.com> wrote:
> 
>> bytes_to_blocks is open coded in more than 30 places
>> roundup_to_blocksize is open coded in more than 15 places
>>
> 
> It would be nice to document these a bit.  Kernel-wide helpers..

ok

>
>> ---
>>  include/linux/fs.h |   12 ++++++++++++
>>  1 files changed, 12 insertions(+), 0 deletions(-)
>>
>> diff --git a/include/linux/fs.h b/include/linux/fs.h
>> index e766be0..1b4e5b6 100644
>> --- a/include/linux/fs.h
>> +++ b/include/linux/fs.h
>> @@ -2451,5 +2451,17 @@ int proc_nr_files(struct ctl_table *table, int write, struct file *filp,
>>  
>>  int get_filesystem_list(char * buf);
>>  
>> +static inline
>> +unsigned long long roundup_to_blocksize(unsigned long long bytes, struct super_block *sb)
>> +{
>> +	return (bytes + sb->s_blocksize - 1) & ~(sb->s_blocksize - 1);
> 
> This is ALIGN(bytes, sb->s_blocksize).  Dunno if that's any clearer though.

thanks, I didn't know about it

>> +}
>> +
>> +static inline
>> +blkcnt_t bytes_to_blocks(unsigned long long bytes, struct super_block *sb)
>> +{
>> +	return (bytes + sb->s_blocksize - 1) >> sb->s_blocksize_bits;
>> +}
> 
> I wonder whether `unsigned long long' was the best choice of type here.
> 
> Probably `bytes' should be loff_t.

loff_t is long long.

So bytes_to_blocks(-6000, sb/*bs=4096, bsb=12*/) would return 4503599627370495

> roundup_to_blocksize() could/should return loff_t too, I think.

And roundup_to_blocksize(-6000, sb/*bs=4096, bsb=12*/) would return -4096

Bit surprising ;)

> roundup_to_blocksize() isn't a terribly good name, IMO.  The name
> conveys no sense of what the function returns.  It _sounds_ like it
> returns a "block size".  But it doesn't - it returns a loff_t. 
> round_up_file_offset_to_block_size() is a bit long though :(

I can't find any better name, sorry.

Marcin


^ permalink raw reply	[flat|nested] 8+ messages in thread

end of thread, other threads:[~2009-04-26 17:22 UTC | newest]

Thread overview: 8+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2009-04-19 18:42 [PATCH] fs: add roundup_to_blocksize and bytes_to_blocks helper functions Marcin Slusarz
2009-04-19 18:51 ` [PATCH] filesystems: start using roundup_to_blocksize and bytes_to_blocks Marcin Slusarz
2009-04-20 19:07   ` Dave Kleikamp
2009-04-20 20:22     ` Dave Kleikamp
2009-04-22 21:10 ` [PATCH] fs: add roundup_to_blocksize and bytes_to_blocks helper functions Andrew Morton
2009-04-22 21:40   ` Dave Kleikamp
2009-04-22 21:52     ` Andrew Morton
2009-04-26 17:21   ` Marcin Slusarz

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).