aboutsummaryrefslogtreecommitdiffstats
path: root/fs/affs/file.c
diff options
context:
space:
mode:
Diffstat (limited to 'fs/affs/file.c')
-rw-r--r--fs/affs/file.c46
1 files changed, 26 insertions, 20 deletions
diff --git a/fs/affs/file.c b/fs/affs/file.c
index 8669b6ecddee..0270303388ee 100644
--- a/fs/affs/file.c
+++ b/fs/affs/file.c
@@ -45,7 +45,7 @@ const struct inode_operations affs_file_inode_operations = {
45static int 45static int
46affs_file_open(struct inode *inode, struct file *filp) 46affs_file_open(struct inode *inode, struct file *filp)
47{ 47{
48 pr_debug("AFFS: open(%lu,%d)\n", 48 pr_debug("open(%lu,%d)\n",
49 inode->i_ino, atomic_read(&AFFS_I(inode)->i_opencnt)); 49 inode->i_ino, atomic_read(&AFFS_I(inode)->i_opencnt));
50 atomic_inc(&AFFS_I(inode)->i_opencnt); 50 atomic_inc(&AFFS_I(inode)->i_opencnt);
51 return 0; 51 return 0;
@@ -54,7 +54,7 @@ affs_file_open(struct inode *inode, struct file *filp)
54static int 54static int
55affs_file_release(struct inode *inode, struct file *filp) 55affs_file_release(struct inode *inode, struct file *filp)
56{ 56{
57 pr_debug("AFFS: release(%lu, %d)\n", 57 pr_debug("release(%lu, %d)\n",
58 inode->i_ino, atomic_read(&AFFS_I(inode)->i_opencnt)); 58 inode->i_ino, atomic_read(&AFFS_I(inode)->i_opencnt));
59 59
60 if (atomic_dec_and_test(&AFFS_I(inode)->i_opencnt)) { 60 if (atomic_dec_and_test(&AFFS_I(inode)->i_opencnt)) {
@@ -324,7 +324,8 @@ affs_get_block(struct inode *inode, sector_t block, struct buffer_head *bh_resul
324 struct buffer_head *ext_bh; 324 struct buffer_head *ext_bh;
325 u32 ext; 325 u32 ext;
326 326
327 pr_debug("AFFS: get_block(%u, %lu)\n", (u32)inode->i_ino, (unsigned long)block); 327 pr_debug("%s(%u, %lu)\n",
328 __func__, (u32)inode->i_ino, (unsigned long)block);
328 329
329 BUG_ON(block > (sector_t)0x7fffffffUL); 330 BUG_ON(block > (sector_t)0x7fffffffUL);
330 331
@@ -498,34 +499,36 @@ affs_getemptyblk_ino(struct inode *inode, int block)
498} 499}
499 500
500static int 501static int
501affs_do_readpage_ofs(struct file *file, struct page *page, unsigned from, unsigned to) 502affs_do_readpage_ofs(struct page *page, unsigned to)
502{ 503{
503 struct inode *inode = page->mapping->host; 504 struct inode *inode = page->mapping->host;
504 struct super_block *sb = inode->i_sb; 505 struct super_block *sb = inode->i_sb;
505 struct buffer_head *bh; 506 struct buffer_head *bh;
506 char *data; 507 char *data;
508 unsigned pos = 0;
507 u32 bidx, boff, bsize; 509 u32 bidx, boff, bsize;
508 u32 tmp; 510 u32 tmp;
509 511
510 pr_debug("AFFS: read_page(%u, %ld, %d, %d)\n", (u32)inode->i_ino, page->index, from, to); 512 pr_debug("%s(%u, %ld, 0, %d)\n", __func__, (u32)inode->i_ino,
511 BUG_ON(from > to || to > PAGE_CACHE_SIZE); 513 page->index, to);
514 BUG_ON(to > PAGE_CACHE_SIZE);
512 kmap(page); 515 kmap(page);
513 data = page_address(page); 516 data = page_address(page);
514 bsize = AFFS_SB(sb)->s_data_blksize; 517 bsize = AFFS_SB(sb)->s_data_blksize;
515 tmp = (page->index << PAGE_CACHE_SHIFT) + from; 518 tmp = page->index << PAGE_CACHE_SHIFT;
516 bidx = tmp / bsize; 519 bidx = tmp / bsize;
517 boff = tmp % bsize; 520 boff = tmp % bsize;
518 521
519 while (from < to) { 522 while (pos < to) {
520 bh = affs_bread_ino(inode, bidx, 0); 523 bh = affs_bread_ino(inode, bidx, 0);
521 if (IS_ERR(bh)) 524 if (IS_ERR(bh))
522 return PTR_ERR(bh); 525 return PTR_ERR(bh);
523 tmp = min(bsize - boff, to - from); 526 tmp = min(bsize - boff, to - pos);
524 BUG_ON(from + tmp > to || tmp > bsize); 527 BUG_ON(pos + tmp > to || tmp > bsize);
525 memcpy(data + from, AFFS_DATA(bh) + boff, tmp); 528 memcpy(data + pos, AFFS_DATA(bh) + boff, tmp);
526 affs_brelse(bh); 529 affs_brelse(bh);
527 bidx++; 530 bidx++;
528 from += tmp; 531 pos += tmp;
529 boff = 0; 532 boff = 0;
530 } 533 }
531 flush_dcache_page(page); 534 flush_dcache_page(page);
@@ -542,7 +545,7 @@ affs_extent_file_ofs(struct inode *inode, u32 newsize)
542 u32 size, bsize; 545 u32 size, bsize;
543 u32 tmp; 546 u32 tmp;
544 547
545 pr_debug("AFFS: extent_file(%u, %d)\n", (u32)inode->i_ino, newsize); 548 pr_debug("%s(%u, %d)\n", __func__, (u32)inode->i_ino, newsize);
546 bsize = AFFS_SB(sb)->s_data_blksize; 549 bsize = AFFS_SB(sb)->s_data_blksize;
547 bh = NULL; 550 bh = NULL;
548 size = AFFS_I(inode)->mmu_private; 551 size = AFFS_I(inode)->mmu_private;
@@ -608,14 +611,14 @@ affs_readpage_ofs(struct file *file, struct page *page)
608 u32 to; 611 u32 to;
609 int err; 612 int err;
610 613
611 pr_debug("AFFS: read_page(%u, %ld)\n", (u32)inode->i_ino, page->index); 614 pr_debug("%s(%u, %ld)\n", __func__, (u32)inode->i_ino, page->index);
612 to = PAGE_CACHE_SIZE; 615 to = PAGE_CACHE_SIZE;
613 if (((page->index + 1) << PAGE_CACHE_SHIFT) > inode->i_size) { 616 if (((page->index + 1) << PAGE_CACHE_SHIFT) > inode->i_size) {
614 to = inode->i_size & ~PAGE_CACHE_MASK; 617 to = inode->i_size & ~PAGE_CACHE_MASK;
615 memset(page_address(page) + to, 0, PAGE_CACHE_SIZE - to); 618 memset(page_address(page) + to, 0, PAGE_CACHE_SIZE - to);
616 } 619 }
617 620
618 err = affs_do_readpage_ofs(file, page, 0, to); 621 err = affs_do_readpage_ofs(page, to);
619 if (!err) 622 if (!err)
620 SetPageUptodate(page); 623 SetPageUptodate(page);
621 unlock_page(page); 624 unlock_page(page);
@@ -631,7 +634,8 @@ static int affs_write_begin_ofs(struct file *file, struct address_space *mapping
631 pgoff_t index; 634 pgoff_t index;
632 int err = 0; 635 int err = 0;
633 636
634 pr_debug("AFFS: write_begin(%u, %llu, %llu)\n", (u32)inode->i_ino, (unsigned long long)pos, (unsigned long long)pos + len); 637 pr_debug("%s(%u, %llu, %llu)\n", __func__, (u32)inode->i_ino,
638 (unsigned long long)pos, (unsigned long long)pos + len);
635 if (pos > AFFS_I(inode)->mmu_private) { 639 if (pos > AFFS_I(inode)->mmu_private) {
636 /* XXX: this probably leaves a too-big i_size in case of 640 /* XXX: this probably leaves a too-big i_size in case of
637 * failure. Should really be updating i_size at write_end time 641 * failure. Should really be updating i_size at write_end time
@@ -651,7 +655,7 @@ static int affs_write_begin_ofs(struct file *file, struct address_space *mapping
651 return 0; 655 return 0;
652 656
653 /* XXX: inefficient but safe in the face of short writes */ 657 /* XXX: inefficient but safe in the face of short writes */
654 err = affs_do_readpage_ofs(file, page, 0, PAGE_CACHE_SIZE); 658 err = affs_do_readpage_ofs(page, PAGE_CACHE_SIZE);
655 if (err) { 659 if (err) {
656 unlock_page(page); 660 unlock_page(page);
657 page_cache_release(page); 661 page_cache_release(page);
@@ -680,7 +684,9 @@ static int affs_write_end_ofs(struct file *file, struct address_space *mapping,
680 * due to write_begin. 684 * due to write_begin.
681 */ 685 */
682 686
683 pr_debug("AFFS: write_begin(%u, %llu, %llu)\n", (u32)inode->i_ino, (unsigned long long)pos, (unsigned long long)pos + len); 687 pr_debug("%s(%u, %llu, %llu)\n",
688 __func__, (u32)inode->i_ino, (unsigned long long)pos,
689 (unsigned long long)pos + len);
684 bsize = AFFS_SB(sb)->s_data_blksize; 690 bsize = AFFS_SB(sb)->s_data_blksize;
685 data = page_address(page); 691 data = page_address(page);
686 692
@@ -802,7 +808,7 @@ affs_free_prealloc(struct inode *inode)
802{ 808{
803 struct super_block *sb = inode->i_sb; 809 struct super_block *sb = inode->i_sb;
804 810
805 pr_debug("AFFS: free_prealloc(ino=%lu)\n", inode->i_ino); 811 pr_debug("free_prealloc(ino=%lu)\n", inode->i_ino);
806 812
807 while (AFFS_I(inode)->i_pa_cnt) { 813 while (AFFS_I(inode)->i_pa_cnt) {
808 AFFS_I(inode)->i_pa_cnt--; 814 AFFS_I(inode)->i_pa_cnt--;
@@ -822,7 +828,7 @@ affs_truncate(struct inode *inode)
822 struct buffer_head *ext_bh; 828 struct buffer_head *ext_bh;
823 int i; 829 int i;
824 830
825 pr_debug("AFFS: truncate(inode=%d, oldsize=%u, newsize=%u)\n", 831 pr_debug("truncate(inode=%d, oldsize=%u, newsize=%u)\n",
826 (u32)inode->i_ino, (u32)AFFS_I(inode)->mmu_private, (u32)inode->i_size); 832 (u32)inode->i_ino, (u32)AFFS_I(inode)->mmu_private, (u32)inode->i_size);
827 833
828 last_blk = 0; 834 last_blk = 0;