Commit 9217644a authored by Georgi Guninski's avatar Georgi Guninski Committed by Linus Torvalds

[PATCH] reiserfs: use proper 64-bit clean types

reiserfs_file_write() casts its (size_t) count parameter to int, which can become
a problem on 64-bit architectures

This attempts to fix this by changing the variables dealing with count
and offset and the "min_t" comparisons to use "size_t" through-out.
Acked-by: default avatarMarcelo Tosatti <marcelo.tosatti@cyclades.com>
Signed-off-by: default avatarLinus Torvalds <torvalds@osdl.org>
parent cb7ce264
...@@ -588,7 +588,7 @@ static int reiserfs_allocate_blocks_for_region( ...@@ -588,7 +588,7 @@ static int reiserfs_allocate_blocks_for_region(
/* Unlock pages prepared by reiserfs_prepare_file_region_for_write */ /* Unlock pages prepared by reiserfs_prepare_file_region_for_write */
static void reiserfs_unprepare_pages(struct page **prepared_pages, /* list of locked pages */ static void reiserfs_unprepare_pages(struct page **prepared_pages, /* list of locked pages */
int num_pages /* amount of pages */) { size_t num_pages /* amount of pages */) {
int i; // loop counter int i; // loop counter
for (i=0; i < num_pages ; i++) { for (i=0; i < num_pages ; i++) {
...@@ -619,7 +619,7 @@ static int reiserfs_copy_from_user_to_file_region( ...@@ -619,7 +619,7 @@ static int reiserfs_copy_from_user_to_file_region(
int offset; // offset in page int offset; // offset in page
for ( i = 0, offset = (pos & (PAGE_CACHE_SIZE-1)); i < num_pages ; i++,offset=0) { for ( i = 0, offset = (pos & (PAGE_CACHE_SIZE-1)); i < num_pages ; i++,offset=0) {
int count = min_t(int,PAGE_CACHE_SIZE-offset,write_bytes); // How much of bytes to write to this page size_t count = min_t(size_t,PAGE_CACHE_SIZE-offset,write_bytes); // How much of bytes to write to this page
struct page *page=prepared_pages[i]; // Current page we process. struct page *page=prepared_pages[i]; // Current page we process.
fault_in_pages_readable( buf, count); fault_in_pages_readable( buf, count);
...@@ -718,8 +718,8 @@ static int reiserfs_submit_file_region_for_write( ...@@ -718,8 +718,8 @@ static int reiserfs_submit_file_region_for_write(
struct reiserfs_transaction_handle *th, struct reiserfs_transaction_handle *th,
struct inode *inode, struct inode *inode,
loff_t pos, /* Writing position offset */ loff_t pos, /* Writing position offset */
int num_pages, /* Number of pages to write */ size_t num_pages, /* Number of pages to write */
int write_bytes, /* number of bytes to write */ size_t write_bytes, /* number of bytes to write */
struct page **prepared_pages /* list of pages */ struct page **prepared_pages /* list of pages */
) )
{ {
...@@ -854,9 +854,9 @@ static int reiserfs_check_for_tail_and_convert( struct inode *inode, /* inode to ...@@ -854,9 +854,9 @@ static int reiserfs_check_for_tail_and_convert( struct inode *inode, /* inode to
static int reiserfs_prepare_file_region_for_write( static int reiserfs_prepare_file_region_for_write(
struct inode *inode /* Inode of the file */, struct inode *inode /* Inode of the file */,
loff_t pos, /* position in the file */ loff_t pos, /* position in the file */
int num_pages, /* number of pages to size_t num_pages, /* number of pages to
prepare */ prepare */
int write_bytes, /* Amount of bytes to be size_t write_bytes, /* Amount of bytes to be
overwritten from overwritten from
@pos */ @pos */
struct page **prepared_pages /* pointer to array struct page **prepared_pages /* pointer to array
...@@ -1252,10 +1252,9 @@ static ssize_t reiserfs_file_write( struct file *file, /* the file we are going ...@@ -1252,10 +1252,9 @@ static ssize_t reiserfs_file_write( struct file *file, /* the file we are going
while ( count > 0) { while ( count > 0) {
/* This is the main loop in which we running until some error occures /* This is the main loop in which we running until some error occures
or until we write all of the data. */ or until we write all of the data. */
int num_pages;/* amount of pages we are going to write this iteration */ size_t num_pages;/* amount of pages we are going to write this iteration */
int write_bytes; /* amount of bytes to write during this iteration */ size_t write_bytes; /* amount of bytes to write during this iteration */
int blocks_to_allocate; /* how much blocks we need to allocate for size_t blocks_to_allocate; /* how much blocks we need to allocate for this iteration */
this iteration */
/* (pos & (PAGE_CACHE_SIZE-1)) is an idiom for offset into a page of pos*/ /* (pos & (PAGE_CACHE_SIZE-1)) is an idiom for offset into a page of pos*/
num_pages = !!((pos+count) & (PAGE_CACHE_SIZE - 1)) + /* round up partial num_pages = !!((pos+count) & (PAGE_CACHE_SIZE - 1)) + /* round up partial
...@@ -1269,7 +1268,7 @@ static ssize_t reiserfs_file_write( struct file *file, /* the file we are going ...@@ -1269,7 +1268,7 @@ static ssize_t reiserfs_file_write( struct file *file, /* the file we are going
/* If we were asked to write more data than we want to or if there /* If we were asked to write more data than we want to or if there
is not that much space, then we shorten amount of data to write is not that much space, then we shorten amount of data to write
for this iteration. */ for this iteration. */
num_pages = min_t(int, REISERFS_WRITE_PAGES_AT_A_TIME, reiserfs_can_fit_pages(inode->i_sb)); num_pages = min_t(size_t, REISERFS_WRITE_PAGES_AT_A_TIME, reiserfs_can_fit_pages(inode->i_sb));
/* Also we should not forget to set size in bytes accordingly */ /* Also we should not forget to set size in bytes accordingly */
write_bytes = (num_pages << PAGE_CACHE_SHIFT) - write_bytes = (num_pages << PAGE_CACHE_SHIFT) -
(pos & (PAGE_CACHE_SIZE-1)); (pos & (PAGE_CACHE_SIZE-1));
...@@ -1295,7 +1294,7 @@ static ssize_t reiserfs_file_write( struct file *file, /* the file we are going ...@@ -1295,7 +1294,7 @@ static ssize_t reiserfs_file_write( struct file *file, /* the file we are going
// But overwriting files on absolutelly full volumes would not // But overwriting files on absolutelly full volumes would not
// be very efficient. Well, people are not supposed to fill // be very efficient. Well, people are not supposed to fill
// 100% of disk space anyway. // 100% of disk space anyway.
write_bytes = min_t(int, count, inode->i_sb->s_blocksize - (pos & (inode->i_sb->s_blocksize - 1))); write_bytes = min_t(size_t, count, inode->i_sb->s_blocksize - (pos & (inode->i_sb->s_blocksize - 1)));
num_pages = 1; num_pages = 1;
// No blocks were claimed before, so do it now. // No blocks were claimed before, so do it now.
reiserfs_claim_blocks_to_be_allocated(inode->i_sb, 1 << (PAGE_CACHE_SHIFT - inode->i_blkbits)); reiserfs_claim_blocks_to_be_allocated(inode->i_sb, 1 << (PAGE_CACHE_SHIFT - inode->i_blkbits));
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment