Merge git://git.kernel.org/pub/scm/linux/kernel/git/viro/bdev
* git://git.kernel.org/pub/scm/linux/kernel/git/viro/bdev: (66 commits) [PATCH] kill the rest of struct file propagation in block ioctls [PATCH] get rid of struct file use in blkdev_ioctl() BLKBSZSET [PATCH] get rid of blkdev_locked_ioctl() [PATCH] get rid of blkdev_driver_ioctl() [PATCH] sanitize blkdev_get() and friends [PATCH] remember mode of reiserfs journal [PATCH] propagate mode through swsusp_close() [PATCH] propagate mode through open_bdev_excl/close_bdev_excl [PATCH] pass fmode_t to blkdev_put() [PATCH] kill the unused bsize on the send side of /dev/loop [PATCH] trim file propagation in block/compat_ioctl.c [PATCH] end of methods switch: remove the old ones [PATCH] switch sr [PATCH] switch sd [PATCH] switch ide-scsi [PATCH] switch tape_block [PATCH] switch dcssblk [PATCH] switch dasd [PATCH] switch mtd_blkdevs [PATCH] switch mmc ...
This commit is contained in:
+22
-5
@@ -717,10 +717,10 @@ extern void blk_plug_device(struct request_queue *);
|
||||
extern void blk_plug_device_unlocked(struct request_queue *);
|
||||
extern int blk_remove_plug(struct request_queue *);
|
||||
extern void blk_recount_segments(struct request_queue *, struct bio *);
|
||||
extern int scsi_cmd_ioctl(struct file *, struct request_queue *,
|
||||
struct gendisk *, unsigned int, void __user *);
|
||||
extern int sg_scsi_ioctl(struct file *, struct request_queue *,
|
||||
struct gendisk *, struct scsi_ioctl_command __user *);
|
||||
extern int scsi_cmd_ioctl(struct request_queue *, struct gendisk *, fmode_t,
|
||||
unsigned int, void __user *);
|
||||
extern int sg_scsi_ioctl(struct request_queue *, struct gendisk *, fmode_t,
|
||||
struct scsi_ioctl_command __user *);
|
||||
|
||||
/*
|
||||
* Temporary export, until SCSI gets fixed up.
|
||||
@@ -910,7 +910,8 @@ static inline int sb_issue_discard(struct super_block *sb,
|
||||
* command filter functions
|
||||
*/
|
||||
extern int blk_verify_command(struct blk_cmd_filter *filter,
|
||||
unsigned char *cmd, int has_write_perm);
|
||||
unsigned char *cmd, fmode_t has_write_perm);
|
||||
extern void blk_unregister_filter(struct gendisk *disk);
|
||||
extern void blk_set_cmd_filter_defaults(struct blk_cmd_filter *filter);
|
||||
|
||||
#define MAX_PHYS_SEGMENTS 128
|
||||
@@ -1056,6 +1057,22 @@ static inline int blk_integrity_rq(struct request *rq)
|
||||
|
||||
#endif /* CONFIG_BLK_DEV_INTEGRITY */
|
||||
|
||||
struct block_device_operations {
|
||||
int (*open) (struct block_device *, fmode_t);
|
||||
int (*release) (struct gendisk *, fmode_t);
|
||||
int (*locked_ioctl) (struct block_device *, fmode_t, unsigned, unsigned long);
|
||||
int (*ioctl) (struct block_device *, fmode_t, unsigned, unsigned long);
|
||||
int (*compat_ioctl) (struct block_device *, fmode_t, unsigned, unsigned long);
|
||||
int (*direct_access) (struct block_device *, sector_t,
|
||||
void **, unsigned long *);
|
||||
int (*media_changed) (struct gendisk *);
|
||||
int (*revalidate_disk) (struct gendisk *);
|
||||
int (*getgeo)(struct block_device *, struct hd_geometry *);
|
||||
struct module *owner;
|
||||
};
|
||||
|
||||
extern int __blkdev_driver_ioctl(struct block_device *, fmode_t, unsigned int,
|
||||
unsigned long);
|
||||
#else /* CONFIG_BLOCK */
|
||||
/*
|
||||
* stubs for when the block layer is configured out
|
||||
|
||||
@@ -987,11 +987,11 @@ struct cdrom_device_ops {
|
||||
};
|
||||
|
||||
/* the general block_device operations structure: */
|
||||
extern int cdrom_open(struct cdrom_device_info *cdi, struct inode *ip,
|
||||
struct file *fp);
|
||||
extern int cdrom_release(struct cdrom_device_info *cdi, struct file *fp);
|
||||
extern int cdrom_ioctl(struct file *file, struct cdrom_device_info *cdi,
|
||||
struct inode *ip, unsigned int cmd, unsigned long arg);
|
||||
extern int cdrom_open(struct cdrom_device_info *cdi, struct block_device *bdev,
|
||||
fmode_t mode);
|
||||
extern void cdrom_release(struct cdrom_device_info *cdi, fmode_t mode);
|
||||
extern int cdrom_ioctl(struct cdrom_device_info *cdi, struct block_device *bdev,
|
||||
fmode_t mode, unsigned int cmd, unsigned long arg);
|
||||
extern int cdrom_media_changed(struct cdrom_device_info *);
|
||||
|
||||
extern int register_cdrom(struct cdrom_device_info *cdi);
|
||||
|
||||
@@ -69,8 +69,7 @@ typedef int (*dm_status_fn) (struct dm_target *ti, status_type_t status_type,
|
||||
|
||||
typedef int (*dm_message_fn) (struct dm_target *ti, unsigned argc, char **argv);
|
||||
|
||||
typedef int (*dm_ioctl_fn) (struct dm_target *ti, struct inode *inode,
|
||||
struct file *filp, unsigned int cmd,
|
||||
typedef int (*dm_ioctl_fn) (struct dm_target *ti, unsigned int cmd,
|
||||
unsigned long arg);
|
||||
|
||||
typedef int (*dm_merge_fn) (struct dm_target *ti, struct bvec_merge_data *bvm,
|
||||
@@ -85,7 +84,7 @@ void dm_set_device_limits(struct dm_target *ti, struct block_device *bdev);
|
||||
|
||||
struct dm_dev {
|
||||
struct block_device *bdev;
|
||||
int mode;
|
||||
fmode_t mode;
|
||||
char name[16];
|
||||
};
|
||||
|
||||
@@ -95,7 +94,7 @@ struct dm_dev {
|
||||
* FIXME: too many arguments.
|
||||
*/
|
||||
int dm_get_device(struct dm_target *ti, const char *path, sector_t start,
|
||||
sector_t len, int mode, struct dm_dev **result);
|
||||
sector_t len, fmode_t mode, struct dm_dev **result);
|
||||
void dm_put_device(struct dm_target *ti, struct dm_dev *d);
|
||||
|
||||
/*
|
||||
@@ -223,7 +222,7 @@ int dm_set_geometry(struct mapped_device *md, struct hd_geometry *geo);
|
||||
/*
|
||||
* First create an empty table.
|
||||
*/
|
||||
int dm_table_create(struct dm_table **result, int mode,
|
||||
int dm_table_create(struct dm_table **result, fmode_t mode,
|
||||
unsigned num_targets, struct mapped_device *md);
|
||||
|
||||
/*
|
||||
@@ -254,7 +253,7 @@ void dm_table_put(struct dm_table *t);
|
||||
*/
|
||||
sector_t dm_table_get_size(struct dm_table *t);
|
||||
unsigned int dm_table_get_num_targets(struct dm_table *t);
|
||||
int dm_table_get_mode(struct dm_table *t);
|
||||
fmode_t dm_table_get_mode(struct dm_table *t);
|
||||
struct mapped_device *dm_table_get_md(struct dm_table *t);
|
||||
|
||||
/*
|
||||
|
||||
@@ -19,10 +19,10 @@ struct file_operations;
|
||||
struct vfsmount;
|
||||
struct dentry;
|
||||
extern int init_file(struct file *, struct vfsmount *mnt,
|
||||
struct dentry *dentry, mode_t mode,
|
||||
struct dentry *dentry, fmode_t mode,
|
||||
const struct file_operations *fop);
|
||||
extern struct file *alloc_file(struct vfsmount *, struct dentry *dentry,
|
||||
mode_t mode, const struct file_operations *fop);
|
||||
fmode_t mode, const struct file_operations *fop);
|
||||
|
||||
static inline void fput_light(struct file *file, int fput_needed)
|
||||
{
|
||||
|
||||
+20
-29
@@ -63,18 +63,23 @@ extern int dir_notify_enable;
|
||||
#define MAY_ACCESS 16
|
||||
#define MAY_OPEN 32
|
||||
|
||||
#define FMODE_READ 1
|
||||
#define FMODE_WRITE 2
|
||||
#define FMODE_READ ((__force fmode_t)1)
|
||||
#define FMODE_WRITE ((__force fmode_t)2)
|
||||
|
||||
/* Internal kernel extensions */
|
||||
#define FMODE_LSEEK 4
|
||||
#define FMODE_PREAD 8
|
||||
#define FMODE_LSEEK ((__force fmode_t)4)
|
||||
#define FMODE_PREAD ((__force fmode_t)8)
|
||||
#define FMODE_PWRITE FMODE_PREAD /* These go hand in hand */
|
||||
|
||||
/* File is being opened for execution. Primary users of this flag are
|
||||
distributed filesystems that can use it to achieve correct ETXTBUSY
|
||||
behavior for cross-node execution/opening_for_writing of files */
|
||||
#define FMODE_EXEC 16
|
||||
#define FMODE_EXEC ((__force fmode_t)16)
|
||||
|
||||
#define FMODE_NDELAY ((__force fmode_t)32)
|
||||
#define FMODE_EXCL ((__force fmode_t)64)
|
||||
#define FMODE_WRITE_IOCTL ((__force fmode_t)128)
|
||||
#define FMODE_NDELAY_NOW ((__force fmode_t)256)
|
||||
|
||||
#define RW_MASK 1
|
||||
#define RWA_MASK 2
|
||||
@@ -825,7 +830,7 @@ struct file {
|
||||
const struct file_operations *f_op;
|
||||
atomic_long_t f_count;
|
||||
unsigned int f_flags;
|
||||
mode_t f_mode;
|
||||
fmode_t f_mode;
|
||||
loff_t f_pos;
|
||||
struct fown_struct f_owner;
|
||||
unsigned int f_uid, f_gid;
|
||||
@@ -1152,6 +1157,7 @@ struct super_block {
|
||||
char s_id[32]; /* Informational name */
|
||||
|
||||
void *s_fs_info; /* Filesystem private info */
|
||||
fmode_t s_mode;
|
||||
|
||||
/*
|
||||
* The next field is for VFS *only*. No filesystems have any business
|
||||
@@ -1266,20 +1272,7 @@ int generic_osync_inode(struct inode *, struct address_space *, int);
|
||||
* to have different dirent layouts depending on the binary type.
|
||||
*/
|
||||
typedef int (*filldir_t)(void *, const char *, int, loff_t, u64, unsigned);
|
||||
|
||||
struct block_device_operations {
|
||||
int (*open) (struct inode *, struct file *);
|
||||
int (*release) (struct inode *, struct file *);
|
||||
int (*ioctl) (struct inode *, struct file *, unsigned, unsigned long);
|
||||
long (*unlocked_ioctl) (struct file *, unsigned, unsigned long);
|
||||
long (*compat_ioctl) (struct file *, unsigned, unsigned long);
|
||||
int (*direct_access) (struct block_device *, sector_t,
|
||||
void **, unsigned long *);
|
||||
int (*media_changed) (struct gendisk *);
|
||||
int (*revalidate_disk) (struct gendisk *);
|
||||
int (*getgeo)(struct block_device *, struct hd_geometry *);
|
||||
struct module *owner;
|
||||
};
|
||||
struct block_device_operations;
|
||||
|
||||
/* These macros are for out of kernel modules to test that
|
||||
* the kernel supports the unlocked_ioctl and compat_ioctl
|
||||
@@ -1713,7 +1706,7 @@ extern struct block_device *bdget(dev_t);
|
||||
extern void bd_set_size(struct block_device *, loff_t size);
|
||||
extern void bd_forget(struct inode *inode);
|
||||
extern void bdput(struct block_device *);
|
||||
extern struct block_device *open_by_devnum(dev_t, unsigned);
|
||||
extern struct block_device *open_by_devnum(dev_t, fmode_t);
|
||||
#else
|
||||
static inline void bd_forget(struct inode *inode) {}
|
||||
#endif
|
||||
@@ -1723,13 +1716,10 @@ extern const struct file_operations bad_sock_fops;
|
||||
extern const struct file_operations def_fifo_fops;
|
||||
#ifdef CONFIG_BLOCK
|
||||
extern int ioctl_by_bdev(struct block_device *, unsigned, unsigned long);
|
||||
extern int blkdev_ioctl(struct inode *, struct file *, unsigned, unsigned long);
|
||||
extern int blkdev_driver_ioctl(struct inode *inode, struct file *file,
|
||||
struct gendisk *disk, unsigned cmd,
|
||||
unsigned long arg);
|
||||
extern int blkdev_ioctl(struct block_device *, fmode_t, unsigned, unsigned long);
|
||||
extern long compat_blkdev_ioctl(struct file *, unsigned, unsigned long);
|
||||
extern int blkdev_get(struct block_device *, mode_t, unsigned);
|
||||
extern int blkdev_put(struct block_device *);
|
||||
extern int blkdev_get(struct block_device *, fmode_t);
|
||||
extern int blkdev_put(struct block_device *, fmode_t);
|
||||
extern int bd_claim(struct block_device *, void *);
|
||||
extern void bd_release(struct block_device *);
|
||||
#ifdef CONFIG_SYSFS
|
||||
@@ -1760,9 +1750,10 @@ extern void chrdev_show(struct seq_file *,off_t);
|
||||
extern const char *__bdevname(dev_t, char *buffer);
|
||||
extern const char *bdevname(struct block_device *bdev, char *buffer);
|
||||
extern struct block_device *lookup_bdev(const char *);
|
||||
extern struct block_device *open_bdev_excl(const char *, int, void *);
|
||||
extern void close_bdev_excl(struct block_device *);
|
||||
extern struct block_device *open_bdev_exclusive(const char *, fmode_t, void *);
|
||||
extern void close_bdev_exclusive(struct block_device *, fmode_t);
|
||||
extern void blkdev_show(struct seq_file *,off_t);
|
||||
|
||||
#else
|
||||
#define BLKDEV_MAJOR_HASH_SIZE 0
|
||||
#endif
|
||||
|
||||
@@ -188,7 +188,7 @@ static inline void fsnotify_close(struct file *file)
|
||||
struct dentry *dentry = file->f_path.dentry;
|
||||
struct inode *inode = dentry->d_inode;
|
||||
const char *name = dentry->d_name.name;
|
||||
mode_t mode = file->f_mode;
|
||||
fmode_t mode = file->f_mode;
|
||||
u32 mask = (mode & FMODE_WRITE) ? IN_CLOSE_WRITE : IN_CLOSE_NOWRITE;
|
||||
|
||||
if (S_ISDIR(inode->i_mode))
|
||||
|
||||
+3
-4
@@ -474,8 +474,8 @@ struct ide_disk_ops {
|
||||
ide_startstop_t (*do_request)(struct ide_drive_s *, struct request *,
|
||||
sector_t);
|
||||
int (*end_request)(struct ide_drive_s *, int, int);
|
||||
int (*ioctl)(struct ide_drive_s *, struct inode *,
|
||||
struct file *, unsigned int, unsigned long);
|
||||
int (*ioctl)(struct ide_drive_s *, struct block_device *,
|
||||
fmode_t, unsigned int, unsigned long);
|
||||
};
|
||||
|
||||
/* ATAPI device flags */
|
||||
@@ -1158,8 +1158,7 @@ struct ide_ioctl_devset {
|
||||
int ide_setting_ioctl(ide_drive_t *, struct block_device *, unsigned int,
|
||||
unsigned long, const struct ide_ioctl_devset *);
|
||||
|
||||
int generic_ide_ioctl(ide_drive_t *, struct file *, struct block_device *,
|
||||
unsigned, unsigned long);
|
||||
int generic_ide_ioctl(ide_drive_t *, struct block_device *, unsigned, unsigned long);
|
||||
|
||||
extern int ide_vlb_clk;
|
||||
extern int ide_pci_clk;
|
||||
|
||||
@@ -178,6 +178,7 @@ struct reiserfs_journal {
|
||||
struct reiserfs_journal_cnode *j_first; /* oldest journal block. start here for traverse */
|
||||
|
||||
struct block_device *j_dev_bd;
|
||||
fmode_t j_dev_mode;
|
||||
int j_1st_reserved_block; /* first block on s_dev of reserved area journal */
|
||||
|
||||
unsigned long j_state;
|
||||
|
||||
@@ -190,6 +190,7 @@ typedef __u32 __bitwise __wsum;
|
||||
|
||||
#ifdef __KERNEL__
|
||||
typedef unsigned __bitwise__ gfp_t;
|
||||
typedef unsigned __bitwise__ fmode_t;
|
||||
|
||||
#ifdef CONFIG_PHYS_ADDR_T_64BIT
|
||||
typedef u64 phys_addr_t;
|
||||
|
||||
Reference in New Issue
Block a user