This pull request contains the following changes for UML:
- hostfs: Convert to writepages - Many cleanups: Removal of dead macros, missing __init -----BEGIN PGP SIGNATURE----- iQJKBAABCAA0FiEEdgfidid8lnn52cLTZvlZhesYu8EFAmeb5TYWHHJpY2hhcmRA c2lnbWEtc3Rhci5hdAAKCRBm+VmF6xi7wbwkEAC1dix/qif2dinpB/fY/+CTY6tL qiiC0Wo5iFyqklh1Jxk9op/1Sk58SzKPyFRBIHU6MTIK55VyUtmQiJRGenYhM/1I QSEH/TjabYOliz5iOPcwEGxaew388OI+filQrgpdOnOBw/TAk0PVxVD87O0gMs0D zSOwTQYthItjzJBQYPMd6gTsO4ErlJxQKVxwUdjzks4eO3sd5n5g85b67+pQElwF qidrF5AUWlQ5x5BHfO/xgkg4oyB90USOMc7hG03SN3PJu9/ioBQGAYwt9eZgvpQk /f4JoHVKeRNqbWKnFgxN/39OyhDdaBFyZHE1ZeDCYSrsr/Mvg4vEbDf/NIlltRd9 abUPeG+C29EDhTrQwvmiLpYNSW5S5e7Xgwj5cOyExlWyz08E17JCT4iJuYHDNmlW /YIx6lnokQJr5sEWxnGEri59gkL4OrxisIQA5J0RJk+82Mrh7aaR5bbh4dcFKP/a uy5mUyYCqT0wEG2rN86FZHurDowXmtbmZrISO8eY3h1elor2m78AVKbIaUilb8tw 7m6nP/dc7PzY/CxP8gX5EdFfS3qO3V6oyk30k4we9EoDtpX499oLdKk1DxNabyxc yyDa98H41hkBIiwfqMVuXCd+SKS/G/t6mH/UhLt3kOrYNRZIEP+cfEOqAbulGB0J UqXVujNyWf9nI2jywg== =hSNx -----END PGP SIGNATURE----- Merge tag 'uml-for-linus-6.14-rc1' of git://git.kernel.org/pub/scm/linux/kernel/git/uml/linux Pull UML updates from Richard Weinberger: - hostfs: Convert to writepages - many cleanups: removal of dead macros, missing __init * tag 'uml-for-linus-6.14-rc1' of git://git.kernel.org/pub/scm/linux/kernel/git/uml/linux: um: Remove unused asm/archparam.h header um: Include missing headers in asm/pgtable.h hostfs: Convert to writepages um: rtc: use RTC time when calculating the alarm um: Remove unused user_context function um: Remove unused THREAD_NAME_LEN macro um: Remove unused PGD_BOUND macro um: Mark setup_env_path as __init um: Mark install_fatal_handler as __init um: Mark set_stklim as __init um: Mark get_top_address as __init um: Mark parse_cache_line as __init um: Mark parse_host_cpu_flags as __init um: Count iomem_size only once in physmem calculation um: Remove obsolete fixmap support um: Remove unused MODULES_LEN macro
This commit is contained in:
commit
69e858e0b8
10 changed files with 43 additions and 140 deletions
|
@ -51,6 +51,7 @@ static int uml_rtc_read_alarm(struct device *dev, struct rtc_wkalrm *alrm)
|
||||||
|
|
||||||
static int uml_rtc_alarm_irq_enable(struct device *dev, unsigned int enable)
|
static int uml_rtc_alarm_irq_enable(struct device *dev, unsigned int enable)
|
||||||
{
|
{
|
||||||
|
struct timespec64 ts;
|
||||||
unsigned long long secs;
|
unsigned long long secs;
|
||||||
|
|
||||||
if (!enable && !uml_rtc_alarm_enabled)
|
if (!enable && !uml_rtc_alarm_enabled)
|
||||||
|
@ -58,7 +59,8 @@ static int uml_rtc_alarm_irq_enable(struct device *dev, unsigned int enable)
|
||||||
|
|
||||||
uml_rtc_alarm_enabled = enable;
|
uml_rtc_alarm_enabled = enable;
|
||||||
|
|
||||||
secs = uml_rtc_alarm_time - ktime_get_real_seconds();
|
read_persistent_clock64(&ts);
|
||||||
|
secs = uml_rtc_alarm_time - ts.tv_sec;
|
||||||
|
|
||||||
if (time_travel_mode == TT_MODE_OFF) {
|
if (time_travel_mode == TT_MODE_OFF) {
|
||||||
if (!enable) {
|
if (!enable) {
|
||||||
|
@ -73,7 +75,8 @@ static int uml_rtc_alarm_irq_enable(struct device *dev, unsigned int enable)
|
||||||
|
|
||||||
if (enable)
|
if (enable)
|
||||||
time_travel_add_event_rel(¨_rtc_alarm_event,
|
time_travel_add_event_rel(¨_rtc_alarm_event,
|
||||||
secs * NSEC_PER_SEC);
|
secs * NSEC_PER_SEC -
|
||||||
|
ts.tv_nsec);
|
||||||
}
|
}
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
|
|
|
@ -1,56 +0,0 @@
|
||||||
/* SPDX-License-Identifier: GPL-2.0 */
|
|
||||||
#ifndef __UM_FIXMAP_H
|
|
||||||
#define __UM_FIXMAP_H
|
|
||||||
|
|
||||||
#include <asm/processor.h>
|
|
||||||
#include <asm/archparam.h>
|
|
||||||
#include <asm/page.h>
|
|
||||||
#include <linux/threads.h>
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Here we define all the compile-time 'special' virtual
|
|
||||||
* addresses. The point is to have a constant address at
|
|
||||||
* compile time, but to set the physical address only
|
|
||||||
* in the boot process. We allocate these special addresses
|
|
||||||
* from the end of virtual memory (0xfffff000) backwards.
|
|
||||||
* Also this lets us do fail-safe vmalloc(), we
|
|
||||||
* can guarantee that these special addresses and
|
|
||||||
* vmalloc()-ed addresses never overlap.
|
|
||||||
*
|
|
||||||
* these 'compile-time allocated' memory buffers are
|
|
||||||
* fixed-size 4k pages. (or larger if used with an increment
|
|
||||||
* highger than 1) use fixmap_set(idx,phys) to associate
|
|
||||||
* physical memory with fixmap indices.
|
|
||||||
*
|
|
||||||
* TLB entries of such buffers will not be flushed across
|
|
||||||
* task switches.
|
|
||||||
*/
|
|
||||||
|
|
||||||
/*
|
|
||||||
* on UP currently we will have no trace of the fixmap mechanizm,
|
|
||||||
* no page table allocations, etc. This might change in the
|
|
||||||
* future, say framebuffers for the console driver(s) could be
|
|
||||||
* fix-mapped?
|
|
||||||
*/
|
|
||||||
enum fixed_addresses {
|
|
||||||
__end_of_fixed_addresses
|
|
||||||
};
|
|
||||||
|
|
||||||
extern void __set_fixmap (enum fixed_addresses idx,
|
|
||||||
unsigned long phys, pgprot_t flags);
|
|
||||||
|
|
||||||
/*
|
|
||||||
* used by vmalloc.c.
|
|
||||||
*
|
|
||||||
* Leave one empty page between vmalloc'ed areas and
|
|
||||||
* the start of the fixmap, and leave one page empty
|
|
||||||
* at the top of mem..
|
|
||||||
*/
|
|
||||||
|
|
||||||
#define FIXADDR_TOP (TASK_SIZE - 2 * PAGE_SIZE)
|
|
||||||
#define FIXADDR_SIZE (__end_of_fixed_addresses << PAGE_SHIFT)
|
|
||||||
#define FIXADDR_START (FIXADDR_TOP - FIXADDR_SIZE)
|
|
||||||
|
|
||||||
#include <asm-generic/fixmap.h>
|
|
||||||
|
|
||||||
#endif
|
|
|
@ -8,7 +8,8 @@
|
||||||
#ifndef __UM_PGTABLE_H
|
#ifndef __UM_PGTABLE_H
|
||||||
#define __UM_PGTABLE_H
|
#define __UM_PGTABLE_H
|
||||||
|
|
||||||
#include <asm/fixmap.h>
|
#include <asm/page.h>
|
||||||
|
#include <linux/mm_types.h>
|
||||||
|
|
||||||
#define _PAGE_PRESENT 0x001
|
#define _PAGE_PRESENT 0x001
|
||||||
#define _PAGE_NEEDSYNC 0x002
|
#define _PAGE_NEEDSYNC 0x002
|
||||||
|
@ -48,11 +49,9 @@ extern unsigned long end_iomem;
|
||||||
|
|
||||||
#define VMALLOC_OFFSET (__va_space)
|
#define VMALLOC_OFFSET (__va_space)
|
||||||
#define VMALLOC_START ((end_iomem + VMALLOC_OFFSET) & ~(VMALLOC_OFFSET-1))
|
#define VMALLOC_START ((end_iomem + VMALLOC_OFFSET) & ~(VMALLOC_OFFSET-1))
|
||||||
#define PKMAP_BASE ((FIXADDR_START - LAST_PKMAP * PAGE_SIZE) & PMD_MASK)
|
#define VMALLOC_END (TASK_SIZE-2*PAGE_SIZE)
|
||||||
#define VMALLOC_END (FIXADDR_START-2*PAGE_SIZE)
|
|
||||||
#define MODULES_VADDR VMALLOC_START
|
#define MODULES_VADDR VMALLOC_START
|
||||||
#define MODULES_END VMALLOC_END
|
#define MODULES_END VMALLOC_END
|
||||||
#define MODULES_LEN (MODULES_VADDR - MODULES_END)
|
|
||||||
|
|
||||||
#define _PAGE_TABLE (_PAGE_PRESENT | _PAGE_RW | _PAGE_USER | _PAGE_ACCESSED | _PAGE_DIRTY)
|
#define _PAGE_TABLE (_PAGE_PRESENT | _PAGE_RW | _PAGE_USER | _PAGE_ACCESSED | _PAGE_DIRTY)
|
||||||
#define _KERNPG_TABLE (_PAGE_PRESENT | _PAGE_RW | _PAGE_ACCESSED | _PAGE_DIRTY)
|
#define _KERNPG_TABLE (_PAGE_PRESENT | _PAGE_RW | _PAGE_ACCESSED | _PAGE_DIRTY)
|
||||||
|
|
|
@ -9,7 +9,6 @@
|
||||||
#include <linux/mm.h>
|
#include <linux/mm.h>
|
||||||
#include <linux/swap.h>
|
#include <linux/swap.h>
|
||||||
#include <linux/slab.h>
|
#include <linux/slab.h>
|
||||||
#include <asm/fixmap.h>
|
|
||||||
#include <asm/page.h>
|
#include <asm/page.h>
|
||||||
#include <asm/pgalloc.h>
|
#include <asm/pgalloc.h>
|
||||||
#include <as-layout.h>
|
#include <as-layout.h>
|
||||||
|
@ -74,6 +73,7 @@ void __init mem_init(void)
|
||||||
kmalloc_ok = 1;
|
kmalloc_ok = 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#if IS_ENABLED(CONFIG_ARCH_REUSE_HOST_VSYSCALL_AREA)
|
||||||
/*
|
/*
|
||||||
* Create a page table and place a pointer to it in a middle page
|
* Create a page table and place a pointer to it in a middle page
|
||||||
* directory entry.
|
* directory entry.
|
||||||
|
@ -152,7 +152,6 @@ static void __init fixrange_init(unsigned long start, unsigned long end,
|
||||||
|
|
||||||
static void __init fixaddr_user_init( void)
|
static void __init fixaddr_user_init( void)
|
||||||
{
|
{
|
||||||
#ifdef CONFIG_ARCH_REUSE_HOST_VSYSCALL_AREA
|
|
||||||
long size = FIXADDR_USER_END - FIXADDR_USER_START;
|
long size = FIXADDR_USER_END - FIXADDR_USER_START;
|
||||||
pte_t *pte;
|
pte_t *pte;
|
||||||
phys_t p;
|
phys_t p;
|
||||||
|
@ -174,13 +173,12 @@ static void __init fixaddr_user_init( void)
|
||||||
pte = virt_to_kpte(vaddr);
|
pte = virt_to_kpte(vaddr);
|
||||||
pte_set_val(*pte, p, PAGE_READONLY);
|
pte_set_val(*pte, p, PAGE_READONLY);
|
||||||
}
|
}
|
||||||
#endif
|
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
void __init paging_init(void)
|
void __init paging_init(void)
|
||||||
{
|
{
|
||||||
unsigned long max_zone_pfn[MAX_NR_ZONES] = { 0 };
|
unsigned long max_zone_pfn[MAX_NR_ZONES] = { 0 };
|
||||||
unsigned long vaddr;
|
|
||||||
|
|
||||||
empty_zero_page = (unsigned long *) memblock_alloc_low(PAGE_SIZE,
|
empty_zero_page = (unsigned long *) memblock_alloc_low(PAGE_SIZE,
|
||||||
PAGE_SIZE);
|
PAGE_SIZE);
|
||||||
|
@ -191,14 +189,9 @@ void __init paging_init(void)
|
||||||
max_zone_pfn[ZONE_NORMAL] = end_iomem >> PAGE_SHIFT;
|
max_zone_pfn[ZONE_NORMAL] = end_iomem >> PAGE_SHIFT;
|
||||||
free_area_init(max_zone_pfn);
|
free_area_init(max_zone_pfn);
|
||||||
|
|
||||||
/*
|
#if IS_ENABLED(CONFIG_ARCH_REUSE_HOST_VSYSCALL_AREA)
|
||||||
* Fixed mappings, only the page table structure has to be
|
|
||||||
* created - mappings will be set by set_fixmap():
|
|
||||||
*/
|
|
||||||
vaddr = __fix_to_virt(__end_of_fixed_addresses - 1) & PMD_MASK;
|
|
||||||
fixrange_init(vaddr, FIXADDR_TOP, swapper_pg_dir);
|
|
||||||
|
|
||||||
fixaddr_user_init();
|
fixaddr_user_init();
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
|
|
@ -213,14 +213,6 @@ int __uml_cant_sleep(void) {
|
||||||
/* Is in_interrupt() really needed? */
|
/* Is in_interrupt() really needed? */
|
||||||
}
|
}
|
||||||
|
|
||||||
int user_context(unsigned long sp)
|
|
||||||
{
|
|
||||||
unsigned long stack;
|
|
||||||
|
|
||||||
stack = sp & (PAGE_MASK << CONFIG_KERNEL_STACK_ORDER);
|
|
||||||
return stack != (unsigned long) current_thread_info();
|
|
||||||
}
|
|
||||||
|
|
||||||
extern exitcall_t __uml_exitcall_begin, __uml_exitcall_end;
|
extern exitcall_t __uml_exitcall_begin, __uml_exitcall_end;
|
||||||
|
|
||||||
void do_uml_exitcalls(void)
|
void do_uml_exitcalls(void)
|
||||||
|
|
|
@ -264,7 +264,7 @@ EXPORT_SYMBOL(end_iomem);
|
||||||
|
|
||||||
#define MIN_VMALLOC (32 * 1024 * 1024)
|
#define MIN_VMALLOC (32 * 1024 * 1024)
|
||||||
|
|
||||||
static void parse_host_cpu_flags(char *line)
|
static void __init parse_host_cpu_flags(char *line)
|
||||||
{
|
{
|
||||||
int i;
|
int i;
|
||||||
for (i = 0; i < 32*NCAPINTS; i++) {
|
for (i = 0; i < 32*NCAPINTS; i++) {
|
||||||
|
@ -272,7 +272,8 @@ static void parse_host_cpu_flags(char *line)
|
||||||
set_cpu_cap(&boot_cpu_data, i);
|
set_cpu_cap(&boot_cpu_data, i);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
static void parse_cache_line(char *line)
|
|
||||||
|
static void __init parse_cache_line(char *line)
|
||||||
{
|
{
|
||||||
long res;
|
long res;
|
||||||
char *to_parse = strstr(line, ":");
|
char *to_parse = strstr(line, ":");
|
||||||
|
@ -288,7 +289,7 @@ static void parse_cache_line(char *line)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static unsigned long get_top_address(char **envp)
|
static unsigned long __init get_top_address(char **envp)
|
||||||
{
|
{
|
||||||
unsigned long top_addr = (unsigned long) &top_addr;
|
unsigned long top_addr = (unsigned long) &top_addr;
|
||||||
int i;
|
int i;
|
||||||
|
@ -376,9 +377,8 @@ int __init linux_main(int argc, char **argv, char **envp)
|
||||||
iomem_size = (iomem_size + PAGE_SIZE - 1) & PAGE_MASK;
|
iomem_size = (iomem_size + PAGE_SIZE - 1) & PAGE_MASK;
|
||||||
|
|
||||||
max_physmem = TASK_SIZE - uml_physmem - iomem_size - MIN_VMALLOC;
|
max_physmem = TASK_SIZE - uml_physmem - iomem_size - MIN_VMALLOC;
|
||||||
|
if (physmem_size > max_physmem) {
|
||||||
if (physmem_size + iomem_size > max_physmem) {
|
physmem_size = max_physmem;
|
||||||
physmem_size = max_physmem - iomem_size;
|
|
||||||
os_info("Physical memory size shrunk to %llu bytes\n",
|
os_info("Physical memory size shrunk to %llu bytes\n",
|
||||||
physmem_size);
|
physmem_size);
|
||||||
}
|
}
|
||||||
|
|
|
@ -19,13 +19,11 @@
|
||||||
#include <um_malloc.h>
|
#include <um_malloc.h>
|
||||||
#include "internal.h"
|
#include "internal.h"
|
||||||
|
|
||||||
#define PGD_BOUND (4 * 1024 * 1024)
|
|
||||||
#define STACKSIZE (8 * 1024 * 1024)
|
#define STACKSIZE (8 * 1024 * 1024)
|
||||||
#define THREAD_NAME_LEN (256)
|
|
||||||
|
|
||||||
long elf_aux_hwcap;
|
long elf_aux_hwcap;
|
||||||
|
|
||||||
static void set_stklim(void)
|
static void __init set_stklim(void)
|
||||||
{
|
{
|
||||||
struct rlimit lim;
|
struct rlimit lim;
|
||||||
|
|
||||||
|
@ -48,7 +46,7 @@ static void last_ditch_exit(int sig)
|
||||||
exit(1);
|
exit(1);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void install_fatal_handler(int sig)
|
static void __init install_fatal_handler(int sig)
|
||||||
{
|
{
|
||||||
struct sigaction action;
|
struct sigaction action;
|
||||||
|
|
||||||
|
@ -73,7 +71,7 @@ static void install_fatal_handler(int sig)
|
||||||
|
|
||||||
#define UML_LIB_PATH ":" OS_LIB_PATH "/uml"
|
#define UML_LIB_PATH ":" OS_LIB_PATH "/uml"
|
||||||
|
|
||||||
static void setup_env_path(void)
|
static void __init setup_env_path(void)
|
||||||
{
|
{
|
||||||
char *new_path = NULL;
|
char *new_path = NULL;
|
||||||
char *old_path = NULL;
|
char *old_path = NULL;
|
||||||
|
|
|
@ -1,20 +0,0 @@
|
||||||
/*
|
|
||||||
* Copyright (C) 2000 - 2003 Jeff Dike (jdike@addtoit.com)
|
|
||||||
* Copyright 2003 PathScale, Inc.
|
|
||||||
* Licensed under the GPL
|
|
||||||
*/
|
|
||||||
|
|
||||||
#ifndef __UM_ARCHPARAM_H
|
|
||||||
#define __UM_ARCHPARAM_H
|
|
||||||
|
|
||||||
#ifdef CONFIG_X86_32
|
|
||||||
|
|
||||||
#ifdef CONFIG_X86_PAE
|
|
||||||
#define LAST_PKMAP 512
|
|
||||||
#else
|
|
||||||
#define LAST_PKMAP 1024
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#endif
|
|
|
@ -74,8 +74,6 @@ struct uml_pt_regs {
|
||||||
#define UPT_FAULTINFO(r) (&(r)->faultinfo)
|
#define UPT_FAULTINFO(r) (&(r)->faultinfo)
|
||||||
#define UPT_IS_USER(r) ((r)->is_user)
|
#define UPT_IS_USER(r) ((r)->is_user)
|
||||||
|
|
||||||
extern int user_context(unsigned long sp);
|
|
||||||
|
|
||||||
extern int arch_init_registers(int pid);
|
extern int arch_init_registers(int pid);
|
||||||
|
|
||||||
#endif /* __SYSDEP_X86_PTRACE_H */
|
#endif /* __SYSDEP_X86_PTRACE_H */
|
||||||
|
|
|
@ -410,37 +410,32 @@ static const struct file_operations hostfs_dir_fops = {
|
||||||
.fsync = hostfs_fsync,
|
.fsync = hostfs_fsync,
|
||||||
};
|
};
|
||||||
|
|
||||||
static int hostfs_writepage(struct page *page, struct writeback_control *wbc)
|
static int hostfs_writepages(struct address_space *mapping,
|
||||||
|
struct writeback_control *wbc)
|
||||||
{
|
{
|
||||||
struct address_space *mapping = page->mapping;
|
|
||||||
struct inode *inode = mapping->host;
|
struct inode *inode = mapping->host;
|
||||||
|
struct folio *folio = NULL;
|
||||||
|
loff_t i_size = i_size_read(inode);
|
||||||
|
int err = 0;
|
||||||
|
|
||||||
|
while ((folio = writeback_iter(mapping, wbc, folio, &err))) {
|
||||||
|
loff_t pos = folio_pos(folio);
|
||||||
|
size_t count = folio_size(folio);
|
||||||
char *buffer;
|
char *buffer;
|
||||||
loff_t base = page_offset(page);
|
int ret;
|
||||||
int count = PAGE_SIZE;
|
|
||||||
int end_index = inode->i_size >> PAGE_SHIFT;
|
|
||||||
int err;
|
|
||||||
|
|
||||||
if (page->index >= end_index)
|
if (count > i_size - pos)
|
||||||
count = inode->i_size & (PAGE_SIZE-1);
|
count = i_size - pos;
|
||||||
|
|
||||||
buffer = kmap_local_page(page);
|
buffer = kmap_local_folio(folio, 0);
|
||||||
|
ret = write_file(HOSTFS_I(inode)->fd, &pos, buffer, count);
|
||||||
err = write_file(HOSTFS_I(inode)->fd, &base, buffer, count);
|
|
||||||
if (err != count) {
|
|
||||||
if (err >= 0)
|
|
||||||
err = -EIO;
|
|
||||||
mapping_set_error(mapping, err);
|
|
||||||
goto out;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (base > inode->i_size)
|
|
||||||
inode->i_size = base;
|
|
||||||
|
|
||||||
err = 0;
|
|
||||||
|
|
||||||
out:
|
|
||||||
kunmap_local(buffer);
|
kunmap_local(buffer);
|
||||||
unlock_page(page);
|
folio_unlock(folio);
|
||||||
|
if (ret != count) {
|
||||||
|
err = ret < 0 ? ret : -EIO;
|
||||||
|
mapping_set_error(mapping, err);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
return err;
|
return err;
|
||||||
}
|
}
|
||||||
|
@ -506,11 +501,12 @@ static int hostfs_write_end(struct file *file, struct address_space *mapping,
|
||||||
}
|
}
|
||||||
|
|
||||||
static const struct address_space_operations hostfs_aops = {
|
static const struct address_space_operations hostfs_aops = {
|
||||||
.writepage = hostfs_writepage,
|
.writepages = hostfs_writepages,
|
||||||
.read_folio = hostfs_read_folio,
|
.read_folio = hostfs_read_folio,
|
||||||
.dirty_folio = filemap_dirty_folio,
|
.dirty_folio = filemap_dirty_folio,
|
||||||
.write_begin = hostfs_write_begin,
|
.write_begin = hostfs_write_begin,
|
||||||
.write_end = hostfs_write_end,
|
.write_end = hostfs_write_end,
|
||||||
|
.migrate_folio = filemap_migrate_folio,
|
||||||
};
|
};
|
||||||
|
|
||||||
static int hostfs_inode_update(struct inode *ino, const struct hostfs_stat *st)
|
static int hostfs_inode_update(struct inode *ino, const struct hostfs_stat *st)
|
||||||
|
|
Loading…
Add table
Reference in a new issue