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 ---