diff options
Diffstat (limited to 'fs/affs/file.c')
-rw-r--r-- | fs/affs/file.c | 46 |
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 = { | |||
45 | static int | 45 | static int |
46 | affs_file_open(struct inode *inode, struct file *filp) | 46 | affs_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) | |||
54 | static int | 54 | static int |
55 | affs_file_release(struct inode *inode, struct file *filp) | 55 | affs_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 | ||
500 | static int | 501 | static int |
501 | affs_do_readpage_ofs(struct file *file, struct page *page, unsigned from, unsigned to) | 502 | affs_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; |