int (* fs_sync)(struct super_block *sb);
int (* fs_prep_san_write)(struct inode *inode, long *blocks,
int nblocks, loff_t newsize);
- int (* fs_write_record)(struct file *, char *, int size, loff_t *);
- int (* fs_read_record)(struct file *, char *, int size, loff_t *);
+ int (* fs_write_record)(struct file *, void *, int size, loff_t *);
+ int (* fs_read_record)(struct file *, void *, int size, loff_t *);
};
extern int fsfilt_register_ops(struct fsfilt_operations *fs_ops);
}
static inline int fsfilt_read_record(struct obd_device *obd, struct file *file,
- char *buf, loff_t size, loff_t *offs)
+ void *buf, loff_t size, loff_t *offs)
{
return obd->obd_fsops->fs_read_record(file, buf, size, offs);
}
static inline int fsfilt_write_record(struct obd_device *obd, struct file *file,
- char *buf, loff_t size, loff_t *offs)
+ void *buf, loff_t size, loff_t *offs)
{
return obd->obd_fsops->fs_write_record(file, buf, size, offs);
}
CDEBUG(D_SUPER, "MDS mount_count is "LPU64", last_transno is "LPU64"\n",
mds->mds_mount_count, mds->mds_last_transno);
- rc = fsfilt_write_record(obd, filp, (char *)msd, sizeof(*msd), &off);
+ rc = fsfilt_write_record(obd, filp, msd, sizeof(*msd), &off);
if (rc != sizeof(*msd)) {
CERROR("error writing MDS server data: rc = %d\n", rc);
if (rc > 0)
(int)written);
} else {
written = fsfilt_write_record(obd, mds->mds_rcvd_filp,
- (char *)med->med_mcd,
+ med->med_mcd,
sizeof(*med->med_mcd),
&off);
fsfilt_commit(obd,mds->mds_rcvd_filp->f_dentry->d_inode,
memset(&zero_mcd, 0, sizeof zero_mcd);
push_ctxt(&saved, &mds->mds_ctxt, NULL);
- written = fsfilt_write_record(obd, mds->mds_rcvd_filp,
- (char *)&zero_mcd, sizeof(zero_mcd),
- &med->med_off);
+ written = fsfilt_write_record(obd, mds->mds_rcvd_filp, &zero_mcd,
+ sizeof(zero_mcd), &med->med_off);
pop_ctxt(&saved, &mds->mds_ctxt, NULL);
if (written != sizeof(zero_mcd)) {
mds->mds_server_data = msd;
if (last_rcvd_size == 0) {
+ int written;
CWARN("%s: initializing new %s\n", obd->obd_name, LAST_RCVD);
memcpy(msd->msd_uuid, obd->obd_uuid.uuid,sizeof(msd->msd_uuid));
msd->msd_server_size = cpu_to_le32(MDS_LR_SERVER_SIZE);
msd->msd_client_start = cpu_to_le32(MDS_LR_CLIENT_START);
msd->msd_client_size = cpu_to_le16(MDS_LR_CLIENT_SIZE);
+ written = fsfilt_write_record(obd, file, msd, sizeof(*msd),
+ &off);
- RETURN(0);
+ if (written == sizeof(*msd))
+ RETURN(0);
+ CERROR("%s: error writing new MSD: %d\n", obd->obd_name,
+ written);
+ GOTO(err_msd, rc = (written < 0 ? written : -EIO));
}
- rc = fsfilt_read_record(obd, file, (char *)msd, sizeof(*msd), &off);
+ rc = fsfilt_read_record(obd, file, msd, sizeof(*msd), &off);
if (rc != sizeof(*msd)) {
CERROR("error reading MDS %s: rc = %d\n", LAST_RCVD,rc);
*/
off = le32_to_cpu(msd->msd_client_start) +
cl_idx * le16_to_cpu(msd->msd_client_size);
- rc = fsfilt_read_record(obd, file, (char *)mcd,
- sizeof(*mcd), &off);
+ rc = fsfilt_read_record(obd, file, mcd, sizeof(*mcd), &off);
if (rc != sizeof(*mcd)) {
CERROR("error reading MDS %s offset %d: rc = %d\n",
LAST_RCVD, cl_idx, rc);
fsfilt_set_last_rcvd(req->rq_export->exp_obd, transno, handle,
mds_commit_cb, NULL);
written = fsfilt_write_record(obd, mds->mds_rcvd_filp,
- (char *)mcd, sizeof(*mcd), &off);
+ mcd, sizeof(*mcd), &off);
CDEBUG(D_INODE, "wrote trans "LPU64" client %s at idx %u: written = "
LPSZ"\n", transno, mcd->mcd_uuid, med->med_idx, written);
return ext3_prep_san_write(inode, blocks, nblocks, newsize);
}
-static int fsfilt_ext3_read_record(struct file * file, char *buf,
+static int fsfilt_ext3_read_record(struct file * file, void *buf,
int size, loff_t *offs)
{
struct buffer_head *bh;
return size;
}
-static int fsfilt_ext3_write_record(struct file * file, char *buf,
+static int fsfilt_ext3_write_record(struct file * file, void *buf,
int size, loff_t *offs)
{
struct buffer_head *bh;
return extN_prep_san_write(inode, blocks, nblocks, newsize);
}
-static int fsfilt_extN_read_record(struct file * file, char *buf,
+static int fsfilt_extN_read_record(struct file * file, void *buf,
int size, loff_t *offs)
{
struct buffer_head *bh;
return size;
}
-static int fsfilt_extN_write_record(struct file * file, char *buf,
+static int fsfilt_extN_write_record(struct file * file, void *buf,
int size, loff_t *offs)
{
struct buffer_head *bh;
fsfilt_set_last_rcvd(exp->exp_obd, last_rcvd, oti->oti_handle,
filter_commit_cb, NULL);
written = fsfilt_write_record(exp->exp_obd,
- filter->fo_rcvd_filp, (char *)fcd,
+ filter->fo_rcvd_filp, fcd,
sizeof(*fcd), &off);
CDEBUG(D_HA, "wrote trans #"LPD64" for client %s at #%d: "
"written = "LPSZ"\n", last_rcvd, fcd->fcd_uuid,
(int)written);
} else {
written = fsfilt_write_record(obd, filter->fo_rcvd_filp,
- (char *)fed->fed_fcd,
- sizeof(*fed->fed_fcd), &off);
+ fed->fed_fcd,
+ sizeof(*fed->fed_fcd),
+ &off);
fsfilt_commit(obd,
filter->fo_rcvd_filp->f_dentry->d_inode,
handle, 0);
memset(&zero_fcd, 0, sizeof zero_fcd);
push_ctxt(&saved, &filter->fo_ctxt, NULL);
written = fsfilt_write_record(obd, filter->fo_rcvd_filp,
- (char *)&zero_fcd, sizeof(zero_fcd),
- &off);
+ &zero_fcd, sizeof(zero_fcd), &off);
/* XXX: this write gets lost sometimes, unless this sync is here. */
if (written > 0)
CDEBUG(D_INODE, "server last_mount: "LPU64"\n",
le64_to_cpu(fsd->fsd_mount_count));
- rc = fsfilt_write_record(obd, filp, (char *)fsd, sizeof(*fsd), &off);
+ rc = fsfilt_write_record(obd, filp, fsd, sizeof(*fsd), &off);
if (rc == sizeof(*fsd))
RETURN(0);
fsd->fsd_subdir_count = cpu_to_le16(FILTER_SUBDIR_COUNT);
filter->fo_subdir_count = FILTER_SUBDIR_COUNT;
} else {
- int retval = fsfilt_read_record(obd, filp, (char *)fsd,
+ int retval = fsfilt_read_record(obd, filp, fsd,
sizeof(*fsd), &off);
if (retval != sizeof(*fsd)) {
CDEBUG(D_INODE,"OBD filter: error reading %s: rc %d\n",
*/
off = le32_to_cpu(fsd->fsd_client_start) +
cl_idx * le16_to_cpu(fsd->fsd_client_size);
- rc = fsfilt_read_record(obd, filp, (char *)fcd, sizeof(*fcd),
- &off);
+ rc = fsfilt_read_record(obd, filp, fcd, sizeof(*fcd), &off);
if (rc != sizeof(*fcd)) {
CERROR("error reading FILTER %s offset %d: rc = %d\n",
LAST_RCVD, cl_idx, rc);