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

Commit 30aaca45 authored by Linus Torvalds's avatar Linus Torvalds
Browse files
* 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/mszeredi/fuse:
  fuse: llseek fix race
  fuse: fix llseek bug
  fuse: fix fuse_retrieve
parents ddb36077 73104b6e
Loading
Loading
Loading
Loading
+2 −1
Original line number Diff line number Diff line
@@ -1512,7 +1512,7 @@ static int fuse_retrieve(struct fuse_conn *fc, struct inode *inode,
	else if (outarg->offset + num > file_size)
		num = file_size - outarg->offset;

	while (num) {
	while (num && req->num_pages < FUSE_MAX_PAGES_PER_REQ) {
		struct page *page;
		unsigned int this_num;

@@ -1526,6 +1526,7 @@ static int fuse_retrieve(struct fuse_conn *fc, struct inode *inode,

		num -= this_num;
		total_len += this_num;
		index++;
	}
	req->misc.retrieve_in.offset = outarg->offset;
	req->misc.retrieve_in.size = total_len;
+5 −1
Original line number Diff line number Diff line
@@ -1556,7 +1556,7 @@ static loff_t fuse_file_llseek(struct file *file, loff_t offset, int origin)
	struct inode *inode = file->f_path.dentry->d_inode;

	mutex_lock(&inode->i_mutex);
	if (origin != SEEK_CUR || origin != SEEK_SET) {
	if (origin != SEEK_CUR && origin != SEEK_SET) {
		retval = fuse_update_attributes(inode, NULL, file, NULL);
		if (retval)
			goto exit;
@@ -1567,6 +1567,10 @@ static loff_t fuse_file_llseek(struct file *file, loff_t offset, int origin)
		offset += i_size_read(inode);
		break;
	case SEEK_CUR:
		if (offset == 0) {
			retval = file->f_pos;
			goto exit;
		}
		offset += file->f_pos;
		break;
	case SEEK_DATA: