linux 2.6.16.38 w/ vs2.0.3-rc1
[linux-2.6.git] / fs / autofs4 / autofs_i.h
index 47e38f3..385bed0 100644 (file)
@@ -3,7 +3,6 @@
  * linux/fs/autofs/autofs_i.h
  *
  *   Copyright 1997-1998 Transmeta Corporation - All Rights Reserved
- *   Copyright 2005-2006 Ian Kent <raven@themaw.net>
  *
  * 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
@@ -14,7 +13,6 @@
 /* Internal header file for autofs */
 
 #include <linux/auto_fs4.h>
-#include <linux/mutex.h>
 #include <linux/list.h>
 
 /* This is the range of ioctl() numbers we claim as ours */
 
 #define AUTOFS_SUPER_MAGIC 0x0187
 
+/*
+ * If the daemon returns a negative response (AUTOFS_IOC_FAIL) then the
+ * kernel will keep the negative response cached for up to the time given
+ * here, although the time can be shorter if the kernel throws the dcache
+ * entry away.  This probably should be settable from user space.
+ */
+#define AUTOFS_NEGATIVE_TIMEOUT (60*HZ)        /* 1 minute */
+
 /* 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
@@ -56,7 +62,6 @@ struct autofs_info {
 
        struct autofs_sb_info *sbi;
        unsigned long last_used;
-       atomic_t count;
 
        mode_t  mode;
        size_t  size;
@@ -74,42 +79,30 @@ struct autofs_wait_queue {
        struct autofs_wait_queue *next;
        autofs_wqt_t wait_queue_token;
        /* We use the following to see what we are waiting for */
-       unsigned int hash;
-       unsigned int len;
+       int hash;
+       int len;
        char *name;
-       u32 dev;
-       u64 ino;
-       uid_t uid;
-       gid_t gid;
-       pid_t pid;
-       pid_t tgid;
        /* This is for status reporting upon return */
        int status;
+       atomic_t notified;
        atomic_t wait_ctr;
 };
 
 #define AUTOFS_SBI_MAGIC 0x6d4a556d
 
-#define AUTOFS_TYPE_INDIRECT     0x0001
-#define AUTOFS_TYPE_DIRECT       0x0002
-#define AUTOFS_TYPE_OFFSET       0x0004
-
 struct autofs_sb_info {
        u32 magic;
-       int pipefd;
+       struct dentry *root;
        struct file *pipe;
        pid_t oz_pgrp;
        int catatonic;
        int version;
        int sub_version;
-       int min_proto;
-       int max_proto;
        unsigned long exp_timeout;
-       unsigned int type;
        int reghost_enabled;
        int needs_reghost;
        struct super_block *sb;
-       struct mutex wq_mutex;
+       struct semaphore wq_sem;
        spinlock_t fs_lock;
        struct autofs_wait_queue *queues; /* Wait queue pointer */
 };
@@ -172,10 +165,8 @@ int autofs4_expire_multi(struct super_block *, struct vfsmount *,
 extern struct inode_operations autofs4_symlink_inode_operations;
 extern struct inode_operations autofs4_dir_inode_operations;
 extern struct inode_operations autofs4_root_inode_operations;
-extern struct inode_operations autofs4_indirect_root_inode_operations;
-extern struct inode_operations autofs4_direct_root_inode_operations;
-extern const struct file_operations autofs4_dir_operations;
-extern const struct file_operations autofs4_root_operations;
+extern struct file_operations autofs4_dir_operations;
+extern struct file_operations autofs4_root_operations;
 
 /* Initializing function */
 
@@ -184,6 +175,13 @@ struct autofs_info *autofs4_init_ino(struct autofs_info *, struct autofs_sb_info
 
 /* Queue management functions */
 
+enum autofs_notify
+{
+       NFY_NONE,
+       NFY_MOUNT,
+       NFY_EXPIRE
+};
+
 int autofs4_wait(struct autofs_sb_info *,struct dentry *, enum autofs_notify);
 int autofs4_wait_release(struct autofs_sb_info *,autofs_wqt_t,int);
 void autofs4_catatonic_mode(struct autofs_sb_info *);
@@ -201,22 +199,12 @@ static inline int autofs4_follow_mount(struct vfsmount **mnt, struct dentry **de
        return res;
 }
 
-static inline u32 autofs4_get_dev(struct autofs_sb_info *sbi)
-{
-       return new_encode_dev(sbi->sb->s_dev);
-}
-
-static inline u64 autofs4_get_ino(struct autofs_sb_info *sbi)
-{
-       return sbi->sb->s_root->d_inode->i_ino;
-}
-
 static inline int simple_positive(struct dentry *dentry)
 {
        return dentry->d_inode && !d_unhashed(dentry);
 }
 
-static inline int __simple_empty(struct dentry *dentry)
+static inline int simple_empty_nolock(struct dentry *dentry)
 {
        struct dentry *child;
        int ret = 0;
@@ -228,6 +216,3 @@ static inline int __simple_empty(struct dentry *dentry)
 out:
        return ret;
 }
-
-void autofs4_dentry_release(struct dentry *);
-extern void autofs4_kill_sb(struct super_block *);