From ab67d6a75bdeb6b219c064a15188b188e84a9e6a Mon Sep 17 00:00:00 2001 From: Xiang Xiao Date: Wed, 11 Jan 2023 00:48:45 +0800 Subject: [PATCH] fs/mmap: Remove the duplication rammap handling and minor ifx for style and format Signed-off-by: Xiang Xiao --- fs/mmap/fs_mmap.c | 37 ++++++------------------------------- fs/mmap/fs_rammap.c | 19 +++++++++---------- fs/mmap/fs_rammap.h | 4 +++- 3 files changed, 18 insertions(+), 42 deletions(-) diff --git a/fs/mmap/fs_mmap.c b/fs/mmap/fs_mmap.c index b979805b6d..a533602f76 100644 --- a/fs/mmap/fs_mmap.c +++ b/fs/mmap/fs_mmap.c @@ -85,15 +85,6 @@ static int file_mmap_(FAR struct file *filep, FAR void *start, return -ENOSYS; } -#ifndef CONFIG_FS_RAMMAP - if ((flags & MAP_PRIVATE) != 0) - { - ferr("ERROR: MAP_PRIVATE is not supported without file mapping" - "emulation\n"); - return -ENOSYS; - } -#endif /* CONFIG_FS_RAMMAP */ - /* A length of 0 is invalid. */ if (length == 0) @@ -103,8 +94,7 @@ static int file_mmap_(FAR struct file *filep, FAR void *start, } #endif /* CONFIG_DEBUG_FEATURES */ - if ((filep->f_oflags & O_WROK) == 0 && prot == PROT_WRITE && - (flags & MAP_SHARED) != 0) + if ((filep->f_oflags & O_WROK) == 0 && prot == PROT_WRITE) { ferr("ERROR: Unsupported options for read-only file descriptor," "prot=%x flags=%04x\n", prot, flags); @@ -128,45 +118,30 @@ static int file_mmap_(FAR struct file *filep, FAR void *start, return map_anonymous(&entry, kernel); } - if ((flags & MAP_PRIVATE) != 0) - { -#ifdef CONFIG_FS_RAMMAP - /* Allocate memory and copy the file into memory. We would, of course, - * do much better in the KERNEL build using the MMU. - */ - - return rammap(filep, &entry, kernel); -#endif - } - /* Call driver's mmap to get the base address of the file in 'mapped' * in memory. */ - if (filep->f_inode && filep->f_inode->u.i_ops->mmap != NULL) + if ((flags & MAP_PRIVATE) == 0 && filep->f_inode && + filep->f_inode->u.i_ops->mmap != NULL) { ret = filep->f_inode->u.i_ops->mmap(filep, &entry); if (ret == OK) { - *mapped = (void *)entry.vaddr; + *mapped = entry.vaddr; } } else { - /* Not directly mappable, probably because the underlying media does - * not support random access. + /* Caller request the private mapping. Or not directly mappable, + * probably because the underlying media doesn't support random access. */ -#ifdef CONFIG_FS_RAMMAP /* Allocate memory and copy the file into memory. We would, of course, * do much better in the KERNEL build using the MMU. */ return rammap(filep, &entry, kernel); -#else - ferr("ERROR: mmap not supported \n"); - return -ENOSYS; -#endif } /* Return */ diff --git a/fs/mmap/fs_rammap.c b/fs/mmap/fs_rammap.c index 5e346b8a5e..16ea937659 100644 --- a/fs/mmap/fs_rammap.c +++ b/fs/mmap/fs_rammap.c @@ -51,9 +51,9 @@ static int unmap_rammap(FAR struct task_group_s *group, size_t length) { FAR void *newaddr; - unsigned int offset; - bool kernel = entry->priv.i != 0 ? true : false; - int ret; + off_t offset; + bool kernel = entry->priv.i; + int ret = OK; /* Get the offset from the beginning of the region and the actual number * of bytes to "unmap". All mappings must extend to the end of the region. @@ -111,9 +111,8 @@ static int unmap_rammap(FAR struct task_group_s *group, } DEBUGASSERT(newaddr == entry->vaddr); - UNUSED(newaddr); /* May not be used */ + entry->vaddr = newaddr; entry->length = length; - ret = OK; } return ret; @@ -176,7 +175,7 @@ int rammap(FAR struct file *filep, FAR struct mm_map_entry_s *entry, rdbuffer = kernel ? kmm_malloc(length) : kumm_malloc(length); if (!rdbuffer) { - ferr("ERROR: Region allocation failed, length: %d\n", (int)length); + ferr("ERROR: Region allocation failed, length: %zu\n", length); return -ENOMEM; } @@ -189,7 +188,7 @@ int rammap(FAR struct file *filep, FAR struct mm_map_entry_s *entry, * the correct response. */ - ferr("ERROR: Seek to position %d failed\n", (int)entry->offset); + ferr("ERROR: Seek to position %zu failed\n", (size_t)entry->offset); ret = fpos; goto errout_with_region; } @@ -209,8 +208,8 @@ int rammap(FAR struct file *filep, FAR struct mm_map_entry_s *entry, { /* All other read errors are bad. */ - ferr("ERROR: Read failed: offset=%d ret=%d\n", - (int)entry->offset, (int)nread); + ferr("ERROR: Read failed: offset=%zu ret=%zd\n", + (size_t)entry->offset, nread); ret = nread; goto errout_with_region; @@ -237,7 +236,7 @@ int rammap(FAR struct file *filep, FAR struct mm_map_entry_s *entry, /* Add the buffer to the list of regions */ entry->vaddr = rdbuffer; - entry->priv.i = kernel ? 1 : 0; + entry->priv.i = kernel; entry->munmap = unmap_rammap; ret = mm_map_add(entry); diff --git a/fs/mmap/fs_rammap.h b/fs/mmap/fs_rammap.h index a3c0a49fa1..32fc0c132b 100644 --- a/fs/mmap/fs_rammap.h +++ b/fs/mmap/fs_rammap.h @@ -89,6 +89,8 @@ int rammap(FAR struct file *filep, FAR struct mm_map_entry_s *entry, bool kernel); - +#else +# define rammap(file, entry, kernel) (-ENOSYS) #endif /* CONFIG_FS_RAMMAP */ + #endif /* __FS_MMAP_FS_RAMMAP_H */