[PATCH 01/10] Revert "pnfsd-exofs: Two clients must not write to the same RAID stripe"

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

 



This reverts commit c5c391c6f12e09a65e37ebe3e8c437d075d0befd.
---
 fs/exofs/export.c | 48 ++++++------------------------------------------
 1 file changed, 6 insertions(+), 42 deletions(-)

diff --git a/fs/exofs/export.c b/fs/exofs/export.c
index bc69073..a53f575 100644
--- a/fs/exofs/export.c
+++ b/fs/exofs/export.c
@@ -29,9 +29,6 @@
 
 #include "linux/nfsd/pnfs_osd_xdr_srv.h"
 
-/* TODO: put in sysfs per sb */
-const static unsigned sb_shared_num_stripes = 8;
-
 static int exofs_layout_type(struct super_block *sb)
 {
 	return LAYOUT_OSD2_OBJECTS;
@@ -97,27 +94,14 @@ void ore_layout_2_pnfs_layout(struct pnfs_osd_layout *pl,
 	}
 }
 
-static bool _align_io(struct ore_layout *layout, struct nfsd4_layout_seg *lseg,
-		      bool shared)
+static void _align_io(struct ore_layout *layout, u64 *offset, u64 *length)
 {
 	u64 stripe_size = (layout->group_width - layout->parity) *
 							layout->stripe_unit;
 	u64 group_size = stripe_size * layout->group_depth;
 
-	/* TODO: Don't ignore shared flag. Single writer can get a full group */
-	if (lseg->iomode != IOMODE_READ &&
-	    (layout->parity || (layout->mirrors_p1 > 1))) {
-		/* RAID writes */
-		lseg->offset = div64_u64(lseg->offset, stripe_size) *
-								stripe_size;
-		lseg->length = stripe_size * sb_shared_num_stripes;
-		return true;
-	} else {
-		/* reads or no data redundancy */
-		lseg->offset = div64_u64(lseg->offset, group_size) * group_size;
-		lseg->length = group_size;
-		return false;
-	}
+	*offset = div64_u64(*offset, group_size) * group_size;
+	*length = group_size;
 }
 
 static enum nfsstat4 exofs_layout_get(
@@ -132,41 +116,21 @@ static enum nfsstat4 exofs_layout_get(
 	struct pnfs_osd_layout layout;
 	__be32 *start;
 	unsigned i;
-	bool in_recall, need_recall;
+	bool in_recall;
 	enum nfsstat4 nfserr;
 
 	EXOFS_DBGMSG("(0x%lx) REQUESTED offset=0x%llx len=0x%llx iomod=0x%x\n",
 		     inode->i_ino, res->lg_seg.offset,
 		     res->lg_seg.length, res->lg_seg.iomode);
 
-	need_recall = _align_io(&sbi->layout, &res->lg_seg,
-				test_bit(OBJ_LAYOUT_IS_GIVEN, &oi->i_flags));
+	_align_io(&sbi->layout, &res->lg_seg.offset, &res->lg_seg.length);
+	res->lg_seg.iomode = IOMODE_RW;
 	res->lg_return_on_close = true;
 
 	EXOFS_DBGMSG("(0x%lx) RETURNED offset=0x%llx len=0x%llx iomod=0x%x\n",
 		     inode->i_ino, res->lg_seg.offset,
 		     res->lg_seg.length, res->lg_seg.iomode);
 
-	if (need_recall) {
-		int rc = cb_layout_recall(inode, IOMODE_RW, res->lg_seg.offset,
-				      res->lg_seg.length, (void *)0x17);
-		switch (rc) {
-		case 0:
-		case -EAGAIN:
-			EXOFS_DBGMSG("(0x%lx) @@@ Sharing of RAID5/1 stripe\n",
-				     inode->i_ino);
-			return NFS4ERR_RECALLCONFLICT;
-		default:
-			/* This is fine for now */
-			/* TODO: Fence object off */
-			EXOFS_DBGMSG("(0x%lx) !!!cb_layout_recall => %d\n",
-				     inode->i_ino, rc);
-			/*fallthrough*/
-		case -ENOENT:
-			break;
-		}
-	}
-
 	/* skip opaque size, will be filled-in later */
 	start = exp_xdr_reserve_qwords(xdr, 1);
 	if (!start) {
-- 
1.7.10.2.677.gb6bc67f

--
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