For some reason pcs_mds_sys_info structure is different in the kernel and userspace. Let's synchronize it to avoid inaccuracies and discrepancies in the future.
Signed-off-by: Pavel Butsykin <pbutsy...@virtuozzo.com> --- fs/fuse/kio/pcs/pcs_client_types.h | 6 +++--- fs/fuse/kio/pcs/pcs_cluster.c | 8 ++++---- fs/fuse/kio/pcs/pcs_fuse_kdirect.c | 2 +- fs/fuse/kio/pcs/pcs_prot_types.h | 10 ++++++---- 4 files changed, 14 insertions(+), 12 deletions(-) diff --git a/fs/fuse/kio/pcs/pcs_client_types.h b/fs/fuse/kio/pcs/pcs_client_types.h index 1be32cbbf285..c0d14ec5b5d4 100644 --- a/fs/fuse/kio/pcs/pcs_client_types.h +++ b/fs/fuse/kio/pcs/pcs_client_types.h @@ -87,9 +87,9 @@ static inline void pcs_set_fileinfo(struct pcs_dentry_info *i, const struct pcs_ if (mi->sys.stripe_depth == 0) { mi->sys.stripe_depth = 1; - mi->sys.strip_width = mi->sys.chunk_size; + mi->sys.strip_width = mi->sys.chunk_size_lo; } - i->mapping.chunk_size_bits = ilog2(mi->sys.chunk_size); + i->mapping.chunk_size_bits = ilog2(mi->sys.chunk_size_lo); } @@ -170,7 +170,7 @@ typedef struct _pcs_api_csconnreq_t { #define DENTRY_ARGS(de) PCS_FILE_ID_ARGS((de)->id.parent), PCS_FILE_ID_ARGS((de)->fileinfo.attr.id) #define DENTRY_SIZE(de) ((de)->fileinfo.attr.size) -#define DENTRY_CHUNK_SIZE(de) ((de)->fileinfo.sys.chunk_size) +#define DENTRY_CHUNK_SIZE(de) ((de)->fileinfo.sys.chunk_size_lo) #define DENTRY_CHUNK_SIZE_BITS(de) ((de)->mapping.chunk_size_bits) void pcs_mapset_limit(struct pcs_map_set *maps, int limit); diff --git a/fs/fuse/kio/pcs/pcs_cluster.c b/fs/fuse/kio/pcs/pcs_cluster.c index 5df263f01f98..a73120c97e5e 100644 --- a/fs/fuse/kio/pcs/pcs_cluster.c +++ b/fs/fuse/kio/pcs/pcs_cluster.c @@ -364,9 +364,9 @@ static noinline void __pcs_cc_process_ireq_rw(struct pcs_int_request *ireq) unsigned int len; u64 rpos, chunk, end_pos; - rpos = map_file_to_chunk(pos, di->fileinfo.sys.chunk_size, di->fileinfo.sys.stripe_depth, di->fileinfo.sys.strip_width); + rpos = map_file_to_chunk(pos, di->fileinfo.sys.chunk_size_lo, di->fileinfo.sys.stripe_depth, di->fileinfo.sys.strip_width); - chunk = rpos & ~((u64)di->fileinfo.sys.chunk_size - 1); + chunk = rpos & ~((u64)di->fileinfo.sys.chunk_size_lo - 1); end_pos = ((rpos / di->fileinfo.sys.strip_width) + 1) * (u64)di->fileinfo.sys.strip_width; sreq = ireq_alloc(di); @@ -385,9 +385,9 @@ static noinline void __pcs_cc_process_ireq_rw(struct pcs_int_request *ireq) sreq->iochunk.cmd = ireq->apireq.req->type; sreq->iochunk.cs_index = 0; sreq->iochunk.chunk = chunk; - sreq->iochunk.offset = rpos % di->fileinfo.sys.chunk_size; + sreq->iochunk.offset = rpos % di->fileinfo.sys.chunk_size_lo; sreq->iochunk.dio_offset = dio_offset; - len = di->fileinfo.sys.chunk_size - sreq->iochunk.offset; + len = di->fileinfo.sys.chunk_size_lo - sreq->iochunk.offset; if (len > sz) len = sz; if (rpos + len > end_pos) diff --git a/fs/fuse/kio/pcs/pcs_fuse_kdirect.c b/fs/fuse/kio/pcs/pcs_fuse_kdirect.c index 875ad18df4a7..6d12b8038e8a 100644 --- a/fs/fuse/kio/pcs/pcs_fuse_kdirect.c +++ b/fs/fuse/kio/pcs/pcs_fuse_kdirect.c @@ -343,7 +343,7 @@ static int kpcs_do_file_open(struct fuse_conn *fc, struct file *file, struct ino INIT_LIST_HEAD(&di->kq); spin_lock_init(&di->kq_lock); TRACE("init id:%llu chunk_size:%d stripe_depth:%d strip_width:%d\n", - fi->nodeid, di->fileinfo.sys.chunk_size, + fi->nodeid, di->fileinfo.sys.chunk_size_lo, di->fileinfo.sys.stripe_depth, di->fileinfo.sys.strip_width); ret = fuse_pcs_kdirect_claim_op(fc, file, true); diff --git a/fs/fuse/kio/pcs/pcs_prot_types.h b/fs/fuse/kio/pcs/pcs_prot_types.h index bba1f1dc76e3..0e7bc9743885 100644 --- a/fs/fuse/kio/pcs/pcs_prot_types.h +++ b/fs/fuse/kio/pcs/pcs_prot_types.h @@ -104,15 +104,17 @@ struct __pre_aligned(8) pcs_mds_fattr }; struct __pre_aligned(8) pcs_mds_sys_info { - u32 map_type; /* reserved for RAID */ - u32 chunk_size; /* global constant */ + u8 map_type; /* reserved for RAID */ + u8 reserved[2]; + u8 chunk_size_hi; /* chunk size (hi bits) */ + u32 chunk_size_lo; /* chunk size (lo bits) */ u8 stripe_depth; /* for RAID6/RS */ u8 redundancy; /* number of checksums for RAID6/RS */ u8 tolerance; /* write-tolerance (how much lost replicas we can tolerate still allowing writing) */ - u8 reserved8; + u8 reserved2; u32 strip_width; /* length of strip for RAID6/RS */ u32 lease_tout; /* lease expiration timeout (in milliseconds) */ - u32 reserved; + u32 reserved3; } __aligned(8); #define PCS_CHUNK_SIZE_MIN 4096u -- 2.15.1 _______________________________________________ Devel mailing list Devel@openvz.org https://lists.openvz.org/mailman/listinfo/devel