diff options
author | Boaz Harrosh <bharrosh@panasas.com> | 2009-05-24 13:04:26 -0400 |
---|---|---|
committer | James Bottomley <James.Bottomley@HansenPartnership.com> | 2009-06-10 09:59:52 -0400 |
commit | 62f469b596dd0aadf046a69027087c18db43734e (patch) | |
tree | 2e7fd67763b328fb47c3793e8a9d5a13ed49ea33 /drivers/scsi | |
parent | 546881aea9787ed5c626ac99ab80158ea9ae0515 (diff) |
[SCSI] libosd: osd_req_{read,write} takes a length parameter
For supporting of chained-bios we can not inspect the first
bio only, as before. Caller shall pass the total length of the
request, ie. sum_bytes(bio-chain).
Also since the bio might be a chain we don't set it's direction
on behalf of it's callers. The bio direction should be properly
set prior to this call. So fix a couple of write users that now
need to set the bio direction properly
[In this patch I change both library code and user sites at
exofs, to make it easy on integration. It should be submitted
via James's scsi-misc tree.]
Signed-off-by: Boaz Harrosh <bharrosh@panasas.com>
CC: Jeff Garzik <jeff@garzik.org>
Signed-off-by: James Bottomley <James.Bottomley@HansenPartnership.com>
Diffstat (limited to 'drivers/scsi')
-rw-r--r-- | drivers/scsi/osd/osd_initiator.c | 23 |
1 files changed, 13 insertions, 10 deletions
diff --git a/drivers/scsi/osd/osd_initiator.c b/drivers/scsi/osd/osd_initiator.c index ba2ebae305cd..3f5ec578e6c6 100644 --- a/drivers/scsi/osd/osd_initiator.c +++ b/drivers/scsi/osd/osd_initiator.c | |||
@@ -779,13 +779,14 @@ EXPORT_SYMBOL(osd_req_remove_object); | |||
779 | */ | 779 | */ |
780 | 780 | ||
781 | void osd_req_write(struct osd_request *or, | 781 | void osd_req_write(struct osd_request *or, |
782 | const struct osd_obj_id *obj, struct bio *bio, u64 offset) | 782 | const struct osd_obj_id *obj, u64 offset, |
783 | struct bio *bio, u64 len) | ||
783 | { | 784 | { |
784 | _osd_req_encode_common(or, OSD_ACT_WRITE, obj, offset, bio->bi_size); | 785 | _osd_req_encode_common(or, OSD_ACT_WRITE, obj, offset, len); |
785 | WARN_ON(or->out.bio || or->out.total_bytes); | 786 | WARN_ON(or->out.bio || or->out.total_bytes); |
786 | bio->bi_rw |= (1 << BIO_RW); | 787 | WARN_ON(0 == bio_rw_flagged(bio, BIO_RW)); |
787 | or->out.bio = bio; | 788 | or->out.bio = bio; |
788 | or->out.total_bytes = bio->bi_size; | 789 | or->out.total_bytes = len; |
789 | } | 790 | } |
790 | EXPORT_SYMBOL(osd_req_write); | 791 | EXPORT_SYMBOL(osd_req_write); |
791 | 792 | ||
@@ -798,7 +799,8 @@ int osd_req_write_kern(struct osd_request *or, | |||
798 | if (IS_ERR(bio)) | 799 | if (IS_ERR(bio)) |
799 | return PTR_ERR(bio); | 800 | return PTR_ERR(bio); |
800 | 801 | ||
801 | osd_req_write(or, obj, bio, offset); | 802 | bio->bi_rw |= (1 << BIO_RW); /* FIXME: bio_set_dir() */ |
803 | osd_req_write(or, obj, offset, bio, len); | ||
802 | return 0; | 804 | return 0; |
803 | } | 805 | } |
804 | EXPORT_SYMBOL(osd_req_write_kern); | 806 | EXPORT_SYMBOL(osd_req_write_kern); |
@@ -828,13 +830,14 @@ void osd_req_flush_object(struct osd_request *or, | |||
828 | EXPORT_SYMBOL(osd_req_flush_object); | 830 | EXPORT_SYMBOL(osd_req_flush_object); |
829 | 831 | ||
830 | void osd_req_read(struct osd_request *or, | 832 | void osd_req_read(struct osd_request *or, |
831 | const struct osd_obj_id *obj, struct bio *bio, u64 offset) | 833 | const struct osd_obj_id *obj, u64 offset, |
834 | struct bio *bio, u64 len) | ||
832 | { | 835 | { |
833 | _osd_req_encode_common(or, OSD_ACT_READ, obj, offset, bio->bi_size); | 836 | _osd_req_encode_common(or, OSD_ACT_READ, obj, offset, len); |
834 | WARN_ON(or->in.bio || or->in.total_bytes); | 837 | WARN_ON(or->in.bio || or->in.total_bytes); |
835 | bio->bi_rw &= ~(1 << BIO_RW); | 838 | WARN_ON(1 == bio_rw_flagged(bio, BIO_RW)); |
836 | or->in.bio = bio; | 839 | or->in.bio = bio; |
837 | or->in.total_bytes = bio->bi_size; | 840 | or->in.total_bytes = len; |
838 | } | 841 | } |
839 | EXPORT_SYMBOL(osd_req_read); | 842 | EXPORT_SYMBOL(osd_req_read); |
840 | 843 | ||
@@ -847,7 +850,7 @@ int osd_req_read_kern(struct osd_request *or, | |||
847 | if (IS_ERR(bio)) | 850 | if (IS_ERR(bio)) |
848 | return PTR_ERR(bio); | 851 | return PTR_ERR(bio); |
849 | 852 | ||
850 | osd_req_read(or, obj, bio, offset); | 853 | osd_req_read(or, obj, offset, bio, len); |
851 | return 0; | 854 | return 0; |
852 | } | 855 | } |
853 | EXPORT_SYMBOL(osd_req_read_kern); | 856 | EXPORT_SYMBOL(osd_req_read_kern); |