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

Commit ee73f9a5 authored by Jeff Layton's avatar Jeff Layton
Browse files

ext4: convert to new i_version API

parent e1d747d9
Loading
Loading
Loading
Loading
+5 −4
Original line number Original line Diff line number Diff line
@@ -25,6 +25,7 @@
#include <linux/fs.h>
#include <linux/fs.h>
#include <linux/buffer_head.h>
#include <linux/buffer_head.h>
#include <linux/slab.h>
#include <linux/slab.h>
#include <linux/iversion.h>
#include "ext4.h"
#include "ext4.h"
#include "xattr.h"
#include "xattr.h"


@@ -208,7 +209,7 @@ static int ext4_readdir(struct file *file, struct dir_context *ctx)
		 * readdir(2), then we might be pointing to an invalid
		 * readdir(2), then we might be pointing to an invalid
		 * dirent right now.  Scan from the start of the block
		 * dirent right now.  Scan from the start of the block
		 * to make sure. */
		 * to make sure. */
		if (file->f_version != inode->i_version) {
		if (inode_cmp_iversion(inode, file->f_version)) {
			for (i = 0; i < sb->s_blocksize && i < offset; ) {
			for (i = 0; i < sb->s_blocksize && i < offset; ) {
				de = (struct ext4_dir_entry_2 *)
				de = (struct ext4_dir_entry_2 *)
					(bh->b_data + i);
					(bh->b_data + i);
@@ -227,7 +228,7 @@ static int ext4_readdir(struct file *file, struct dir_context *ctx)
			offset = i;
			offset = i;
			ctx->pos = (ctx->pos & ~(sb->s_blocksize - 1))
			ctx->pos = (ctx->pos & ~(sb->s_blocksize - 1))
				| offset;
				| offset;
			file->f_version = inode->i_version;
			file->f_version = inode_query_iversion(inode);
		}
		}


		while (ctx->pos < inode->i_size
		while (ctx->pos < inode->i_size
@@ -568,10 +569,10 @@ static int ext4_dx_readdir(struct file *file, struct dir_context *ctx)
		 * cached entries.
		 * cached entries.
		 */
		 */
		if ((!info->curr_node) ||
		if ((!info->curr_node) ||
		    (file->f_version != inode->i_version)) {
		    inode_cmp_iversion(inode, file->f_version)) {
			info->curr_node = NULL;
			info->curr_node = NULL;
			free_rb_tree_fname(&info->root);
			free_rb_tree_fname(&info->root);
			file->f_version = inode->i_version;
			file->f_version = inode_query_iversion(inode);
			ret = ext4_htree_fill_tree(file, info->curr_hash,
			ret = ext4_htree_fill_tree(file, info->curr_hash,
						   info->curr_minor_hash,
						   info->curr_minor_hash,
						   &info->next_hash);
						   &info->next_hash);
+4 −3
Original line number Original line Diff line number Diff line
@@ -14,6 +14,7 @@


#include <linux/iomap.h>
#include <linux/iomap.h>
#include <linux/fiemap.h>
#include <linux/fiemap.h>
#include <linux/iversion.h>


#include "ext4_jbd2.h"
#include "ext4_jbd2.h"
#include "ext4.h"
#include "ext4.h"
@@ -1042,7 +1043,7 @@ static int ext4_add_dirent_to_inline(handle_t *handle,
	 */
	 */
	dir->i_mtime = dir->i_ctime = current_time(dir);
	dir->i_mtime = dir->i_ctime = current_time(dir);
	ext4_update_dx_flag(dir);
	ext4_update_dx_flag(dir);
	dir->i_version++;
	inode_inc_iversion(dir);
	return 1;
	return 1;
}
}


@@ -1494,7 +1495,7 @@ int ext4_read_inline_dir(struct file *file,
	 * dirent right now.  Scan from the start of the inline
	 * dirent right now.  Scan from the start of the inline
	 * dir to make sure.
	 * dir to make sure.
	 */
	 */
	if (file->f_version != inode->i_version) {
	if (inode_cmp_iversion(inode, file->f_version)) {
		for (i = 0; i < extra_size && i < offset;) {
		for (i = 0; i < extra_size && i < offset;) {
			/*
			/*
			 * "." is with offset 0 and
			 * "." is with offset 0 and
@@ -1526,7 +1527,7 @@ int ext4_read_inline_dir(struct file *file,
		}
		}
		offset = i;
		offset = i;
		ctx->pos = offset;
		ctx->pos = offset;
		file->f_version = inode->i_version;
		file->f_version = inode_query_iversion(inode);
	}
	}


	while (ctx->pos < extra_size) {
	while (ctx->pos < extra_size) {
+8 −4
Original line number Original line Diff line number Diff line
@@ -4874,12 +4874,14 @@ struct inode *ext4_iget(struct super_block *sb, unsigned long ino)
	EXT4_EINODE_GET_XTIME(i_crtime, ei, raw_inode);
	EXT4_EINODE_GET_XTIME(i_crtime, ei, raw_inode);


	if (likely(!test_opt2(inode->i_sb, HURD_COMPAT))) {
	if (likely(!test_opt2(inode->i_sb, HURD_COMPAT))) {
		inode->i_version = le32_to_cpu(raw_inode->i_disk_version);
		u64 ivers = le32_to_cpu(raw_inode->i_disk_version);

		if (EXT4_INODE_SIZE(inode->i_sb) > EXT4_GOOD_OLD_INODE_SIZE) {
		if (EXT4_INODE_SIZE(inode->i_sb) > EXT4_GOOD_OLD_INODE_SIZE) {
			if (EXT4_FITS_IN_INODE(raw_inode, ei, i_version_hi))
			if (EXT4_FITS_IN_INODE(raw_inode, ei, i_version_hi))
				inode->i_version |=
				ivers |=
		    (__u64)(le32_to_cpu(raw_inode->i_version_hi)) << 32;
		    (__u64)(le32_to_cpu(raw_inode->i_version_hi)) << 32;
		}
		}
		inode_set_iversion_queried(inode, ivers);
	}
	}


	ret = 0;
	ret = 0;
@@ -5165,11 +5167,13 @@ static int ext4_do_update_inode(handle_t *handle,
	}
	}


	if (likely(!test_opt2(inode->i_sb, HURD_COMPAT))) {
	if (likely(!test_opt2(inode->i_sb, HURD_COMPAT))) {
		raw_inode->i_disk_version = cpu_to_le32(inode->i_version);
		u64 ivers = inode_peek_iversion(inode);

		raw_inode->i_disk_version = cpu_to_le32(ivers);
		if (ei->i_extra_isize) {
		if (ei->i_extra_isize) {
			if (EXT4_FITS_IN_INODE(raw_inode, ei, i_version_hi))
			if (EXT4_FITS_IN_INODE(raw_inode, ei, i_version_hi))
				raw_inode->i_version_hi =
				raw_inode->i_version_hi =
					cpu_to_le32(inode->i_version >> 32);
					cpu_to_le32(ivers >> 32);
			raw_inode->i_extra_isize =
			raw_inode->i_extra_isize =
				cpu_to_le16(ei->i_extra_isize);
				cpu_to_le16(ei->i_extra_isize);
		}
		}
+2 −1
Original line number Original line Diff line number Diff line
@@ -19,6 +19,7 @@
#include <linux/uuid.h>
#include <linux/uuid.h>
#include <linux/uaccess.h>
#include <linux/uaccess.h>
#include <linux/delay.h>
#include <linux/delay.h>
#include <linux/iversion.h>
#include "ext4_jbd2.h"
#include "ext4_jbd2.h"
#include "ext4.h"
#include "ext4.h"
#include <linux/fsmap.h>
#include <linux/fsmap.h>
@@ -144,7 +145,7 @@ static long swap_inode_boot_loader(struct super_block *sb,
		i_gid_write(inode_bl, 0);
		i_gid_write(inode_bl, 0);
		inode_bl->i_flags = 0;
		inode_bl->i_flags = 0;
		ei_bl->i_flags = 0;
		ei_bl->i_flags = 0;
		inode_bl->i_version = 1;
		inode_set_iversion(inode_bl, 1);
		i_size_write(inode_bl, 0);
		i_size_write(inode_bl, 0);
		inode_bl->i_mode = S_IFREG;
		inode_bl->i_mode = S_IFREG;
		if (ext4_has_feature_extents(sb)) {
		if (ext4_has_feature_extents(sb)) {
+2 −2
Original line number Original line Diff line number Diff line
@@ -2956,7 +2956,7 @@ static int ext4_rmdir(struct inode *dir, struct dentry *dentry)
			     "empty directory '%.*s' has too many links (%u)",
			     "empty directory '%.*s' has too many links (%u)",
			     dentry->d_name.len, dentry->d_name.name,
			     dentry->d_name.len, dentry->d_name.name,
			     inode->i_nlink);
			     inode->i_nlink);
	inode->i_version++;
	inode_inc_iversion(inode);
	clear_nlink(inode);
	clear_nlink(inode);
	/* There's no need to set i_disksize: the fact that i_nlink is
	/* There's no need to set i_disksize: the fact that i_nlink is
	 * zero will ensure that the right thing happens during any
	 * zero will ensure that the right thing happens during any
@@ -3362,7 +3362,7 @@ static int ext4_setent(handle_t *handle, struct ext4_renament *ent,
	ent->de->inode = cpu_to_le32(ino);
	ent->de->inode = cpu_to_le32(ino);
	if (ext4_has_feature_filetype(ent->dir->i_sb))
	if (ext4_has_feature_filetype(ent->dir->i_sb))
		ent->de->file_type = file_type;
		ent->de->file_type = file_type;
	ent->dir->i_version++;
	inode_inc_iversion(ent->dir);
	ent->dir->i_ctime = ent->dir->i_mtime =
	ent->dir->i_ctime = ent->dir->i_mtime =
		current_time(ent->dir);
		current_time(ent->dir);
	ext4_mark_inode_dirty(handle, ent->dir);
	ext4_mark_inode_dirty(handle, ent->dir);
Loading