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

Commit bc4320a9 authored by John L. Hammond's avatar John L. Hammond Committed by Greg Kroah-Hartman
Browse files

staging/lustre:llite: remove struct ll_ra_read



Ever since removal of the the unused function ll_ra_read_get(),
the struct ll_ra_read members lrr_reader and lrr_linkage and
the struct ll_readahead_state member ras_read_beads unnecessary
so remove them.
In struct vvp_io replace the struct ll_ra_read cui_bead member with
cui_ra_start and cui_ra_count.

Signed-off-by: default avatarJohn L. Hammond <john.hammond@intel.com>
Reviewed-on: http://review.whamcloud.com/13347
Intel-bug-id: https://jira.hpdd.intel.com/browse/LU-5971


Reviewed-by: default avatarBobi Jam <bobijam@hotmail.com>
Reviewed-by: default avatarLai Siyao <lai.siyao@intel.com>
Reviewed-by: default avatarJinshan Xiong <jinshan.xiong@intel.com>
Signed-off-by: default avatarOleg Drokin <green@linuxhacker.ru>
Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
parent 4a4eee07
Loading
Loading
Loading
Loading
+7 −23
Original line number Original line Diff line number Diff line
@@ -528,13 +528,6 @@ struct ll_sb_info {
	struct completion	 ll_kobj_unregister;
	struct completion	 ll_kobj_unregister;
};
};


struct ll_ra_read {
	pgoff_t	     lrr_start;
	pgoff_t	     lrr_count;
	struct task_struct *lrr_reader;
	struct list_head	  lrr_linkage;
};

/*
/*
 * per file-descriptor read-ahead data.
 * per file-descriptor read-ahead data.
 */
 */
@@ -592,12 +585,6 @@ struct ll_readahead_state {
	 * will not be accurate when dealing with reads issued via mmap.
	 * will not be accurate when dealing with reads issued via mmap.
	 */
	 */
	unsigned long   ras_request_index;
	unsigned long   ras_request_index;
	/*
	 * list of struct ll_ra_read's one per read(2) call current in
	 * progress against this file descriptor. Used by read-ahead code,
	 * protected by ->ras_lock.
	 */
	struct list_head      ras_read_beads;
	/*
	/*
	 * The following 3 items are used for detecting the stride I/O
	 * The following 3 items are used for detecting the stride I/O
	 * mode.
	 * mode.
@@ -666,8 +653,7 @@ static inline int ll_need_32bit_api(struct ll_sb_info *sbi)
#endif
#endif
}
}


void ll_ra_read_in(struct file *f, struct ll_ra_read *rar);
void ll_ras_enter(struct file *f);
void ll_ra_read_ex(struct file *f, struct ll_ra_read *rar);


/* llite/lproc_llite.c */
/* llite/lproc_llite.c */
int ldebugfs_register_mountpoint(struct dentry *parent,
int ldebugfs_register_mountpoint(struct dentry *parent,
@@ -876,14 +862,12 @@ struct vvp_io {
			} fault;
			} fault;
		} fault;
		} fault;
	} u;
	} u;
	/**

	 * Read-ahead state used by read and page-fault IO contexts.
	/* Readahead state. */
	 */
	pgoff_t	cui_ra_start;
	struct ll_ra_read    cui_bead;
	pgoff_t cui_ra_count;
	/**
	/* Set when cui_ra_{start,count} have been initialized. */
	 * Set when cui_bead has been initialized.
	bool	cui_ra_valid;
	 */
	int		  cui_ra_window_set;
};
};


