X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;f=fs%2Fautofs4%2Fautofs_i.h;h=f5a52c87172621b135eaaf044ed248892711abe2;hb=c7b5ebbddf7bcd3651947760f423e3783bbe6573;hp=0a4b954171226a6b7ca3904356fe9887a299983e;hpb=5273a3df6485dc2ad6aa7ddd441b9a21970f003b;p=linux-2.6.git diff --git a/fs/autofs4/autofs_i.h b/fs/autofs4/autofs_i.h index 0a4b95417..f5a52c871 100644 --- a/fs/autofs4/autofs_i.h +++ b/fs/autofs4/autofs_i.h @@ -25,15 +25,17 @@ #include #include #include +#include +#include #include #include /* #define DEBUG */ #ifdef DEBUG -#define DPRINTK(D) do{ printk("pid %d: ", current->pid); printk D; } while(0) +#define DPRINTK(fmt,args...) do { printk(KERN_DEBUG "pid %d: %s: " fmt "\n" , current->pid , __FUNCTION__ , ##args); } while(0) #else -#define DPRINTK(D) do {} while(0) +#define DPRINTK(fmt,args...) do {} while(0) #endif #define AUTOFS_SUPER_MAGIC 0x0187 @@ -82,7 +84,7 @@ struct autofs_wait_queue { char *name; /* This is for status reporting upon return */ int status; - int wait_ctr; + atomic_t wait_ctr; }; #define AUTOFS_SBI_MAGIC 0x6d4a556d @@ -93,8 +95,12 @@ struct autofs_sb_info { pid_t oz_pgrp; int catatonic; int version; + int sub_version; unsigned long exp_timeout; + int reghost_enabled; + int needs_reghost; struct super_block *sb; + struct semaphore wq_sem; struct autofs_wait_queue *queues; /* Wait queue pointer */ }; @@ -125,22 +131,29 @@ static inline int autofs4_ispending(struct dentry *dentry) (inf != NULL && inf->flags & AUTOFS_INF_EXPIRING); } +static inline void autofs4_copy_atime(struct file *src, struct file *dst) +{ + dst->f_dentry->d_inode->i_atime = src->f_dentry->d_inode->i_atime; + return; +} + struct inode *autofs4_get_inode(struct super_block *, struct autofs_info *); -struct autofs_info *autofs4_init_inf(struct autofs_sb_info *, mode_t mode); void autofs4_free_ino(struct autofs_info *); /* Expiration */ int is_autofs4_dentry(struct dentry *); int autofs4_expire_run(struct super_block *, struct vfsmount *, - struct autofs_sb_info *, struct autofs_packet_expire *); + struct autofs_sb_info *, + struct autofs_packet_expire __user *); int autofs4_expire_multi(struct super_block *, struct vfsmount *, - struct autofs_sb_info *, int *); + struct autofs_sb_info *, int __user *); /* Operations structures */ 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 file_operations autofs4_dir_operations; extern struct file_operations autofs4_root_operations; /* Initializing function */ @@ -157,6 +170,24 @@ enum autofs_notify NFY_EXPIRE }; -int autofs4_wait(struct autofs_sb_info *,struct qstr *, enum autofs_notify); +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 *); + +static inline int simple_positive(struct dentry *dentry) +{ + return dentry->d_inode && !d_unhashed(dentry); +} + +static inline int simple_empty_nolock(struct dentry *dentry) +{ + struct dentry *child; + int ret = 0; + + list_for_each_entry(child, &dentry->d_subdirs, d_child) + if (simple_positive(child)) + goto out; + ret = 1; +out: + return ret; +}