[PATCH 03/10] autofs - copy autofs4 to autofs

2018-05-13 Thread Ian Kent
Copy source files from the autofs4 directory to the autofs directory.

Signed-off-by: Ian Kent 
---
 fs/autofs/autofs_i.h  |  273 ++
 fs/autofs/dev-ioctl.c |  761 
 fs/autofs/expire.c|  632 +
 fs/autofs/init.c  |   48 ++
 fs/autofs/inode.c |  375 
 fs/autofs/root.c  |  942 +
 fs/autofs/symlink.c   |   29 ++
 fs/autofs/waitq.c |  559 +
 8 files changed, 3619 insertions(+)
 create mode 100644 fs/autofs/autofs_i.h
 create mode 100644 fs/autofs/dev-ioctl.c
 create mode 100644 fs/autofs/expire.c
 create mode 100644 fs/autofs/init.c
 create mode 100644 fs/autofs/inode.c
 create mode 100644 fs/autofs/root.c
 create mode 100644 fs/autofs/symlink.c
 create mode 100644 fs/autofs/waitq.c

diff --git a/fs/autofs/autofs_i.h b/fs/autofs/autofs_i.h
new file mode 100644
index ..9110b66c7ef1
--- /dev/null
+++ b/fs/autofs/autofs_i.h
@@ -0,0 +1,273 @@
+/*
+ *  Copyright 1997-1998 Transmeta Corporation - All Rights Reserved
+ *  Copyright 2005-2006 Ian Kent 
+ *
+ * This file is part of the Linux kernel and is made available under
+ * the terms of the GNU General Public License, version 2, or at your
+ * option, any later version, incorporated herein by reference.
+ */
+
+/* Internal header file for autofs */
+
+#include 
+#include 
+
+#include 
+#include 
+#include 
+#include 
+#include 
+#include 
+#include 
+#include 
+#include 
+#include 
+#include 
+#include 
+#include 
+#include 
+
+/* This is the range of ioctl() numbers we claim as ours */
+#define AUTOFS_IOC_FIRST AUTOFS_IOC_READY
+#define AUTOFS_IOC_COUNT 32
+
+#define AUTOFS_DEV_IOCTL_IOC_FIRST (AUTOFS_DEV_IOCTL_VERSION)
+#define AUTOFS_DEV_IOCTL_IOC_COUNT \
+   (AUTOFS_DEV_IOCTL_ISMOUNTPOINT_CMD - AUTOFS_DEV_IOCTL_VERSION_CMD)
+
+#ifdef pr_fmt
+#undef pr_fmt
+#endif
+#define pr_fmt(fmt) KBUILD_MODNAME ":pid:%d:%s: " fmt, current->pid, __func__
+
+/*
+ * Unified info structure.  This is pointed to by both the dentry and
+ * inode structures.  Each file in the filesystem has an instance of this
+ * structure.  It holds a reference to the dentry, so dentries are never
+ * flushed while the file exists.  All name lookups are dealt with at the
+ * dentry level, although the filesystem can interfere in the validation
+ * process.  Readdir is implemented by traversing the dentry lists.
+ */
+struct autofs_info {
+   struct dentry   *dentry;
+   struct inode*inode;
+
+   int flags;
+
+   struct completion expire_complete;
+
+   struct list_head active;
+   int active_count;
+
+   struct list_head expiring;
+
+   struct autofs_sb_info *sbi;
+   unsigned long last_used;
+   atomic_t count;
+
+   kuid_t uid;
+   kgid_t gid;
+};
+
+#define AUTOFS_INF_EXPIRING(1<<0) /* dentry in the process of expiring */
+#define AUTOFS_INF_WANT_EXPIRE (1<<1) /* the dentry is being considered
+   * for expiry, so RCU_walk is
+   * not permitted.  If it progresses to
+   * actual expiry attempt, the flag is
+   * not cleared when EXPIRING is set -
+   * in that case it gets cleared only
+   * when it comes to clearing EXPIRING.
+   */
+#define AUTOFS_INF_PENDING (1<<2) /* dentry pending mount */
+
+struct autofs_wait_queue {
+   wait_queue_head_t queue;
+   struct autofs_wait_queue *next;
+   autofs_wqt_t wait_queue_token;
+   /* We use the following to see what we are waiting for */
+   struct qstr name;
+   u32 dev;
+   u64 ino;
+   kuid_t uid;
+   kgid_t gid;
+   pid_t pid;
+   pid_t tgid;
+   /* This is for status reporting upon return */
+   int status;
+   unsigned int wait_ctr;
+};
+
+#define AUTOFS_SBI_MAGIC 0x6d4a556d
+
+struct autofs_sb_info {
+   u32 magic;
+   int pipefd;
+   struct file *pipe;
+   struct pid *oz_pgrp;
+   int catatonic;
+   int version;
+   int sub_version;
+   int min_proto;
+   int max_proto;
+   unsigned long exp_timeout;
+   unsigned int type;
+   struct super_block *sb;
+   struct mutex wq_mutex;
+   struct mutex pipe_mutex;
+   spinlock_t fs_lock;
+   struct autofs_wait_queue *queues; /* Wait queue pointer */
+   spinlock_t lookup_lock;
+   struct list_head active_list;
+   struct list_head expiring_list;
+   struct rcu_head rcu;
+};
+
+static inline struct autofs_sb_info *autofs_sbi(struct super_block *sb)
+{
+   return (struct autofs_sb_info *)(sb->s_fs_info);
+}
+
+static inline struct autofs_info *autofs_dentry_ino(struct dentry *dentry)

