* GPL HEADER END
*/
/*
- * Copyright 2008 Sun Microsystems, Inc. All rights reserved
+ * Copyright (c) 2003, 2010, Oracle and/or its affiliates. All rights reserved.
* Use is subject to license terms.
*/
/*
reccookie->lgc_lgl = loghandle->lgh_id;
reccookie->lgc_index = index;
if ((rec->lrh_type == MDS_UNLINK_REC) ||
- (rec->lrh_type == MDS_SETATTR_REC))
+ (rec->lrh_type == MDS_SETATTR_REC) ||
+ (rec->lrh_type == MDS_SETATTR64_REC))
reccookie->lgc_subsys = LLOG_MDS_OST_ORIG_CTXT;
else if (rec->lrh_type == OST_SZ_REC)
reccookie->lgc_subsys = LLOG_SIZE_ORIG_CTXT;
if (logid != NULL) {
dchild = obd_lvfs_fid2dentry(ctxt->loc_exp, logid->lgl_oid,
- logid->lgl_ogen, logid->lgl_ogr);
+ logid->lgl_ogen, logid->lgl_oseq);
if (IS_ERR(dchild)) {
rc = PTR_ERR(dchild);
l_dput(dchild);
rc = -ENOENT;
CERROR("nonexistent log file "LPX64":"LPX64": rc %d\n",
- logid->lgl_oid, logid->lgl_ogr, rc);
+ logid->lgl_oid, logid->lgl_oseq, rc);
GOTO(out, rc);
}
if (IS_ERR(handle->lgh_file))
GOTO(out, rc = PTR_ERR(handle->lgh_file));
- handle->lgh_id.lgl_ogr = 1;
+ handle->lgh_id.lgl_oseq = 1;
handle->lgh_id.lgl_oid =
handle->lgh_file->f_dentry->d_inode->i_ino;
handle->lgh_id.lgl_ogen =
if (oa == NULL)
GOTO(out, rc = -ENOMEM);
- oa->o_gr = FILTER_GROUP_LLOG;
+ oa->o_seq = FID_SEQ_LLOG;
oa->o_valid = OBD_MD_FLGENER | OBD_MD_FLGROUP;
rc = obd_create(ctxt->loc_exp, oa, NULL, NULL);
if (rc)
GOTO(out, rc);
+ /* FIXME: rationalize the misuse of o_generation in
+ * this API along with mds_obd_{create,destroy}.
+ * Hopefully it is only an internal API issue. */
+#define o_generation o_parent_oid
dchild = obd_lvfs_fid2dentry(ctxt->loc_exp, oa->o_id,
- oa->o_generation, oa->o_gr);
+ oa->o_generation, oa->o_seq);
if (IS_ERR(dchild))
GOTO(out, rc = PTR_ERR(dchild));
if (IS_ERR(handle->lgh_file))
GOTO(out, rc = PTR_ERR(handle->lgh_file));
- handle->lgh_id.lgl_ogr = oa->o_gr;
+ handle->lgh_id.lgl_oseq = oa->o_seq;
handle->lgh_id.lgl_oid = oa->o_id;
handle->lgh_id.lgl_ogen = oa->o_generation;
}
struct obdo *oa;
struct obd_device *obd = handle->lgh_ctxt->loc_exp->exp_obd;
char *dir;
- int rc;
+ void *th;
+ struct inode *inode;
+ int rc, rc1;
ENTRY;
dir = MOUNT_CONFIGS_DIR;
fdentry = handle->lgh_file->f_dentry;
+ inode = fdentry->d_parent->d_inode;
if (strcmp(fdentry->d_parent->d_name.name, dir) == 0) {
- struct inode *inode = fdentry->d_parent->d_inode;
struct lvfs_run_ctxt saved;
struct vfsmount *mnt = mntget(handle->lgh_file->f_vfsmnt);
RETURN(-ENOMEM);
oa->o_id = handle->lgh_id.lgl_oid;
- oa->o_gr = handle->lgh_id.lgl_ogr;
+ oa->o_seq = handle->lgh_id.lgl_oseq;
oa->o_generation = handle->lgh_id.lgl_ogen;
+#undef o_generation
oa->o_valid = OBD_MD_FLID | OBD_MD_FLGROUP | OBD_MD_FLGENER;
rc = llog_lvfs_close(handle);
if (rc)
GOTO(out, rc);
+ th = fsfilt_start_log(obd, inode, FSFILT_OP_UNLINK, NULL, 1);
+ if (IS_ERR(th)) {
+ CERROR("fsfilt_start failed: %ld\n", PTR_ERR(th));
+ GOTO(out, rc = PTR_ERR(th));
+ }
+
rc = obd_destroy(handle->lgh_ctxt->loc_exp, oa, NULL, NULL, NULL, NULL);
+
+ rc1 = fsfilt_commit(obd, inode, th, 0);
+ if (rc == 0 && rc1 != 0)
+ rc = rc1;
out:
OBDO_FREE(oa);
RETURN(rc);