file.c (4cb1f43ce8c72ee453c00fcb9f6ee9c4ebd03f98) | file.c (7dd29d8d865efdb00c0542a5d2c87af8c52ea6c7) |
---|---|
1/* 2 * linux/fs/hpfs/file.c 3 * 4 * Mikulas Patocka (mikulas@artax.karlin.mff.cuni.cz), 1998-1999 5 * 6 * file VFS functions 7 */ 8 --- 34 unchanged lines hidden (view full) --- 43 if (disk_secno == -1) return 0; 44 if (hpfs_chk_sectors(inode->i_sb, disk_secno, 1, "bmap")) return 0; 45 return disk_secno; 46} 47 48static void hpfs_truncate(struct inode *i) 49{ 50 if (IS_IMMUTABLE(i)) return /*-EPERM*/; | 1/* 2 * linux/fs/hpfs/file.c 3 * 4 * Mikulas Patocka (mikulas@artax.karlin.mff.cuni.cz), 1998-1999 5 * 6 * file VFS functions 7 */ 8 --- 34 unchanged lines hidden (view full) --- 43 if (disk_secno == -1) return 0; 44 if (hpfs_chk_sectors(inode->i_sb, disk_secno, 1, "bmap")) return 0; 45 return disk_secno; 46} 47 48static void hpfs_truncate(struct inode *i) 49{ 50 if (IS_IMMUTABLE(i)) return /*-EPERM*/; |
51 hpfs_lock(i->i_sb); | 51 hpfs_lock_assert(i->i_sb); 52 |
52 hpfs_i(i)->i_n_secs = 0; 53 i->i_blocks = 1 + ((i->i_size + 511) >> 9); 54 hpfs_i(i)->mmu_private = i->i_size; 55 hpfs_truncate_btree(i->i_sb, i->i_ino, 1, ((i->i_size + 511) >> 9)); 56 hpfs_write_inode(i); 57 hpfs_i(i)->i_n_secs = 0; | 53 hpfs_i(i)->i_n_secs = 0; 54 i->i_blocks = 1 + ((i->i_size + 511) >> 9); 55 hpfs_i(i)->mmu_private = i->i_size; 56 hpfs_truncate_btree(i->i_sb, i->i_ino, 1, ((i->i_size + 511) >> 9)); 57 hpfs_write_inode(i); 58 hpfs_i(i)->i_n_secs = 0; |
58 hpfs_unlock(i->i_sb); | |
59} 60 61static int hpfs_get_block(struct inode *inode, sector_t iblock, struct buffer_head *bh_result, int create) 62{ | 59} 60 61static int hpfs_get_block(struct inode *inode, sector_t iblock, struct buffer_head *bh_result, int create) 62{ |
63 int r; |
|
63 secno s; | 64 secno s; |
65 hpfs_lock(inode->i_sb); |
|
64 s = hpfs_bmap(inode, iblock); 65 if (s) { 66 map_bh(bh_result, inode->i_sb, s); | 66 s = hpfs_bmap(inode, iblock); 67 if (s) { 68 map_bh(bh_result, inode->i_sb, s); |
67 return 0; | 69 goto ret_0; |
68 } | 70 } |
69 if (!create) return 0; | 71 if (!create) goto ret_0; |
70 if (iblock<<9 != hpfs_i(inode)->mmu_private) { 71 BUG(); | 72 if (iblock<<9 != hpfs_i(inode)->mmu_private) { 73 BUG(); |
72 return -EIO; | 74 r = -EIO; 75 goto ret_r; |
73 } 74 if ((s = hpfs_add_sector_to_btree(inode->i_sb, inode->i_ino, 1, inode->i_blocks - 1)) == -1) { 75 hpfs_truncate_btree(inode->i_sb, inode->i_ino, 1, inode->i_blocks - 1); | 76 } 77 if ((s = hpfs_add_sector_to_btree(inode->i_sb, inode->i_ino, 1, inode->i_blocks - 1)) == -1) { 78 hpfs_truncate_btree(inode->i_sb, inode->i_ino, 1, inode->i_blocks - 1); |
76 return -ENOSPC; | 79 r = -ENOSPC; 80 goto ret_r; |
77 } 78 inode->i_blocks++; 79 hpfs_i(inode)->mmu_private += 512; 80 set_buffer_new(bh_result); 81 map_bh(bh_result, inode->i_sb, s); | 81 } 82 inode->i_blocks++; 83 hpfs_i(inode)->mmu_private += 512; 84 set_buffer_new(bh_result); 85 map_bh(bh_result, inode->i_sb, s); |
82 return 0; | 86 ret_0: 87 r = 0; 88 ret_r: 89 hpfs_unlock(inode->i_sb); 90 return r; |
83} 84 85static int hpfs_writepage(struct page *page, struct writeback_control *wbc) 86{ 87 return block_write_full_page(page,hpfs_get_block, wbc); 88} 89 90static int hpfs_readpage(struct file *file, struct page *page) --- 34 unchanged lines hidden (view full) --- 125}; 126 127static ssize_t hpfs_file_write(struct file *file, const char __user *buf, 128 size_t count, loff_t *ppos) 129{ 130 ssize_t retval; 131 132 retval = do_sync_write(file, buf, count, ppos); | 91} 92 93static int hpfs_writepage(struct page *page, struct writeback_control *wbc) 94{ 95 return block_write_full_page(page,hpfs_get_block, wbc); 96} 97 98static int hpfs_readpage(struct file *file, struct page *page) --- 34 unchanged lines hidden (view full) --- 133}; 134 135static ssize_t hpfs_file_write(struct file *file, const char __user *buf, 136 size_t count, loff_t *ppos) 137{ 138 ssize_t retval; 139 140 retval = do_sync_write(file, buf, count, ppos); |
133 if (retval > 0) | 141 if (retval > 0) { 142 hpfs_lock(file->f_path.dentry->d_sb); |
134 hpfs_i(file->f_path.dentry->d_inode)->i_dirty = 1; | 143 hpfs_i(file->f_path.dentry->d_inode)->i_dirty = 1; |
144 hpfs_unlock(file->f_path.dentry->d_sb); 145 } |
|
135 return retval; 136} 137 138const struct file_operations hpfs_file_ops = 139{ 140 .llseek = generic_file_llseek, 141 .read = do_sync_read, 142 .aio_read = generic_file_aio_read, --- 13 unchanged lines hidden --- | 146 return retval; 147} 148 149const struct file_operations hpfs_file_ops = 150{ 151 .llseek = generic_file_llseek, 152 .read = do_sync_read, 153 .aio_read = generic_file_aio_read, --- 13 unchanged lines hidden --- |