Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

vmcore: convert read_from_oldmem() to take an iov_iter

Remove the read_from_oldmem() wrapper introduced earlier and convert all
the remaining callers to pass an iov_iter.

Link: https://lkml.kernel.org/r/20220408090636.560886-4-bhe@redhat.com
Signed-off-by: Matthew Wilcox (Oracle) <willy@infradead.org>
Signed-off-by: Baoquan He <bhe@redhat.com>
Reviewed-by: Christoph Hellwig <hch@lst.de>
Cc: Tiezhu Yang <yangtiezhu@loongson.cn>
Cc: Amit Daniel Kachhap <amit.kachhap@arm.com>
Cc: Al Viro <viro@zeniv.linux.org.uk>
Cc: Matthew Wilcox <willy@infradead.org>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>

authored by

Matthew Wilcox (Oracle) and committed by
akpm
e0690479 4a22fd20

+25 -32
+6 -1
arch/x86/kernel/crash_dump_64.c
··· 54 54 55 55 ssize_t elfcorehdr_read(char *buf, size_t count, u64 *ppos) 56 56 { 57 - return read_from_oldmem(buf, count, ppos, 0, 57 + struct kvec kvec = { .iov_base = buf, .iov_len = count }; 58 + struct iov_iter iter; 59 + 60 + iov_iter_kvec(&iter, READ, &kvec, 1, count); 61 + 62 + return read_from_oldmem(&iter, count, ppos, 58 63 cc_platform_has(CC_ATTR_GUEST_MEM_ENCRYPT)); 59 64 }
+15 -25
fs/proc/vmcore.c
··· 129 129 } 130 130 131 131 /* Reads a page from the oldmem device from given offset. */ 132 - static ssize_t read_from_oldmem_iter(struct iov_iter *iter, size_t count, 132 + ssize_t read_from_oldmem(struct iov_iter *iter, size_t count, 133 133 u64 *ppos, bool encrypted) 134 134 { 135 135 unsigned long pfn, offset; ··· 178 178 return read; 179 179 } 180 180 181 - ssize_t read_from_oldmem(char *buf, size_t count, 182 - u64 *ppos, int userbuf, 183 - bool encrypted) 184 - { 185 - struct iov_iter iter; 186 - struct iovec iov; 187 - struct kvec kvec; 188 - 189 - if (userbuf) { 190 - iov.iov_base = (__force void __user *)buf; 191 - iov.iov_len = count; 192 - iov_iter_init(&iter, READ, &iov, 1, count); 193 - } else { 194 - kvec.iov_base = buf; 195 - kvec.iov_len = count; 196 - iov_iter_kvec(&iter, READ, &kvec, 1, count); 197 - } 198 - 199 - return read_from_oldmem_iter(&iter, count, ppos, encrypted); 200 - } 201 - 202 181 /* 203 182 * Architectures may override this function to allocate ELF header in 2nd kernel 204 183 */ ··· 197 218 */ 198 219 ssize_t __weak elfcorehdr_read(char *buf, size_t count, u64 *ppos) 199 220 { 200 - return read_from_oldmem(buf, count, ppos, 0, false); 221 + struct kvec kvec = { .iov_base = buf, .iov_len = count }; 222 + struct iov_iter iter; 223 + 224 + iov_iter_kvec(&iter, READ, &kvec, 1, count); 225 + 226 + return read_from_oldmem(&iter, count, ppos, false); 201 227 } 202 228 203 229 /* ··· 210 226 */ 211 227 ssize_t __weak elfcorehdr_read_notes(char *buf, size_t count, u64 *ppos) 212 228 { 213 - return read_from_oldmem(buf, count, ppos, 0, cc_platform_has(CC_ATTR_MEM_ENCRYPT)); 229 + struct kvec kvec = { .iov_base = buf, .iov_len = count }; 230 + struct iov_iter iter; 231 + 232 + iov_iter_kvec(&iter, READ, &kvec, 1, count); 233 + 234 + return read_from_oldmem(&iter, count, ppos, 235 + cc_platform_has(CC_ATTR_MEM_ENCRYPT)); 214 236 } 215 237 216 238 /* ··· 392 402 m->offset + m->size - *fpos, 393 403 iov_iter_count(iter)); 394 404 start = m->paddr + *fpos - m->offset; 395 - tmp = read_from_oldmem_iter(iter, tsz, &start, 405 + tmp = read_from_oldmem(iter, tsz, &start, 396 406 cc_platform_has(CC_ATTR_MEM_ENCRYPT)); 397 407 if (tmp < 0) 398 408 return tmp;
+4 -6
include/linux/crash_dump.h
··· 134 134 #endif /* CONFIG_PROC_VMCORE_DEVICE_DUMP */ 135 135 136 136 #ifdef CONFIG_PROC_VMCORE 137 - ssize_t read_from_oldmem(char *buf, size_t count, 138 - u64 *ppos, int userbuf, 139 - bool encrypted); 137 + ssize_t read_from_oldmem(struct iov_iter *iter, size_t count, 138 + u64 *ppos, bool encrypted); 140 139 #else 141 - static inline ssize_t read_from_oldmem(char *buf, size_t count, 142 - u64 *ppos, int userbuf, 143 - bool encrypted) 140 + static inline ssize_t read_from_oldmem(struct iov_iter *iter, size_t count, 141 + u64 *ppos, bool encrypted) 144 142 { 145 143 return -EOPNOTSUPP; 146 144 }