fb7f99efe2
Unmaintained is a name which on multiple occasions have seen lead to confusion with people having the impression that unmaintained is for all unmaintained devices, which is not how we're really using it. Many devices in testing do not actually have a maintainer, yet there has been no push to move these out of there and into unmaintained. I think this is a result of that unmaintained was introduced not to keep unmaintained ports but rather a place to store ports that have a better replacement but where the inferior one still holds some sort of value, such as for debugging purposes. These ports also are not necessarily entirely unmaintained and see more fixes than many ports in testing. While one approach to solving this problem could be to simply moving all unmaintained ports to unmaintained, I think this comes with some problems: It would require an initial effort to figure out which ports are indeed unmaintained and which just don't have a maintained noted in the package, and given how many ports there are in testing this would be a big endeavour. It would also require continuous work on moving ports into unmaintained as the maintainers go silent if we are to keep testing and unmaintained's state consistent with reality. Additionally, just because a port doesn't have a maintainer on paper doens't mean that there aren't people who aren't willing to fix it up if there are issues that arise. As such, I think the way to go is renaming unmaintained to better reflect the original intent. Thanks to Luca Weiss for suggesting "archive", and to Arnav Singh for suggesting that "archived" would match the other category names better.
101 lines
2.9 KiB
Diff
101 lines
2.9 KiB
Diff
From 71846fb0e72ac8f7c05ca85f28b50cae4703acfc Mon Sep 17 00:00:00 2001
|
|
From: Al Viro <viro@zeniv.linux.org.uk>
|
|
Date: Mon, 1 Jul 2019 23:47:19 +0300
|
|
Subject: [PATCH 1/5] cache the value of file_inode() in struct file
|
|
|
|
Note that this thing does *not* contribute to inode refcount;
|
|
it's pinned down by dentry.
|
|
|
|
Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
|
|
---
|
|
fs/f2fs/f2fs.h | 3 ++-
|
|
fs/file_table.c | 2 ++
|
|
fs/open.c | 2 ++
|
|
include/linux/fs.h | 7 +++++++
|
|
4 files changed, 13 insertions(+), 1 deletion(-)
|
|
|
|
diff --git a/fs/f2fs/f2fs.h b/fs/f2fs/f2fs.h
|
|
index 6ef8c890a57..2b511f8a416 100644
|
|
--- a/fs/f2fs/f2fs.h
|
|
+++ b/fs/f2fs/f2fs.h
|
|
@@ -1844,10 +1844,11 @@ static inline bool f2fs_cp_error(struct f2fs_sb_info *sbi)
|
|
return is_set_ckpt_flags(sbi->ckpt, CP_ERROR_FLAG);
|
|
}
|
|
|
|
+/* Implementation of file_inode added to include/linux/fs.h
|
|
static inline struct inode *file_inode(struct file *f)
|
|
{
|
|
return f->f_path.dentry->d_inode;
|
|
-}
|
|
+}*/
|
|
|
|
static inline bool is_dot_dotdot(const struct qstr *str)
|
|
{
|
|
diff --git a/fs/file_table.c b/fs/file_table.c
|
|
index a01710a6ff3..07838af0737 100644
|
|
--- a/fs/file_table.c
|
|
+++ b/fs/file_table.c
|
|
@@ -172,6 +172,7 @@ struct file *alloc_file(struct path *path, fmode_t mode,
|
|
return NULL;
|
|
|
|
file->f_path = *path;
|
|
+ file->f_inode = path->dentry->d_inode;
|
|
file->f_mapping = path->dentry->d_inode->i_mapping;
|
|
file->f_mode = mode;
|
|
file->f_op = fop;
|
|
@@ -254,6 +255,7 @@ static void __fput(struct file *file)
|
|
drop_file_write_access(file);
|
|
file->f_path.dentry = NULL;
|
|
file->f_path.mnt = NULL;
|
|
+ file->f_inode = NULL;
|
|
file_free(file);
|
|
dput(dentry);
|
|
mntput(mnt);
|
|
diff --git a/fs/open.c b/fs/open.c
|
|
index 3f716e9b896..2388e788e10 100644
|
|
--- a/fs/open.c
|
|
+++ b/fs/open.c
|
|
@@ -673,6 +673,7 @@ static struct file *__dentry_open(struct dentry *dentry, struct vfsmount *mnt,
|
|
f->f_mode = FMODE_PATH;
|
|
|
|
inode = dentry->d_inode;
|
|
+ f->f_inode = dentry->d_inode;
|
|
if (f->f_mode & FMODE_WRITE) {
|
|
error = __get_file_write_access(inode, mnt);
|
|
if (error)
|
|
@@ -748,6 +749,7 @@ cleanup_all:
|
|
}
|
|
f->f_path.dentry = NULL;
|
|
f->f_path.mnt = NULL;
|
|
+ f->f_inode = NULL;
|
|
cleanup_file:
|
|
put_filp(f);
|
|
dput(dentry);
|
|
diff --git a/include/linux/fs.h b/include/linux/fs.h
|
|
index ef6e82ce1c1..11265501da0 100644
|
|
--- a/include/linux/fs.h
|
|
+++ b/include/linux/fs.h
|
|
@@ -1029,6 +1029,7 @@ struct file {
|
|
struct path f_path;
|
|
#define f_dentry f_path.dentry
|
|
#define f_vfsmnt f_path.mnt
|
|
+ struct inode *f_inode; /* cached value */
|
|
const struct file_operations *f_op;
|
|
|
|
/*
|
|
@@ -2304,6 +2305,12 @@ static inline bool execute_ok(struct inode *inode)
|
|
return (inode->i_mode & S_IXUGO) || S_ISDIR(inode->i_mode);
|
|
}
|
|
|
|
+static inline struct inode *file_inode(struct file *f)
|
|
+{
|
|
+ /* return f->f_path.dentry->d_inode; / can also use this */
|
|
+ return f->f_inode;
|
|
+}
|
|
+
|
|
/*
|
|
* get_write_access() gets write permission for a file.
|
|
* put_write_access() releases this write permission.
|
|
--
|
|
2.20.1
|
|
|