.. | .. |
---|
57 | 57 | .mmap = generic_file_readonly_mmap, |
---|
58 | 58 | .fsync = jffs2_fsync, |
---|
59 | 59 | .splice_read = generic_file_splice_read, |
---|
| 60 | + .splice_write = iter_file_splice_write, |
---|
60 | 61 | }; |
---|
61 | 62 | |
---|
62 | 63 | /* jffs2_file_inode_operations */ |
---|
.. | .. |
---|
137 | 138 | struct jffs2_inode_info *f = JFFS2_INODE_INFO(inode); |
---|
138 | 139 | struct jffs2_sb_info *c = JFFS2_SB_INFO(inode->i_sb); |
---|
139 | 140 | pgoff_t index = pos >> PAGE_SHIFT; |
---|
140 | | - uint32_t pageofs = index << PAGE_SHIFT; |
---|
141 | 141 | int ret = 0; |
---|
142 | 142 | |
---|
143 | 143 | jffs2_dbg(1, "%s()\n", __func__); |
---|
144 | 144 | |
---|
145 | | - if (pageofs > inode->i_size) { |
---|
146 | | - /* Make new hole frag from old EOF to new page */ |
---|
| 145 | + if (pos > inode->i_size) { |
---|
| 146 | + /* Make new hole frag from old EOF to new position */ |
---|
147 | 147 | struct jffs2_raw_inode ri; |
---|
148 | 148 | struct jffs2_full_dnode *fn; |
---|
149 | 149 | uint32_t alloc_len; |
---|
150 | 150 | |
---|
151 | | - jffs2_dbg(1, "Writing new hole frag 0x%x-0x%x between current EOF and new page\n", |
---|
152 | | - (unsigned int)inode->i_size, pageofs); |
---|
| 151 | + jffs2_dbg(1, "Writing new hole frag 0x%x-0x%x between current EOF and new position\n", |
---|
| 152 | + (unsigned int)inode->i_size, (uint32_t)pos); |
---|
153 | 153 | |
---|
154 | 154 | ret = jffs2_reserve_space(c, sizeof(ri), &alloc_len, |
---|
155 | 155 | ALLOC_NORMAL, JFFS2_SUMMARY_INODE_SIZE); |
---|
.. | .. |
---|
169 | 169 | ri.mode = cpu_to_jemode(inode->i_mode); |
---|
170 | 170 | ri.uid = cpu_to_je16(i_uid_read(inode)); |
---|
171 | 171 | ri.gid = cpu_to_je16(i_gid_read(inode)); |
---|
172 | | - ri.isize = cpu_to_je32(max((uint32_t)inode->i_size, pageofs)); |
---|
| 172 | + ri.isize = cpu_to_je32((uint32_t)pos); |
---|
173 | 173 | ri.atime = ri.ctime = ri.mtime = cpu_to_je32(JFFS2_NOW()); |
---|
174 | 174 | ri.offset = cpu_to_je32(inode->i_size); |
---|
175 | | - ri.dsize = cpu_to_je32(pageofs - inode->i_size); |
---|
| 175 | + ri.dsize = cpu_to_je32((uint32_t)pos - inode->i_size); |
---|
176 | 176 | ri.csize = cpu_to_je32(0); |
---|
177 | 177 | ri.compr = JFFS2_COMPR_ZERO; |
---|
178 | 178 | ri.node_crc = cpu_to_je32(crc32(0, &ri, sizeof(ri)-8)); |
---|
.. | .. |
---|
202 | 202 | goto out_err; |
---|
203 | 203 | } |
---|
204 | 204 | jffs2_complete_reservation(c); |
---|
205 | | - inode->i_size = pageofs; |
---|
| 205 | + inode->i_size = pos; |
---|
206 | 206 | mutex_unlock(&f->sem); |
---|
207 | 207 | } |
---|
208 | 208 | |
---|