From 1604fe0b4b52e823fd1514e44e9086209facb5f5 Mon Sep 17 00:00:00 2001 From: Xiang Xiao Date: Sun, 3 Jan 2021 02:35:06 +0800 Subject: [PATCH] fs: Remove file_detach since it is unefficient to call open and file_detach the kernel user should call file_open directly instead Signed-off-by: Xiang Xiao Change-Id: I5bf7f661006f5d43739bc8618abfb4b983fde78d --- fs/inode/Make.defs | 1 - fs/inode/fs_filedetach.c | 147 --------------------------------------- fs/vfs/fs_close.c | 5 +- include/nuttx/fs/fs.h | 31 +-------- 4 files changed, 4 insertions(+), 180 deletions(-) delete mode 100644 fs/inode/fs_filedetach.c diff --git a/fs/inode/Make.defs b/fs/inode/Make.defs index d019c5cbd1..67c4549405 100644 --- a/fs/inode/Make.defs +++ b/fs/inode/Make.defs @@ -36,7 +36,6 @@ CSRCS += fs_files.c fs_foreachinode.c fs_inode.c fs_inodeaddref.c CSRCS += fs_inodebasename.c fs_inodefind.c fs_inodefree.c fs_inoderelease.c CSRCS += fs_inoderemove.c fs_inodereserve.c fs_inodesearch.c -CSRCS += fs_filedetach.c # Include inode/utils build support diff --git a/fs/inode/fs_filedetach.c b/fs/inode/fs_filedetach.c deleted file mode 100644 index 227f97bda7..0000000000 --- a/fs/inode/fs_filedetach.c +++ /dev/null @@ -1,147 +0,0 @@ -/**************************************************************************** - * fs/inode/fs_filedetach.c - * - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. The - * ASF licenses this file to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance with the - * License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations - * under the License. - * - ****************************************************************************/ - -/**************************************************************************** - * Included Files - ****************************************************************************/ - -#include - -#include -#include - -#include -#include -#include - -#include "inode/inode.h" - -/**************************************************************************** - * Private Functions - ****************************************************************************/ - -/**************************************************************************** - * Name: _files_semtake - ****************************************************************************/ - -static inline int _files_semtake(FAR struct filelist *list) -{ - return nxsem_wait_uninterruptible(&list->fl_sem); -} - -/**************************************************************************** - * Name: _files_semgive - ****************************************************************************/ - -#define _files_semgive(list) nxsem_post(&list->fl_sem) - -/**************************************************************************** - * Public Functions - ****************************************************************************/ - -/**************************************************************************** - * Name: file_detach - * - * Description: - * This function is used in device drivers to create a task-independent - * handle to an entity in the file system. file_detach() duplicates the - * 'struct file' that underlies the file descriptor, then closes the file - * descriptor. - * - * This function will fail if fd is not a valid file descriptor. In - * particular, it will fail if fd is a socket descriptor. - * - * Input Parameters: - * fd - The file descriptor to be detached. This descriptor will be - * closed and invalid if the file was successfully detached. - * filep - A pointer to a user provided memory location in which to - * received the duplicated, detached file structure. - * - * Returned Value: - * Zero (OK) is returned on success; A negated errno value is returned on - * any failure to indicate the nature of the failure. - * - ****************************************************************************/ - -int file_detach(int fd, FAR struct file *filep) -{ - FAR struct filelist *list; - FAR struct file *parent; - int ret; - - DEBUGASSERT(filep != NULL); - - /* Verify the file descriptor range */ - - if (fd < 0 || fd >= CONFIG_NFILE_DESCRIPTORS) - { - /* Not a file descriptor (might be a socket descriptor) */ - - return -EBADF; - } - - /* Get the thread-specific file list. It should never be NULL in this - * context. - */ - - list = nxsched_get_files(); - DEBUGASSERT(list != NULL); - - /* If the file was properly opened, there should be an inode assigned */ - - ret = _files_semtake(list); - if (ret < 0) - { - /* Probably canceled */ - - return ret; - } - - parent = &list->fl_files[fd]; - if (parent->f_inode == NULL) - { - /* File is not open */ - - _files_semgive(list); - return -EBADF; - } - - /* Duplicate the 'struct file' content into the user-provided file - * structure. - */ - - filep->f_oflags = parent->f_oflags; - filep->f_pos = parent->f_pos; - filep->f_inode = parent->f_inode; - filep->f_priv = parent->f_priv; - - /* Release the file descriptor *without* calling the driver close method - * and without decrementing the inode reference count. That will be done - * in file_close(). - */ - - parent->f_oflags = 0; - parent->f_pos = 0; - parent->f_inode = NULL; - parent->f_priv = NULL; - - _files_semgive(list); - return OK; -} diff --git a/fs/vfs/fs_close.c b/fs/vfs/fs_close.c index 89c4fd8c33..4f7eec8fe5 100644 --- a/fs/vfs/fs_close.c +++ b/fs/vfs/fs_close.c @@ -60,12 +60,11 @@ * Name: file_close * * Description: - * Close a file that was previously opend with file_open() (or detached - * with file_detach()). + * Close a file that was previously opened with file_open(). * * Input Parameters: * filep - A pointer to a user provided memory location containing the - * open file data returned by file_detach(). + * open file data returned by file_open(). * * Returned Value: * Zero (OK) is returned on success; A negated errno value is returned on diff --git a/include/nuttx/fs/fs.h b/include/nuttx/fs/fs.h index e69c8e2771..cc8b3cae4a 100644 --- a/include/nuttx/fs/fs.h +++ b/include/nuttx/fs/fs.h @@ -881,42 +881,15 @@ int nx_open(FAR const char *path, int oflags, ...); int fs_getfilep(int fd, FAR struct file **filep); -/**************************************************************************** - * Name: file_detach - * - * Description: - * This function is used to device drivers to create a task-independent - * handle to an entity in the file system. file_detach() duplicates the - * 'struct file' that underlies the file descriptor, then closes the file - * descriptor. - * - * This function will fail if fd is not a valid file descriptor. In - * particular, it will fail if fd is a socket descriptor. - * - * Input Parameters: - * fd - The file descriptor to be detached. This descriptor will be - * closed and invalid if the file was successfully detached. - * filep - A pointer to a user provided memory location in which to - * received the duplicated, detached file structure. - * - * Returned Value: - * Zero (OK) is returned on success; A negated errno value is returned on - * any failure to indicate the nature of the failure. - * - ****************************************************************************/ - -int file_detach(int fd, FAR struct file *filep); - /**************************************************************************** * Name: file_close * * Description: - * Close a file that was previously opened with file_open() (or detached - * with file_detach()). + * Close a file that was previously opened with file_open(). * * Input Parameters: * filep - A pointer to a user provided memory location containing the - * open file data returned by file_detach(). + * open file data returned by file_open(). * * Returned Value: * Zero (OK) is returned on success; A negated errno value is returned on