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