Commit 41bc10ca authored by Linus Torvalds's avatar Linus Torvalds
Browse files

Merge tag 'stream_open-5.2' of https://lab.nexedi.com/kirr/linux

Pull stream_open conversion from Kirill Smelkov:

 - remove unnecessary double nonseekable_open from drivers/char/dtlk.c
   as noticed by Pavel Machek while reviewing nonseekable_open ->
   stream_open mass conversion.

 - the mass conversion patch promised in commit 10dce8af ("fs:
   stream_open - opener for stream-like files so that read and write can
   run simultaneously without deadlock") and is automatically generated
   by running

        $ make coccicheck MODE=patch COCCI=scripts/coccinelle/api/stream_open.cocci

   I've verified each generated change manually - that it is correct to
   convert - and each other nonseekable_open instance left - that it is
   either not correct to convert there, or that it is not converted due
   to current stream_open.cocci limitations. More details on this in the
   patch.

 - finally, change VFS to pass ppos=NULL into .read/.write for files
   that declare themselves streams. It was suggested by Rasmus Villemoes
   and makes sure that if ppos starts to be erroneously used in a stream
   file, such bug won't go unnoticed and will produce an oops instead of
   creating illusion of position change being taken into account.

   Note: this patch does not conflict with "fuse: Add FOPEN_STREAM to
   use stream_open()" that will be hopefully coming via FUSE tree,
   because fs/fuse/ uses new-style .read_iter/.write_iter, and for these
   accessors position is still passed as non-pointer kiocb.ki_pos .

* tag 'stream_open-5.2' of https://lab.nexedi.com/kirr/linux:
  vfs: pass ppos=NULL to .read()/.write() of FMODE_STREAM files
  *: convert stream-like files from nonseekable_open -> stream_open
  dtlk: remove double call to nonseekable_open
parents aa26690f 438ab720
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -628,7 +628,7 @@ static int mpc52xx_wdt_open(struct inode *inode, struct file *file)
	}

	file->private_data = mpc52xx_gpt_wdt;
	return nonseekable_open(inode, file);
	return stream_open(inode, file);
}

static int mpc52xx_wdt_release(struct inode *inode, struct file *file)
+1 −1
Original line number Diff line number Diff line
@@ -588,7 +588,7 @@ static int spufs_pipe_open(struct inode *inode, struct file *file)
	struct spufs_inode_info *i = SPUFS_I(inode);
	file->private_data = i->i_ctx;

	return nonseekable_open(inode, file);
	return stream_open(inode, file);
}

/*
+1 −1
Original line number Diff line number Diff line
@@ -85,7 +85,7 @@ static int harddog_open(struct inode *inode, struct file *file)
	timer_alive = 1;
	spin_unlock(&lock);
	mutex_unlock(&harddog_mutex);
	return nonseekable_open(inode, file);
	return stream_open(inode, file);
err:
	spin_unlock(&lock);
	mutex_unlock(&harddog_mutex);
+1 −1
Original line number Diff line number Diff line
@@ -428,7 +428,7 @@ static int do_microcode_update(const void __user *buf, size_t size)

static int microcode_open(struct inode *inode, struct file *file)
{
	return capable(CAP_SYS_RAWIO) ? nonseekable_open(inode, file) : -EPERM;
	return capable(CAP_SYS_RAWIO) ? stream_open(inode, file) : -EPERM;
}

static ssize_t microcode_write(struct file *file, const char __user *buf,
+1 −1
Original line number Diff line number Diff line
@@ -212,7 +212,7 @@ static void ds1620_read_state(struct therm *therm)

static int ds1620_open(struct inode *inode, struct file *file)
{
	return nonseekable_open(inode, file);
	return stream_open(inode, file);
}

static ssize_t
Loading