diff options
Diffstat (limited to 'include/linux/fs.h')
| -rw-r--r-- | include/linux/fs.h | 84 |
1 files changed, 66 insertions, 18 deletions
diff --git a/include/linux/fs.h b/include/linux/fs.h index dba4cbd157ee..6eafbe309483 100644 --- a/include/linux/fs.h +++ b/include/linux/fs.h | |||
| @@ -27,6 +27,10 @@ | |||
| 27 | #define BLOCK_SIZE_BITS 10 | 27 | #define BLOCK_SIZE_BITS 10 |
| 28 | #define BLOCK_SIZE (1<<BLOCK_SIZE_BITS) | 28 | #define BLOCK_SIZE (1<<BLOCK_SIZE_BITS) |
| 29 | 29 | ||
| 30 | #define SEEK_SET 0 /* seek relative to beginning of file */ | ||
| 31 | #define SEEK_CUR 1 /* seek relative to current file position */ | ||
| 32 | #define SEEK_END 2 /* seek relative to end of file */ | ||
| 33 | |||
| 30 | /* And dynamically-tunable limits and defaults: */ | 34 | /* And dynamically-tunable limits and defaults: */ |
| 31 | struct files_stat_struct { | 35 | struct files_stat_struct { |
| 32 | int nr_files; /* read only */ | 36 | int nr_files; /* read only */ |
| @@ -88,9 +92,10 @@ extern int dir_notify_enable; | |||
| 88 | #define FS_REQUIRES_DEV 1 | 92 | #define FS_REQUIRES_DEV 1 |
| 89 | #define FS_BINARY_MOUNTDATA 2 | 93 | #define FS_BINARY_MOUNTDATA 2 |
| 90 | #define FS_REVAL_DOT 16384 /* Check the paths ".", ".." for staleness */ | 94 | #define FS_REVAL_DOT 16384 /* Check the paths ".", ".." for staleness */ |
| 91 | #define FS_ODD_RENAME 32768 /* Temporary stuff; will go away as soon | 95 | #define FS_RENAME_DOES_D_MOVE 32768 /* FS will handle d_move() |
| 92 | * as nfs_rename() will be cleaned up | 96 | * during rename() internally. |
| 93 | */ | 97 | */ |
| 98 | |||
| 94 | /* | 99 | /* |
| 95 | * These are the fs-independent mount-flags: up to 32 flags are supported | 100 | * These are the fs-independent mount-flags: up to 32 flags are supported |
| 96 | */ | 101 | */ |
| @@ -392,7 +397,7 @@ struct address_space { | |||
| 392 | unsigned int truncate_count; /* Cover race condition with truncate */ | 397 | unsigned int truncate_count; /* Cover race condition with truncate */ |
| 393 | unsigned long nrpages; /* number of total pages */ | 398 | unsigned long nrpages; /* number of total pages */ |
| 394 | pgoff_t writeback_index;/* writeback starts here */ | 399 | pgoff_t writeback_index;/* writeback starts here */ |
| 395 | struct address_space_operations *a_ops; /* methods */ | 400 | const struct address_space_operations *a_ops; /* methods */ |
| 396 | unsigned long flags; /* error bits/gfp mask */ | 401 | unsigned long flags; /* error bits/gfp mask */ |
| 397 | struct backing_dev_info *backing_dev_info; /* device readahead, etc */ | 402 | struct backing_dev_info *backing_dev_info; /* device readahead, etc */ |
| 398 | spinlock_t private_lock; /* for use by the address_space */ | 403 | spinlock_t private_lock; /* for use by the address_space */ |
| @@ -436,6 +441,21 @@ struct block_device { | |||
| 436 | }; | 441 | }; |
| 437 | 442 | ||
| 438 | /* | 443 | /* |
| 444 | * bdev->bd_mutex nesting subclasses for the lock validator: | ||
| 445 | * | ||
| 446 | * 0: normal | ||
| 447 | * 1: 'whole' | ||
| 448 | * 2: 'partition' | ||
| 449 | */ | ||
| 450 | enum bdev_bd_mutex_lock_class | ||
| 451 | { | ||
| 452 | BD_MUTEX_NORMAL, | ||
| 453 | BD_MUTEX_WHOLE, | ||
| 454 | BD_MUTEX_PARTITION | ||
| 455 | }; | ||
| 456 | |||
| 457 | |||
| 458 | /* | ||
| 439 | * Radix-tree tags, for tagging dirty and writeback pages within the pagecache | 459 | * Radix-tree tags, for tagging dirty and writeback pages within the pagecache |
| 440 | * radix trees | 460 | * radix trees |
| 441 | */ | 461 | */ |
| @@ -492,7 +512,6 @@ struct inode { | |||
| 492 | struct timespec i_mtime; | 512 | struct timespec i_mtime; |
| 493 | struct timespec i_ctime; | 513 | struct timespec i_ctime; |
| 494 | unsigned int i_blkbits; | 514 | unsigned int i_blkbits; |
| 495 | unsigned long i_blksize; | ||
| 496 | unsigned long i_version; | 515 | unsigned long i_version; |
| 497 | blkcnt_t i_blocks; | 516 | blkcnt_t i_blocks; |
| 498 | unsigned short i_bytes; | 517 | unsigned short i_bytes; |
| @@ -508,11 +527,12 @@ struct inode { | |||
| 508 | #ifdef CONFIG_QUOTA | 527 | #ifdef CONFIG_QUOTA |
| 509 | struct dquot *i_dquot[MAXQUOTAS]; | 528 | struct dquot *i_dquot[MAXQUOTAS]; |
| 510 | #endif | 529 | #endif |
| 511 | /* These three should probably be a union */ | ||
| 512 | struct list_head i_devices; | 530 | struct list_head i_devices; |
| 513 | struct pipe_inode_info *i_pipe; | 531 | union { |
| 514 | struct block_device *i_bdev; | 532 | struct pipe_inode_info *i_pipe; |
| 515 | struct cdev *i_cdev; | 533 | struct block_device *i_bdev; |
| 534 | struct cdev *i_cdev; | ||
| 535 | }; | ||
| 516 | int i_cindex; | 536 | int i_cindex; |
| 517 | 537 | ||
| 518 | __u32 i_generation; | 538 | __u32 i_generation; |
| @@ -533,16 +553,36 @@ struct inode { | |||
| 533 | unsigned int i_flags; | 553 | unsigned int i_flags; |
| 534 | 554 | ||
| 535 | atomic_t i_writecount; | 555 | atomic_t i_writecount; |
| 556 | #ifdef CONFIG_SECURITY | ||
| 536 | void *i_security; | 557 | void *i_security; |
| 537 | union { | 558 | #endif |
| 538 | void *generic_ip; | 559 | void *i_private; /* fs or device private pointer */ |
| 539 | } u; | ||
| 540 | #ifdef __NEED_I_SIZE_ORDERED | 560 | #ifdef __NEED_I_SIZE_ORDERED |
| 541 | seqcount_t i_size_seqcount; | 561 | seqcount_t i_size_seqcount; |
| 542 | #endif | 562 | #endif |
| 543 | }; | 563 | }; |
| 544 | 564 | ||
| 545 | /* | 565 | /* |
| 566 | * inode->i_mutex nesting subclasses for the lock validator: | ||
| 567 | * | ||
| 568 | * 0: the object of the current VFS operation | ||
| 569 | * 1: parent | ||
| 570 | * 2: child/target | ||
| 571 | * 3: quota file | ||
| 572 | * | ||
| 573 | * The locking order between these classes is | ||
| 574 | * parent -> child -> normal -> xattr -> quota | ||
| 575 | */ | ||
| 576 | enum inode_i_mutex_lock_class | ||
| 577 | { | ||
| 578 | I_MUTEX_NORMAL, | ||
| 579 | I_MUTEX_PARENT, | ||
| 580 | I_MUTEX_CHILD, | ||
| 581 | I_MUTEX_XATTR, | ||
| 582 | I_MUTEX_QUOTA | ||
| 583 | }; | ||
| 584 | |||
| 585 | /* | ||
| 546 | * NOTE: in a 32bit arch with a preemptable kernel and | 586 | * NOTE: in a 32bit arch with a preemptable kernel and |
| 547 | * an UP compile the i_size_read/write must be atomic | 587 | * an UP compile the i_size_read/write must be atomic |
| 548 | * with respect to the local cpu (unlike with preempt disabled), | 588 | * with respect to the local cpu (unlike with preempt disabled), |
| @@ -607,7 +647,6 @@ struct fown_struct { | |||
| 607 | rwlock_t lock; /* protects pid, uid, euid fields */ | 647 | rwlock_t lock; /* protects pid, uid, euid fields */ |
| 608 | int pid; /* pid or -pgrp where SIGIO should be sent */ | 648 | int pid; /* pid or -pgrp where SIGIO should be sent */ |
| 609 | uid_t uid, euid; /* uid/euid of process setting the owner */ | 649 | uid_t uid, euid; /* uid/euid of process setting the owner */ |
| 610 | void *security; | ||
| 611 | int signum; /* posix.1b rt signal to be delivered on IO */ | 650 | int signum; /* posix.1b rt signal to be delivered on IO */ |
| 612 | }; | 651 | }; |
| 613 | 652 | ||
| @@ -650,8 +689,9 @@ struct file { | |||
| 650 | struct file_ra_state f_ra; | 689 | struct file_ra_state f_ra; |
| 651 | 690 | ||
| 652 | unsigned long f_version; | 691 | unsigned long f_version; |
| 692 | #ifdef CONFIG_SECURITY | ||
| 653 | void *f_security; | 693 | void *f_security; |
| 654 | 694 | #endif | |
| 655 | /* needed for tty driver, and maybe others */ | 695 | /* needed for tty driver, and maybe others */ |
| 656 | void *private_data; | 696 | void *private_data; |
| 657 | 697 | ||
| @@ -682,6 +722,7 @@ extern spinlock_t files_lock; | |||
| 682 | #define FL_POSIX 1 | 722 | #define FL_POSIX 1 |
| 683 | #define FL_FLOCK 2 | 723 | #define FL_FLOCK 2 |
| 684 | #define FL_ACCESS 8 /* not trying to lock, just looking */ | 724 | #define FL_ACCESS 8 /* not trying to lock, just looking */ |
| 725 | #define FL_EXISTS 16 /* when unlocking, test for existence */ | ||
| 685 | #define FL_LEASE 32 /* lease held on this file */ | 726 | #define FL_LEASE 32 /* lease held on this file */ |
| 686 | #define FL_CLOSE 64 /* unlock on close */ | 727 | #define FL_CLOSE 64 /* unlock on close */ |
| 687 | #define FL_SLEEP 128 /* A blocking lock */ | 728 | #define FL_SLEEP 128 /* A blocking lock */ |
| @@ -838,7 +879,9 @@ struct super_block { | |||
| 838 | int s_syncing; | 879 | int s_syncing; |
| 839 | int s_need_sync_fs; | 880 | int s_need_sync_fs; |
| 840 | atomic_t s_active; | 881 | atomic_t s_active; |
| 882 | #ifdef CONFIG_SECURITY | ||
| 841 | void *s_security; | 883 | void *s_security; |
| 884 | #endif | ||
| 842 | struct xattr_handler **s_xattr; | 885 | struct xattr_handler **s_xattr; |
| 843 | 886 | ||
| 844 | struct list_head s_inodes; /* all inodes */ | 887 | struct list_head s_inodes; /* all inodes */ |
| @@ -1100,13 +1143,14 @@ struct super_operations { | |||
| 1100 | int (*statfs) (struct dentry *, struct kstatfs *); | 1143 | int (*statfs) (struct dentry *, struct kstatfs *); |
| 1101 | int (*remount_fs) (struct super_block *, int *, char *); | 1144 | int (*remount_fs) (struct super_block *, int *, char *); |
| 1102 | void (*clear_inode) (struct inode *); | 1145 | void (*clear_inode) (struct inode *); |
| 1103 | void (*umount_begin) (struct super_block *); | 1146 | void (*umount_begin) (struct vfsmount *, int); |
| 1104 | 1147 | ||
| 1105 | int (*show_options)(struct seq_file *, struct vfsmount *); | 1148 | int (*show_options)(struct seq_file *, struct vfsmount *); |
| 1106 | int (*show_stats)(struct seq_file *, struct vfsmount *); | 1149 | int (*show_stats)(struct seq_file *, struct vfsmount *); |
| 1107 | 1150 | #ifdef CONFIG_QUOTA | |
| 1108 | ssize_t (*quota_read)(struct super_block *, int, char *, size_t, loff_t); | 1151 | ssize_t (*quota_read)(struct super_block *, int, char *, size_t, loff_t); |
| 1109 | ssize_t (*quota_write)(struct super_block *, int, const char *, size_t, loff_t); | 1152 | ssize_t (*quota_write)(struct super_block *, int, const char *, size_t, loff_t); |
| 1153 | #endif | ||
| 1110 | }; | 1154 | }; |
| 1111 | 1155 | ||
| 1112 | /* Inode state bits. Protected by inode_lock. */ | 1156 | /* Inode state bits. Protected by inode_lock. */ |
| @@ -1276,6 +1320,8 @@ struct file_system_type { | |||
| 1276 | struct module *owner; | 1320 | struct module *owner; |
| 1277 | struct file_system_type * next; | 1321 | struct file_system_type * next; |
| 1278 | struct list_head fs_supers; | 1322 | struct list_head fs_supers; |
| 1323 | struct lock_class_key s_lock_key; | ||
| 1324 | struct lock_class_key s_umount_key; | ||
| 1279 | }; | 1325 | }; |
| 1280 | 1326 | ||
| 1281 | extern int get_sb_bdev(struct file_system_type *fs_type, | 1327 | extern int get_sb_bdev(struct file_system_type *fs_type, |
| @@ -1404,8 +1450,9 @@ extern void bd_set_size(struct block_device *, loff_t size); | |||
| 1404 | extern void bd_forget(struct inode *inode); | 1450 | extern void bd_forget(struct inode *inode); |
| 1405 | extern void bdput(struct block_device *); | 1451 | extern void bdput(struct block_device *); |
| 1406 | extern struct block_device *open_by_devnum(dev_t, unsigned); | 1452 | extern struct block_device *open_by_devnum(dev_t, unsigned); |
| 1453 | extern struct block_device *open_partition_by_devnum(dev_t, unsigned); | ||
| 1407 | extern const struct file_operations def_blk_fops; | 1454 | extern const struct file_operations def_blk_fops; |
| 1408 | extern struct address_space_operations def_blk_aops; | 1455 | extern const struct address_space_operations def_blk_aops; |
| 1409 | extern const struct file_operations def_chr_fops; | 1456 | extern const struct file_operations def_chr_fops; |
| 1410 | extern const struct file_operations bad_sock_fops; | 1457 | extern const struct file_operations bad_sock_fops; |
| 1411 | extern const struct file_operations def_fifo_fops; | 1458 | extern const struct file_operations def_fifo_fops; |
| @@ -1414,6 +1461,7 @@ extern int blkdev_ioctl(struct inode *, struct file *, unsigned, unsigned long); | |||
| 1414 | extern long compat_blkdev_ioctl(struct file *, unsigned, unsigned long); | 1461 | extern long compat_blkdev_ioctl(struct file *, unsigned, unsigned long); |
| 1415 | extern int blkdev_get(struct block_device *, mode_t, unsigned); | 1462 | extern int blkdev_get(struct block_device *, mode_t, unsigned); |
| 1416 | extern int blkdev_put(struct block_device *); | 1463 | extern int blkdev_put(struct block_device *); |
| 1464 | extern int blkdev_put_partition(struct block_device *); | ||
| 1417 | extern int bd_claim(struct block_device *, void *); | 1465 | extern int bd_claim(struct block_device *, void *); |
| 1418 | extern void bd_release(struct block_device *); | 1466 | extern void bd_release(struct block_device *); |
| 1419 | #ifdef CONFIG_SYSFS | 1467 | #ifdef CONFIG_SYSFS |
| @@ -1767,7 +1815,7 @@ extern struct inode_operations simple_dir_inode_operations; | |||
| 1767 | struct tree_descr { char *name; const struct file_operations *ops; int mode; }; | 1815 | struct tree_descr { char *name; const struct file_operations *ops; int mode; }; |
| 1768 | struct dentry *d_alloc_name(struct dentry *, const char *); | 1816 | struct dentry *d_alloc_name(struct dentry *, const char *); |
| 1769 | extern int simple_fill_super(struct super_block *, int, struct tree_descr *); | 1817 | extern int simple_fill_super(struct super_block *, int, struct tree_descr *); |
| 1770 | extern int simple_pin_fs(char *name, struct vfsmount **mount, int *count); | 1818 | extern int simple_pin_fs(struct file_system_type *, struct vfsmount **mount, int *count); |
| 1771 | extern void simple_release_fs(struct vfsmount **mount, int *count); | 1819 | extern void simple_release_fs(struct vfsmount **mount, int *count); |
| 1772 | 1820 | ||
| 1773 | extern ssize_t simple_read_from_buffer(void __user *, size_t, loff_t *, const void *, size_t); | 1821 | extern ssize_t simple_read_from_buffer(void __user *, size_t, loff_t *, const void *, size_t); |