[PATCH 03/10] autofs - copy autofs4 to autofs

2018-05-13 Thread Ian Kent
Copy source files from the autofs4 directory to the autofs directory.

Signed-off-by: Ian Kent 
---
 fs/autofs/autofs_i.h  |  273 ++
 fs/autofs/dev-ioctl.c |  761 
 fs/autofs/expire.c|  632 +
 fs/autofs/init.c  |   48 ++
 fs/autofs/inode.c |  375 
 fs/autofs/root.c  |  942 +
 fs/autofs/symlink.c   |   29 ++
 fs/autofs/waitq.c |  559 +
 8 files changed, 3619 insertions(+)
 create mode 100644 fs/autofs/autofs_i.h
 create mode 100644 fs/autofs/dev-ioctl.c
 create mode 100644 fs/autofs/expire.c
 create mode 100644 fs/autofs/init.c
 create mode 100644 fs/autofs/inode.c
 create mode 100644 fs/autofs/root.c
 create mode 100644 fs/autofs/symlink.c
 create mode 100644 fs/autofs/waitq.c

diff --git a/fs/autofs/autofs_i.h b/fs/autofs/autofs_i.h
new file mode 100644
index ..9110b66c7ef1
--- /dev/null
+++ b/fs/autofs/autofs_i.h
@@ -0,0 +1,273 @@
+/*
+ *  Copyright 1997-1998 Transmeta Corporation - All Rights Reserved
+ *  Copyright 2005-2006 Ian Kent 
+ *
+ * This file is part of the Linux kernel and is made available under
+ * the terms of the GNU General Public License, version 2, or at your
+ * option, any later version, incorporated herein by reference.
+ */
+
+/* Internal header file for autofs */
+
+#include 
+#include 
+
+#include 
+#include 
+#include 
+#include 
+#include 
+#include 
+#include 
+#include 
+#include 
+#include 
+#include 
+#include 
+#include 
+#include 
+
+/* This is the range of ioctl() numbers we claim as ours */
+#define AUTOFS_IOC_FIRST AUTOFS_IOC_READY
+#define AUTOFS_IOC_COUNT 32
+
+#define AUTOFS_DEV_IOCTL_IOC_FIRST (AUTOFS_DEV_IOCTL_VERSION)
+#define AUTOFS_DEV_IOCTL_IOC_COUNT \
+   (AUTOFS_DEV_IOCTL_ISMOUNTPOINT_CMD - AUTOFS_DEV_IOCTL_VERSION_CMD)
+
+#ifdef pr_fmt
+#undef pr_fmt
+#endif
+#define pr_fmt(fmt) KBUILD_MODNAME ":pid:%d:%s: " fmt, current->pid, __func__
+
+/*
+ * Unified info structure.  This is pointed to by both the dentry and
+ * inode structures.  Each file in the filesystem has an instance of this
+ * structure.  It holds a reference to the dentry, so dentries are never
+ * flushed while the file exists.  All name lookups are dealt with at the
+ * dentry level, although the filesystem can interfere in the validation
+ * process.  Readdir is implemented by traversing the dentry lists.
+ */
+struct autofs_info {
+   struct dentry   *dentry;
+   struct inode*inode;
+
+   int flags;
+
+   struct completion expire_complete;
+
+   struct list_head active;
+   int active_count;
+
+   struct list_head expiring;
+
+   struct autofs_sb_info *sbi;
+   unsigned long last_used;
+   atomic_t count;
+
+   kuid_t uid;
+   kgid_t gid;
+};
+
+#define AUTOFS_INF_EXPIRING(1<<0) /* dentry in the process of expiring */
+#define AUTOFS_INF_WANT_EXPIRE (1<<1) /* the dentry is being considered
+   * for expiry, so RCU_walk is
+   * not permitted.  If it progresses to
+   * actual expiry attempt, the flag is
+   * not cleared when EXPIRING is set -
+   * in that case it gets cleared only
+   * when it comes to clearing EXPIRING.
+   */
+#define AUTOFS_INF_PENDING (1<<2) /* dentry pending mount */
+
+struct autofs_wait_queue {
+   wait_queue_head_t queue;
+   struct autofs_wait_queue *next;
+   autofs_wqt_t wait_queue_token;
+   /* We use the following to see what we are waiting for */
+   struct qstr name;
+   u32 dev;
+   u64 ino;
+   kuid_t uid;
+   kgid_t gid;
+   pid_t pid;
+   pid_t tgid;
+   /* This is for status reporting upon return */
+   int status;
+   unsigned int wait_ctr;
+};
+
+#define AUTOFS_SBI_MAGIC 0x6d4a556d
+
+struct autofs_sb_info {
+   u32 magic;
+   int pipefd;
+   struct file *pipe;
+   struct pid *oz_pgrp;
+   int catatonic;
+   int version;
+   int sub_version;
+   int min_proto;
+   int max_proto;
+   unsigned long exp_timeout;
+   unsigned int type;
+   struct super_block *sb;
+   struct mutex wq_mutex;
+   struct mutex pipe_mutex;
+   spinlock_t fs_lock;
+   struct autofs_wait_queue *queues; /* Wait queue pointer */
+   spinlock_t lookup_lock;
+   struct list_head active_list;
+   struct list_head expiring_list;
+   struct rcu_head rcu;
+};
+
+static inline struct autofs_sb_info *autofs_sbi(struct super_block *sb)
+{
+   return (struct autofs_sb_info *)(sb->s_fs_info);
+}
+
+static inline struct autofs_info *autofs_dentry_ino(struct dentry *dentry)
+{
+   return (struct autofs_info