#include <linux/lustre_idl.h>
#include <linux/lustre_mds.h>
#include <linux/lustre_dlm.h>
-#include <linux/obd_class.h>
+#include <linux/lustre_fsfilt.h>
extern inline struct mds_obd *mds_req2mds(struct ptlrpc_request *req);
+static void mds_last_rcvd_cb(struct obd_device *obd, __u64 last_rcvd, int error)
+{
+ struct mds_obd *mds = &obd->u.mds;
+
+ CDEBUG(D_HA, "got callback for last_rcvd "LPD64": rc = %d\n",
+ last_rcvd, error);
+ if (!error && last_rcvd > mds->mds_last_committed)
+ mds->mds_last_committed = last_rcvd;
+}
+
void mds_start_transno(struct mds_obd *mds)
{
ENTRY;
/* Propagate error code. */
if (rc)
- goto out;
+ GOTO(out, rc);
/* we don't allocate new transnos for replayed requests */
- if (req->rq_level == LUSTRE_CONN_RECOVD) {
- rc = 0;
- goto out;
- }
+ if (req->rq_level == LUSTRE_CONN_RECOVD)
+ GOTO(out, rc = 0);
off = MDS_LR_CLIENT + med->med_off * MDS_LR_SIZE;
mcd->mcd_mount_count = cpu_to_le64(mds->mds_mount_count);
mcd->mcd_last_xid = cpu_to_le64(req->rq_xid);
- mds_fs_set_last_rcvd(mds, handle);
+ fsfilt_set_last_rcvd(req->rq_export->exp_obd, last_rcvd, handle,
+ mds_last_rcvd_cb);
written = lustre_fwrite(mds->mds_rcvd_filp, (char *)mcd, sizeof(*mcd),
&off);
CDEBUG(D_INODE, "wrote trans #"LPD64" for client %s at #%d: written = "
rc = 0;
- out:
EXIT;
+ out:
up(&mds->mds_transno_sem);
return rc;
}
to_kdev_t(inode->i_sb->s_dev));
mds_start_transno(mds);
- handle = mds_fs_start(mds, inode, MDS_FSOP_SETATTR);
+ handle = fsfilt_start(obd, inode, FSFILT_OP_SETATTR);
if (IS_ERR(handle)) {
rc = PTR_ERR(handle);
(void)mds_finish_transno(mds, handle, req, rc);
GOTO(out_setattr_de, rc);
}
- rc = mds_fs_setattr(mds, de, handle, &rec->ur_iattr);
+ rc = fsfilt_setattr(obd, de, handle, &rec->ur_iattr);
if (offset) {
body = lustre_msg_buf(req->rq_repmsg, 1);
rc = mds_finish_transno(mds, handle, req, rc);
- err = mds_fs_commit(mds, de->d_inode, handle);
+ err = fsfilt_commit(obd, de->d_inode, handle);
if (err) {
CERROR("error on commit: err = %d\n", err);
if (!rc)
switch (type) {
case S_IFREG:{
- handle = mds_fs_start(mds, dir, MDS_FSOP_CREATE);
+ handle = fsfilt_start(obd, dir, FSFILT_OP_CREATE);
if (IS_ERR(handle))
GOTO(out_transno_dchild, rc = PTR_ERR(handle));
rc = vfs_create(dir, dchild, rec->ur_mode);
break;
}
case S_IFDIR:{
- handle = mds_fs_start(mds, dir, MDS_FSOP_MKDIR);
+ handle = fsfilt_start(obd, dir, FSFILT_OP_MKDIR);
if (IS_ERR(handle))
GOTO(out_transno_dchild, rc = PTR_ERR(handle));
rc = vfs_mkdir(dir, dchild, rec->ur_mode);
break;
}
case S_IFLNK:{
- handle = mds_fs_start(mds, dir, MDS_FSOP_SYMLINK);
+ handle = fsfilt_start(obd, dir, FSFILT_OP_SYMLINK);
if (IS_ERR(handle))
GOTO(out_transno_dchild, rc = PTR_ERR(handle));
rc = vfs_symlink(dir, dchild, rec->ur_tgt);
case S_IFIFO:
case S_IFSOCK:{
int rdev = rec->ur_rdev;
- handle = mds_fs_start(mds, dir, MDS_FSOP_MKNOD);
+ handle = fsfilt_start(obd, dir, FSFILT_OP_MKNOD);
if (IS_ERR(handle))
GOTO(out_transno_dchild, rc = PTR_ERR(handle));
rc = vfs_mknod(dir, dchild, rec->ur_mode, rdev);
CDEBUG(D_INODE, "created ino %lu\n", inode->i_ino);
}
- rc = mds_fs_setattr(mds, dchild, handle, &iattr);
+ rc = fsfilt_setattr(obd, dchild, handle, &iattr);
if (rc) {
CERROR("error on setattr: rc = %d\n", rc);
/* XXX should we abort here in case of error? */
if (rc)
GOTO(out_create_unlink, rc);
}
- err = mds_fs_commit(mds, dir, handle);
+ err = fsfilt_commit(obd, dir, handle);
if (err) {
CERROR("error on commit: err = %d\n", err);
if (!rc)
mds_start_transno(mds);
switch (rec->ur_mode /* & S_IFMT ? */) {
case S_IFDIR:
- handle = mds_fs_start(mds, dir, MDS_FSOP_RMDIR);
+ handle = fsfilt_start(obd, dir, FSFILT_OP_RMDIR);
if (IS_ERR(handle))
GOTO(out_unlink_cancel_transno, rc = PTR_ERR(handle));
rc = vfs_rmdir(dir, dchild);
case S_IFBLK:
case S_IFIFO:
case S_IFSOCK:
- handle = mds_fs_start(mds, dir, MDS_FSOP_UNLINK);
+ handle = fsfilt_start(obd, dir, FSFILT_OP_UNLINK);
if (IS_ERR(handle))
GOTO(out_unlink_cancel_transno, rc = PTR_ERR(handle));
rc = vfs_unlink(dir, dchild);
}
rc = mds_finish_transno(mds, handle, req, rc);
- err = mds_fs_commit(mds, dir, handle);
+ err = fsfilt_commit(obd, dir, handle);
if (err) {
CERROR("error on commit: err = %d\n", err);
if (!rc)
to_kdev_t(de_src->d_inode->i_sb->s_dev));
mds_start_transno(mds);
- handle = mds_fs_start(mds, de_tgt_dir->d_inode, MDS_FSOP_LINK);
+ handle = fsfilt_start(obd, de_tgt_dir->d_inode, FSFILT_OP_LINK);
if (IS_ERR(handle)) {
rc = PTR_ERR(handle);
mds_finish_transno(mds, handle, req, rc);
CERROR("link error %d\n", rc);
rc = mds_finish_transno(mds, handle, req, rc);
- err = mds_fs_commit(mds, de_tgt_dir->d_inode, handle);
+ err = fsfilt_commit(obd, de_tgt_dir->d_inode, handle);
if (err) {
CERROR("error on commit: err = %d\n", err);
if (!rc)
to_kdev_t(de_srcdir->d_inode->i_sb->s_dev));
mds_start_transno(mds);
- handle = mds_fs_start(mds, de_tgtdir->d_inode, MDS_FSOP_RENAME);
+ handle = fsfilt_start(obd, de_tgtdir->d_inode, FSFILT_OP_RENAME);
if (IS_ERR(handle)) {
rc = PTR_ERR(handle);
mds_finish_transno(mds, handle, req, rc);
rc = mds_finish_transno(mds, handle, req, rc);
- err = mds_fs_commit(mds, de_tgtdir->d_inode, handle);
+ err = fsfilt_commit(obd, de_tgtdir->d_inode, handle);
if (err) {
CERROR("error on commit: err = %d\n", err);
if (!rc)