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

Commit 4cdc1d1f authored by Alasdair G Kergon's avatar Alasdair G Kergon Committed by Linus Torvalds
Browse files

dm io: write error bits form long not int

write_err is an unsigned long used with set_bit() so should not be passed
around as unsigned int.

http://bugzilla.kernel.org/show_bug.cgi?id=10271



Signed-off-by: default avatarAlasdair G Kergon <agk@redhat.com>
Cc: Heiko Carstens <heiko.carstens@de.ibm.com>
Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
parent d250dad6
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -114,7 +114,7 @@ static void dec_count(struct io *io, unsigned int region, int error)
			wake_up_process(io->sleeper);

		else {
			int r = io->error;
			unsigned long r = io->error;
			io_notify_fn fn = io->callback;
			void *context = io->context;

+2 −2
Original line number Diff line number Diff line
@@ -753,7 +753,7 @@ static void fail_mirror(struct mirror *m, enum dm_raid1_error error_type)
 * are in the no-sync state.  We have to recover these by
 * recopying from the default mirror to all the others.
 *---------------------------------------------------------------*/
static void recovery_complete(int read_err, unsigned int write_err,
static void recovery_complete(int read_err, unsigned long write_err,
			      void *context)
{
	struct region *reg = (struct region *)context;
@@ -767,7 +767,7 @@ static void recovery_complete(int read_err, unsigned int write_err,
	}

	if (write_err) {
		DMERR_LIMIT("Write error during recovery (error = 0x%x)",
		DMERR_LIMIT("Write error during recovery (error = 0x%lx)",
			    write_err);
		/*
		 * Bits correspond to devices (excluding default mirror).
+1 −1
Original line number Diff line number Diff line
@@ -804,7 +804,7 @@ static void commit_callback(void *context, int success)
 * Called when the copy I/O has finished.  kcopyd actually runs
 * this code so don't block.
 */
static void copy_callback(int read_err, unsigned int write_err, void *context)
static void copy_callback(int read_err, unsigned long write_err, void *context)
{
	struct dm_snap_pending_exception *pe = context;
	struct dm_snapshot *s = pe->snap;
+5 −5
Original line number Diff line number Diff line
@@ -169,7 +169,7 @@ struct kcopyd_job {
	 * Error state of the job.
	 */
	int read_err;
	unsigned int write_err;
	unsigned long write_err;

	/*
	 * Either READ or WRITE
@@ -293,7 +293,7 @@ static int run_complete_job(struct kcopyd_job *job)
{
	void *context = job->context;
	int read_err = job->read_err;
	unsigned int write_err = job->write_err;
	unsigned long write_err = job->write_err;
	kcopyd_notify_fn fn = job->fn;
	struct kcopyd_client *kc = job->kc;

@@ -396,7 +396,7 @@ static int process_jobs(struct list_head *jobs, int (*fn) (struct kcopyd_job *))
		if (r < 0) {
			/* error this rogue job */
			if (job->rw == WRITE)
				job->write_err = (unsigned int) -1;
				job->write_err = (unsigned long) -1L;
			else
				job->read_err = 1;
			push(&_complete_jobs, job);
@@ -448,8 +448,8 @@ static void dispatch_job(struct kcopyd_job *job)
}

#define SUB_JOB_SIZE 128
static void segment_complete(int read_err,
			     unsigned int write_err, void *context)
static void segment_complete(int read_err, unsigned long write_err,
			     void *context)
{
	/* FIXME: tidy this function */
	sector_t progress = 0;
+2 −2
Original line number Diff line number Diff line
@@ -32,8 +32,8 @@ void kcopyd_client_destroy(struct kcopyd_client *kc);
 * read_err is a boolean,
 * write_err is a bitset, with 1 bit for each destination region
 */
typedef void (*kcopyd_notify_fn)(int read_err,
				 unsigned int write_err, void *context);
typedef void (*kcopyd_notify_fn)(int read_err, unsigned long write_err,
				 void *context);

int kcopyd_copy(struct kcopyd_client *kc, struct io_region *from,
		unsigned int num_dests, struct io_region *dests,