Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 86d434de authored by Al Viro's avatar Al Viro
Browse files

[PATCH] eliminate use of ->f_flags in block methods



store needed information in f_mode

Signed-off-by: default avatarAl Viro <viro@zeniv.linux.org.uk>
parent aeb5d727
Loading
Loading
Loading
Loading
+3 −3
Original line number Diff line number Diff line
@@ -1813,17 +1813,17 @@ static int floppy_open( struct inode *inode, struct file *filp )
	if (p->ref && p->type != type)
		return -EBUSY;

	if (p->ref == -1 || (p->ref && filp->f_flags & O_EXCL))
	if (p->ref == -1 || (p->ref && filp->f_mode & FMODE_EXCL))
		return -EBUSY;

	if (filp->f_flags & O_EXCL)
	if (filp->f_mode & FMODE_EXCL)
		p->ref = -1;
	else
		p->ref++;

	p->type = type;

	if (filp->f_flags & O_NDELAY)
	if (filp->f_mode & FMODE_NDELAY)
		return 0;

	if (filp->f_mode & (FMODE_READ|FMODE_WRITE)) {
+4 −11
Original line number Diff line number Diff line
@@ -3453,7 +3453,7 @@ static int fd_getgeo(struct block_device *bdev, struct hd_geometry *geo)
static int fd_ioctl(struct inode *inode, struct file *filp, unsigned int cmd,
		    unsigned long param)
{
#define FD_IOCTL_ALLOWED ((filp) && (filp)->private_data)
#define FD_IOCTL_ALLOWED ((filp) && (filp)->f_mode & (FMODE_WRITE|FMODE_WRITE_IOCTL))
#define OUT(c,x) case c: outparam = (const char *) (x); break
#define IN(c,x,tag) case c: *(x) = inparam. tag ; return 0

@@ -3690,7 +3690,6 @@ static int floppy_open(struct inode *inode, struct file *filp)
	int res = -EBUSY;
	char *tmp;

	filp->private_data = (void *)0;
	mutex_lock(&open_lock);
	old_dev = UDRS->fd_device;
	if (opened_bdev[drive] && opened_bdev[drive] != inode->i_bdev)
@@ -3701,10 +3700,10 @@ static int floppy_open(struct inode *inode, struct file *filp)
		USETF(FD_VERIFY);
	}

	if (UDRS->fd_ref == -1 || (UDRS->fd_ref && (filp->f_flags & O_EXCL)))
	if (UDRS->fd_ref == -1 || (UDRS->fd_ref && (filp->f_mode & FMODE_EXCL)))
		goto out2;

	if (filp->f_flags & O_EXCL)
	if (filp->f_mode & FMODE_EXCL)
		UDRS->fd_ref = -1;
	else
		UDRS->fd_ref++;
@@ -3751,16 +3750,10 @@ static int floppy_open(struct inode *inode, struct file *filp)
			buffer_track = -1;
	}

	/* Allow ioctls if we have write-permissions even if read-only open.
	 * Needed so that programs such as fdrawcmd still can work on write
	 * protected disks */
	if ((filp->f_mode & FMODE_WRITE) || !file_permission(filp, MAY_WRITE))
		filp->private_data = (void *)8;

	if (UFDCS->rawcmd == 1)
		UFDCS->rawcmd = 2;

	if (!(filp->f_flags & O_NDELAY)) {
	if (!(filp->f_mode & FMODE_NDELAY)) {
		if (filp->f_mode & (FMODE_READ|FMODE_WRITE)) {
			UDRS->last_checked = 0;
			check_disk_change(inode->i_bdev);
+3 −3
Original line number Diff line number Diff line
@@ -904,10 +904,10 @@ static int floppy_open(struct inode *inode, struct file *filp)
		swim3_action(fs, SETMFM);
		swim3_select(fs, RELAX);

	} else if (fs->ref_count == -1 || filp->f_flags & O_EXCL)
	} else if (fs->ref_count == -1 || filp->f_mode & FMODE_EXCL)
		return -EBUSY;

	if (err == 0 && (filp->f_flags & O_NDELAY) == 0
	if (err == 0 && (filp->f_mode & FMODE_NDELAY) == 0
	    && (filp->f_mode & (FMODE_READ|FMODE_WRITE))) {
		check_disk_change(inode->i_bdev);
		if (fs->ejected)
@@ -930,7 +930,7 @@ static int floppy_open(struct inode *inode, struct file *filp)
		return err;
	}

	if (filp->f_flags & O_EXCL)
	if (filp->f_mode & FMODE_EXCL)
		fs->ref_count = -1;
	else
		++fs->ref_count;
+1 −1
Original line number Diff line number Diff line
@@ -1691,7 +1691,7 @@ static int ub_bd_open(struct inode *inode, struct file *filp)
	 * under some pretty murky conditions (a failure of READ CAPACITY).
	 * We may need it one day.
	 */
	if (lun->removable && lun->changed && !(filp->f_flags & O_NDELAY)) {
	if (lun->removable && lun->changed && !(filp->f_mode & FMODE_NDELAY)) {
		rc = -ENOMEDIUM;
		goto err_open;
	}
+2 −2
Original line number Diff line number Diff line
@@ -982,7 +982,7 @@ int cdrom_open(struct cdrom_device_info *cdi, struct inode *ip, struct file *fp)
	/* if this was a O_NONBLOCK open and we should honor the flags,
	 * do a quick open without drive/disc integrity checks. */
	cdi->use_count++;
	if ((fp->f_flags & O_NONBLOCK) && (cdi->options & CDO_USE_FFLAGS)) {
	if ((fp->f_mode & FMODE_NDELAY) && (cdi->options & CDO_USE_FFLAGS)) {
		ret = cdi->ops->open(cdi, 1);
	} else {
		ret = open_for_data(cdi);
@@ -1205,7 +1205,7 @@ int cdrom_release(struct cdrom_device_info *cdi, struct file *fp)
	}

	opened_for_data = !(cdi->options & CDO_USE_FFLAGS) ||
		!(fp && fp->f_flags & O_NONBLOCK);
		!(fp && fp->f_mode & FMODE_NDELAY);

	/*
	 * flush cache on last write release
Loading