/**
/**
+13 −40
Original line number Original line Diff line number Diff line
@@ -258,38 +258,15 @@ static int index_in_window(unsigned long index, unsigned long point,
	return start <= index && index <= end;
	return start <= index && index <= end;
}
}


static struct ll_readahead_state *ll_ras_get(struct file *f)
void ll_ras_enter(struct file *f)
{
{
	struct ll_file_data       *fd;
	struct ll_file_data *fd = LUSTRE_FPRIVATE(f);

	struct ll_readahead_state *ras = &fd->fd_ras;
	fd = LUSTRE_FPRIVATE(f);
	return &fd->fd_ras;
}

void ll_ra_read_in(struct file *f, struct ll_ra_read *rar)
{
	struct ll_readahead_state *ras;

	ras = ll_ras_get(f);


	spin_lock(&ras->ras_lock);
	spin_lock(&ras->ras_lock);
	ras->ras_requests++;
	ras->ras_requests++;
	ras->ras_request_index = 0;
	ras->ras_request_index = 0;
	ras->ras_consecutive_requests++;
	ras->ras_consecutive_requests++;
	rar->lrr_reader = current;

	list_add(&rar->lrr_linkage, &ras->ras_read_beads);
	spin_unlock(&ras->ras_lock);
}

void ll_ra_read_ex(struct file *f, struct ll_ra_read *rar)
{
	struct ll_readahead_state *ras;

	ras = ll_ras_get(f);

	spin_lock(&ras->ras_lock);
	list_del_init(&rar->lrr_linkage);
	spin_unlock(&ras->ras_lock);
	spin_unlock(&ras->ras_lock);
}
}


@@ -551,7 +528,6 @@ int ll_readahead(const struct lu_env *env, struct cl_io *io,
	unsigned long start = 0, end = 0, reserved;
	unsigned long start = 0, end = 0, reserved;
	unsigned long ra_end, len, mlen = 0;
	unsigned long ra_end, len, mlen = 0;
	struct inode *inode;
	struct inode *inode;
	struct ll_ra_read *bead;
	struct ra_io_arg *ria = &vti->vti_ria;
	struct ra_io_arg *ria = &vti->vti_ria;
	struct cl_object *clob;
	struct cl_object *clob;
	int ret = 0;
	int ret = 0;
@@ -575,17 +551,15 @@ int ll_readahead(const struct lu_env *env, struct cl_io *io,
	}
	}


	spin_lock(&ras->ras_lock);
	spin_lock(&ras->ras_lock);
	if (vio->cui_ra_window_set)
		bead = &vio->cui_bead;
	else
		bead = NULL;


	/* Enlarge the RA window to encompass the full read */
	/* Enlarge the RA window to encompass the full read */
	if (bead && ras->ras_window_start + ras->ras_window_len <
	if (vio->cui_ra_valid &&
	    bead->lrr_start + bead->lrr_count) {
	    ras->ras_window_start + ras->ras_window_len <
		ras->ras_window_len = bead->lrr_start + bead->lrr_count -
	    vio->cui_ra_start + vio->cui_ra_count) {
		ras->ras_window_len = vio->cui_ra_start + vio->cui_ra_count -
				      ras->ras_window_start;
				      ras->ras_window_start;
	}
	}

	/* Reserve a part of the read-ahead window that we'll be issuing */
	/* Reserve a part of the read-ahead window that we'll be issuing */
	if (ras->ras_window_len) {
	if (ras->ras_window_len) {
		start = ras->ras_next_readahead;
		start = ras->ras_next_readahead;
@@ -641,15 +615,15 @@ int ll_readahead(const struct lu_env *env, struct cl_io *io,
	CDEBUG(D_READA, DFID ": ria: %lu/%lu, bead: %lu/%lu, hit: %d\n",
	CDEBUG(D_READA, DFID ": ria: %lu/%lu, bead: %lu/%lu, hit: %d\n",
	       PFID(lu_object_fid(&clob->co_lu)),
	       PFID(lu_object_fid(&clob->co_lu)),
	       ria->ria_start, ria->ria_end,
	       ria->ria_start, ria->ria_end,
	       !bead ? 0 : bead->lrr_start,
	       vio->cui_ra_valid ? vio->cui_ra_start : 0,
	       !bead ? 0 : bead->lrr_count,
	       vio->cui_ra_valid ? vio->cui_ra_count : 0,
	       hit);
	       hit);


	/* at least to extend the readahead window to cover current read */
	/* at least to extend the readahead window to cover current read */
	if (!hit && bead &&
	if (!hit && vio->cui_ra_valid &&
	    bead->lrr_start + bead->lrr_count > ria->ria_start) {
	    vio->cui_ra_start + vio->cui_ra_count > ria->ria_start) {
		/* to the end of current read window. */
		/* to the end of current read window. */
		mlen = bead->lrr_start + bead->lrr_count - ria->ria_start;
		mlen = vio->cui_ra_start + vio->cui_ra_count - ria->ria_start;
		/* trim to RPC boundary */
		/* trim to RPC boundary */
		start = ria->ria_start & (PTLRPC_MAX_BRW_PAGES - 1);
		start = ria->ria_start & (PTLRPC_MAX_BRW_PAGES - 1);
		mlen = min(mlen, PTLRPC_MAX_BRW_PAGES - start);
		mlen = min(mlen, PTLRPC_MAX_BRW_PAGES - start);
@@ -730,7 +704,6 @@ void ll_readahead_init(struct inode *inode, struct ll_readahead_state *ras)
	spin_lock_init(&ras->ras_lock);
	spin_lock_init(&ras->ras_lock);
	ras_reset(inode, ras, 0);
	ras_reset(inode, ras, 0);
	ras->ras_requests = 0;
	ras->ras_requests = 0;
	INIT_LIST_HEAD(&ras->ras_read_beads);
}
}


/*
/*
+8 −23
Original line number Original line Diff line number Diff line
@@ -500,7 +500,6 @@ static int vvp_io_read_start(const struct lu_env *env,
	struct cl_io      *io    = ios->cis_io;
	struct cl_io      *io    = ios->cis_io;
	struct cl_object  *obj   = io->ci_obj;
	struct cl_object  *obj   = io->ci_obj;
	struct inode      *inode = vvp_object_inode(obj);
	struct inode      *inode = vvp_object_inode(obj);
	struct ll_ra_read *bead  = &vio->cui_bead;
	struct file       *file  = cio->cui_fd->fd_file;
	struct file       *file  = cio->cui_fd->fd_file;


	int     result;
	int     result;
@@ -530,14 +529,11 @@ static int vvp_io_read_start(const struct lu_env *env,
	cio->cui_fd->fd_file->f_ra.ra_pages = 0;
	cio->cui_fd->fd_file->f_ra.ra_pages = 0;


	/* initialize read-ahead window once per syscall */
	/* initialize read-ahead window once per syscall */
	if (!vio->cui_ra_window_set) {
	if (!vio->cui_ra_valid) {
		vio->cui_ra_window_set = 1;
		vio->cui_ra_valid = true;
		bead->lrr_start = cl_index(obj, pos);
		vio->cui_ra_start = cl_index(obj, pos);
		/*
		vio->cui_ra_count = cl_index(obj, tot + PAGE_CACHE_SIZE - 1);
		 * XXX: explicit PAGE_CACHE_SIZE
		ll_ras_enter(file);
		 */
		bead->lrr_count = cl_index(obj, tot + PAGE_CACHE_SIZE - 1);
		ll_ra_read_in(file, bead);
	}
	}


	/* BUG: 5972 */
	/* BUG: 5972 */
@@ -574,17 +570,6 @@ static int vvp_io_read_start(const struct lu_env *env,
	return result;
	return result;
}
}


static void vvp_io_read_fini(const struct lu_env *env, const struct cl_io_slice *ios)
{
	struct vvp_io *vio = cl2vvp_io(env, ios);
	struct ccc_io *cio = cl2ccc_io(env, ios);

	if (vio->cui_ra_window_set)
		ll_ra_read_ex(cio->cui_fd->fd_file, &vio->cui_bead);

	vvp_io_fini(env, ios);
}

static int vvp_io_commit_sync(const struct lu_env *env, struct cl_io *io,
static int vvp_io_commit_sync(const struct lu_env *env, struct cl_io *io,
			      struct cl_page_list *plist, int from, int to)
			      struct cl_page_list *plist, int from, int to)
{
{
@@ -1092,10 +1077,10 @@ static int vvp_io_read_page(const struct lu_env *env,
static const struct cl_io_operations vvp_io_ops = {
static const struct cl_io_operations vvp_io_ops = {
	.op = {
	.op = {
		[CIT_READ] = {
		[CIT_READ] = {
			.cio_fini      = vvp_io_read_fini,
			.cio_fini	= vvp_io_fini,
			.cio_lock      = vvp_io_read_lock,
			.cio_lock      = vvp_io_read_lock,
			.cio_start     = vvp_io_read_start,
			.cio_start     = vvp_io_read_start,
			.cio_advance   = ccc_io_advance
			.cio_advance	= ccc_io_advance,
		},
		},
		[CIT_WRITE] = {
		[CIT_WRITE] = {
			.cio_fini      = vvp_io_fini,
			.cio_fini      = vvp_io_fini,
@@ -1148,7 +1133,7 @@ int vvp_io_init(const struct lu_env *env, struct cl_object *obj,


	CL_IO_SLICE_CLEAN(cio, cui_cl);
	CL_IO_SLICE_CLEAN(cio, cui_cl);
	cl_io_slice_add(io, &cio->cui_cl, obj, &vvp_io_ops);
	cl_io_slice_add(io, &cio->cui_cl, obj, &vvp_io_ops);
	vio->cui_ra_window_set = 0;
	vio->cui_ra_valid = false;
	result = 0;
	result = 0;
	if (io->ci_type == CIT_READ || io->ci_type == CIT_WRITE) {
	if (io->ci_type == CIT_READ || io->ci_type == CIT_WRITE) {
		size_t count;
		size_t count;