patch-2.4.0-test3 linux/include/linux/fs.h
Next file: linux/include/linux/fs_struct.h
Previous file: linux/include/linux/ext2_fs.h
Back to the patch index
Back to the overall index
- Lines: 164
- Date:
Mon Jul 10 13:21:51 2000
- Orig file:
v2.4.0-test2/linux/include/linux/fs.h
- Orig date:
Fri Jun 23 21:55:11 2000
diff -u --recursive --new-file v2.4.0-test2/linux/include/linux/fs.h linux/include/linux/fs.h
@@ -47,7 +47,12 @@
#define BLOCK_SIZE (1<<BLOCK_SIZE_BITS)
/* And dynamically-tunable limits and defaults: */
-extern int max_files, nr_files, nr_free_files;
+struct files_stat_struct {
+ int nr_files; /* read only */
+ int nr_free_files; /* read only */
+ int max_files; /* tunable */
+};
+extern struct files_stat_struct files_stat;
extern int max_super_blocks, nr_super_blocks;
#define NR_FILE 8192 /* this can well be larger on a larger system */
@@ -81,9 +86,12 @@
*/
#define FS_SINGLE 8 /*
* Filesystem that can have only one superblock;
- * kernel-wide vfsmnt is kept in ->kern_mnt.
+ * kernel-wide vfsmnt is placed in ->kern_mnt by
+ * kern_mount() which must be called _after_
+ * register_filesystem().
*/
#define FS_NOMOUNT 16 /* Never mount from userland */
+#define FS_LITTER 32 /* Keeps the tree in dcache */
/*
* These are the fs-independent mount-flags: up to 16 flags are supported
*/
@@ -504,10 +512,8 @@
struct file_lock {
struct file_lock *fl_next; /* singly linked list for this inode */
- struct file_lock *fl_nextlink; /* doubly linked list of all locks */
- struct file_lock *fl_prevlink; /* used to simplify lock removal */
- struct file_lock *fl_nextblock; /* circular list of blocked processes */
- struct file_lock *fl_prevblock;
+ struct list_head fl_link; /* doubly linked list of all locks */
+ struct list_head fl_block; /* circular list of blocked processes */
fl_owner_t fl_owner;
unsigned int fl_pid;
wait_queue_head_t fl_wait;
@@ -532,7 +538,7 @@
#define OFFSET_MAX INT_LIMIT(loff_t)
#endif
-extern struct file_lock *file_lock_table;
+extern struct list_head file_lock_list;
#include <linux/fcntl.h>
@@ -721,7 +727,7 @@
int (*open) (struct inode *, struct file *);
int (*flush) (struct file *);
int (*release) (struct inode *, struct file *);
- int (*fsync) (struct file *, struct dentry *);
+ int (*fsync) (struct file *, struct dentry *, int datasync);
int (*fasync) (int, struct file *, int);
int (*lock) (struct file *, int, struct file_lock *);
ssize_t (*readv) (struct file *, const struct iovec *, unsigned long, loff_t *);
@@ -754,7 +760,7 @@
*/
struct super_operations {
void (*read_inode) (struct inode *);
- void (*write_inode) (struct inode *);
+ void (*write_inode) (struct inode *, int);
void (*put_inode) (struct inode *);
void (*delete_inode) (struct inode *);
void (*put_super) (struct super_block *);
@@ -859,7 +865,8 @@
return locks_mandatory_area(
FLOCK_VERIFY_WRITE, inode, filp,
size < inode->i_size ? size : inode->i_size,
- abs(inode->i_size - size)
+ (size < inode->i_size ? inode->i_size - size
+ : size - inode->i_size)
);
return 0;
}
@@ -876,8 +883,9 @@
extern struct file * dentry_open(struct dentry *, struct vfsmount *, int);
extern int filp_close(struct file *, fl_owner_t id);
extern char * getname(const char *);
-#define __getname() ((char *) __get_free_page(GFP_KERNEL))
-#define putname(name) free_page((unsigned long)(name))
+
+#define __getname() kmem_cache_alloc(names_cachep, SLAB_KERNEL)
+#define putname(name) kmem_cache_free(names_cachep, (void *)(name))
enum {BDEV_FILE, BDEV_SWAP, BDEV_FS, BDEV_RAW};
extern int register_blkdev(unsigned int, const char *, struct block_device_operations *);
@@ -989,7 +997,7 @@
#define destroy_buffers(dev) __invalidate_buffers((dev), 1)
extern void __invalidate_buffers(kdev_t dev, int);
extern void sync_inodes(kdev_t);
-extern void write_inode_now(struct inode *);
+extern void write_inode_now(struct inode *, int);
extern void sync_dev(kdev_t);
extern int fsync_dev(kdev_t);
extern void sync_supers(kdev_t);
@@ -997,7 +1005,16 @@
extern int notify_change(struct dentry *, struct iattr *);
extern int permission(struct inode *, int);
extern int get_write_access(struct inode *);
-extern void put_write_access(struct inode *);
+extern int deny_write_access(struct file *);
+static inline void put_write_access(struct inode * inode)
+{
+ atomic_dec(&inode->i_writecount);
+}
+static inline void allow_write_access(struct file *file)
+{
+ if (file)
+ atomic_inc(&file->f_dentry->d_inode->i_writecount);
+}
extern int do_pipe(int *);
extern int open_namei(const char *, int, int, struct nameidata *);
@@ -1037,7 +1054,7 @@
/*
* Type of the last component on LOOKUP_PARENT
*/
-enum {LAST_NORM, LAST_ROOT, LAST_DOT, LAST_DOTDOT };
+enum {LAST_NORM, LAST_ROOT, LAST_DOT, LAST_DOTDOT, LAST_BIND};
/*
* "descriptor" for what we're up to with a read for sendfile().
@@ -1148,6 +1165,7 @@
extern int vfs_readdir(struct file *, filldir_t, void *);
extern int dcache_readdir(struct file *, void *, filldir_t);
+extern struct file_system_type *get_fs_type(const char *name);
extern struct super_block *get_super(kdev_t);
struct super_block *get_empty_super(void);
extern void put_super(kdev_t);
@@ -1172,7 +1190,7 @@
extern ssize_t char_write(struct file *, const char *, size_t, loff_t *);
extern ssize_t block_write(struct file *, const char *, size_t, loff_t *);
-extern int file_fsync(struct file *, struct dentry *);
+extern int file_fsync(struct file *, struct dentry *, int);
extern int generic_buffer_fdatasync(struct inode *inode, unsigned long start_idx, unsigned long end_idx);
extern int inode_change_ok(struct inode *, struct iattr *);
@@ -1184,20 +1202,6 @@
* functions were in linux/fs/ C (VFS) files.
*
*/
-
-/*
- * We need to do a check-parent every time
- * after we have locked the parent - to verify
- * that the parent is still our parent and
- * that we are still hashed onto it..
- *
- * This is required in case two processes race
- * on removing (or moving) the same entry: the
- * parent lock will serialize them, but the
- * other process will be too late..
- */
-#define check_parent(dir, dentry) \
- ((dir) == (dentry)->d_parent && !d_unhashed(dentry))
/*
* Locking the parent is needed to:
FUNET's LINUX-ADM group, linux-adm@nic.funet.fi
TCL-scripts by Sam Shen (who was at: slshen@lbl.gov)