hc
2024-02-20 102a0743326a03cd1a1202ceda21e175b7d3575c
kernel/fs/jffs2/file.c
....@@ -57,6 +57,7 @@
5757 .mmap = generic_file_readonly_mmap,
5858 .fsync = jffs2_fsync,
5959 .splice_read = generic_file_splice_read,
60
+ .splice_write = iter_file_splice_write,
6061 };
6162
6263 /* jffs2_file_inode_operations */
....@@ -137,19 +138,18 @@
137138 struct jffs2_inode_info *f = JFFS2_INODE_INFO(inode);
138139 struct jffs2_sb_info *c = JFFS2_SB_INFO(inode->i_sb);
139140 pgoff_t index = pos >> PAGE_SHIFT;
140
- uint32_t pageofs = index << PAGE_SHIFT;
141141 int ret = 0;
142142
143143 jffs2_dbg(1, "%s()\n", __func__);
144144
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 */
147147 struct jffs2_raw_inode ri;
148148 struct jffs2_full_dnode *fn;
149149 uint32_t alloc_len;
150150
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);
153153
154154 ret = jffs2_reserve_space(c, sizeof(ri), &alloc_len,
155155 ALLOC_NORMAL, JFFS2_SUMMARY_INODE_SIZE);
....@@ -169,10 +169,10 @@
169169 ri.mode = cpu_to_jemode(inode->i_mode);
170170 ri.uid = cpu_to_je16(i_uid_read(inode));
171171 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);
173173 ri.atime = ri.ctime = ri.mtime = cpu_to_je32(JFFS2_NOW());
174174 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);
176176 ri.csize = cpu_to_je32(0);
177177 ri.compr = JFFS2_COMPR_ZERO;
178178 ri.node_crc = cpu_to_je32(crc32(0, &ri, sizeof(ri)-8));
....@@ -202,7 +202,7 @@
202202 goto out_err;
203203 }
204204 jffs2_complete_reservation(c);
205
- inode->i_size = pageofs;
205
+ inode->i_size = pos;
206206 mutex_unlock(&f->sem);
207207 }
208208