[PATCH 06/13] SQUASHME: pnfs-obj: Change API of objlayout_io_set_result

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Remove the dependency of objlayout_io_set_result() on the existence of
a pnfs_osd_layout at the generic level, by passing the needed pnfs_osd_objid
in question directly. The io-driver has it at hand more readily. It also
decouples the error to be at the index of the original device and enables
a shorter io_err array with only the error devices.

Signed-off-by: Boaz Harrosh <bharrosh@xxxxxxxxxxx>
---
 fs/nfs/objlayout/objio_osd.c |    5 ++++-
 fs/nfs/objlayout/objlayout.c |    7 +++----
 fs/nfs/objlayout/objlayout.h |    4 ++--
 3 files changed, 9 insertions(+), 7 deletions(-)

diff --git a/fs/nfs/objlayout/objio_osd.c b/fs/nfs/objlayout/objio_osd.c
index 1e80f82..f3f7640 100644
--- a/fs/nfs/objlayout/objio_osd.c
+++ b/fs/nfs/objlayout/objio_osd.c
@@ -429,6 +429,7 @@ static int _io_check(struct objio_state *ios, bool is_write)
 	for (i = 0; i <  ios->numdevs; i++) {
 		struct osd_sense_info osi;
 		struct osd_request *or = ios->per_dev[i].or;
+		unsigned dev;
 		int ret;
 
 		if (!or)
@@ -449,7 +450,9 @@ static int _io_check(struct objio_state *ios, bool is_write)
 
 			continue; /* we recovered */
 		}
-		objlayout_io_set_result(&ios->ol_state, ios->per_dev[i].dev,
+		dev = ios->per_dev[i].dev;
+		objlayout_io_set_result(&ios->ol_state, dev,
+					&ios->layout->comps[dev].oc_object_id,
 					osd_pri_2_pnfs_err(osi.osd_err_pri),
 					ios->per_dev[i].offset,
 					ios->per_dev[i].length,
diff --git a/fs/nfs/objlayout/objlayout.c b/fs/nfs/objlayout/objlayout.c
index 1ab9bdc..c80f06c 100644
--- a/fs/nfs/objlayout/objlayout.c
+++ b/fs/nfs/objlayout/objlayout.c
@@ -292,15 +292,14 @@ objlayout_iodone(struct objlayout_io_state *state)
  */
 void
 objlayout_io_set_result(struct objlayout_io_state *state, unsigned index,
-			int osd_error, u64 offset, u64 length, bool is_write)
+			struct pnfs_osd_objid *pooid, int osd_error,
+			u64 offset, u64 length, bool is_write)
 {
 	struct pnfs_osd_ioerr *ioerr = &state->ioerrs[index];
 
 	BUG_ON(index >= state->num_comps);
 	if (osd_error) {
-		struct pnfs_osd_layout *layout = &state->objlseg->layout;
-
-		ioerr->oer_component = layout->olo_comps[index].oc_object_id;
+		ioerr->oer_component = *pooid;
 		ioerr->oer_comp_offset = offset;
 		ioerr->oer_comp_length = length;
 		ioerr->oer_iswrite = is_write;
diff --git a/fs/nfs/objlayout/objlayout.h b/fs/nfs/objlayout/objlayout.h
index 6ea54f6..01a3e4f 100644
--- a/fs/nfs/objlayout/objlayout.h
+++ b/fs/nfs/objlayout/objlayout.h
@@ -132,8 +132,8 @@ extern ssize_t objio_write_pagelist(struct objlayout_io_state *ol_state,
  * callback API
  */
 extern void objlayout_io_set_result(struct objlayout_io_state *state,
-				    unsigned index, int osd_error,
-				    u64 offset, u64 length, bool is_write);
+			unsigned index, struct pnfs_osd_objid *pooid,
+			int osd_error, u64 offset, u64 length, bool is_write);
 
 static inline void
 objlayout_add_delta_space_used(struct objlayout_io_state *state, s64 space_used)
-- 
1.7.2.3

--
To unsubscribe from this list: send the line "unsubscribe linux-nfs" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[Index of Archives]     [Linux Filesystem Development]     [Linux USB Development]     [Linux Media Development]     [Video for Linux]     [Linux NILFS]     [Linux Audio Users]     [Yosemite Info]     [Linux SCSI]

  Powered by Linux