X-Git-Url: https://git.whamcloud.com/?p=fs%2Flustre-release.git;a=blobdiff_plain;f=lustre%2Fobdclass%2Fllog_lvfs.c;h=a01582bef4bc29c26f1cf6a40a729aa7549fcc01;hp=53bbb4a0c98fe9d5040cc186d18677f84e5176c2;hb=2d617260aaa5f778ab8dcb006e2a827f4b8f8567;hpb=d1c8b37cc0b9808251300790ab9c91409fecfb96 diff --git a/lustre/obdclass/llog_lvfs.c b/lustre/obdclass/llog_lvfs.c index 53bbb4a..a01582b 100644 --- a/lustre/obdclass/llog_lvfs.c +++ b/lustre/obdclass/llog_lvfs.c @@ -43,10 +43,6 @@ #define DEBUG_SUBSYSTEM S_LOG -#ifndef EXPORT_SYMTAB -#define EXPORT_SYMTAB -#endif - #ifndef __KERNEL__ #include #endif @@ -163,7 +159,8 @@ static int llog_lvfs_read_blob(struct obd_device *obd, struct l_file *file, RETURN(0); } -static int llog_lvfs_read_header(struct llog_handle *handle) +static int llog_lvfs_read_header(const struct lu_env *env, + struct llog_handle *handle) { struct obd_device *obd; int rc; @@ -215,10 +212,11 @@ static int llog_lvfs_read_header(struct llog_handle *handle) /* returns negative in on error; 0 if success && reccookie == 0; 1 otherwise */ /* appends if idx == -1, otherwise overwrites record idx. */ -static int llog_lvfs_write_rec(struct llog_handle *loghandle, - struct llog_rec_hdr *rec, - struct llog_cookie *reccookie, int cookiecount, - void *buf, int idx) +static int llog_lvfs_write_rec(const struct lu_env *env, + struct llog_handle *loghandle, + struct llog_rec_hdr *rec, + struct llog_cookie *reccookie, int cookiecount, + void *buf, int idx) { struct llog_log_hdr *llh; int reclen = rec->lrh_len, index, rc; @@ -365,13 +363,10 @@ static int llog_lvfs_write_rec(struct llog_handle *loghandle, 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_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; - else if (rec->lrh_type == OST_RAID1_REC) - reccookie->lgc_subsys = LLOG_RD1_ORIG_CTXT; else reccookie->lgc_subsys = -1; rc = 1; @@ -402,9 +397,10 @@ static void llog_skip_over(__u64 *off, int curr, int goal) * - cur_idx to the log index preceeding cur_offset * returns -EIO/-EINVAL on error */ -static int llog_lvfs_next_block(struct llog_handle *loghandle, int *cur_idx, - int next_idx, __u64 *cur_offset, void *buf, - int len) +static int llog_lvfs_next_block(const struct lu_env *env, + struct llog_handle *loghandle, int *cur_idx, + int next_idx, __u64 *cur_offset, void *buf, + int len) { int rc; ENTRY; @@ -458,9 +454,8 @@ static int llog_lvfs_next_block(struct llog_handle *loghandle, int *cur_idx, tail = (struct llog_rec_tail *)((char *)buf + rc - sizeof(struct llog_rec_tail)); - if (LLOG_REC_HDR_NEEDS_SWABBING(rec)) { - lustre_swab_llog_rec(rec, tail); - } + if (LLOG_REC_HDR_NEEDS_SWABBING(rec)) + lustre_swab_llog_rec(rec); *cur_idx = tail->lrt_index; @@ -486,8 +481,9 @@ static int llog_lvfs_next_block(struct llog_handle *loghandle, int *cur_idx, RETURN(-EIO); } -static int llog_lvfs_prev_block(struct llog_handle *loghandle, - int prev_idx, void *buf, int len) +static int llog_lvfs_prev_block(const struct lu_env *env, + struct llog_handle *loghandle, + int prev_idx, void *buf, int len) { __u64 cur_offset; int rc; @@ -584,8 +580,9 @@ static struct file *llog_filp_open(char *dir, char *name, int flags, int mode) /* This is a callback from the llog_* functions. * Assumes caller has already pushed us into the kernel context. */ -static int llog_lvfs_create(struct llog_ctxt *ctxt, struct llog_handle **res, - struct llog_logid *logid, char *name) +static int llog_lvfs_create(const struct lu_env *env, + struct llog_ctxt *ctxt, struct llog_handle **res, + struct llog_logid *logid, char *name) { struct llog_handle *handle; struct obd_device *obd; @@ -689,7 +686,8 @@ out: RETURN(rc); } -static int llog_lvfs_close(struct llog_handle *handle) +static int llog_lvfs_close(const struct lu_env *env, + struct llog_handle *handle) { int rc; ENTRY; @@ -700,7 +698,8 @@ static int llog_lvfs_close(struct llog_handle *handle) RETURN(rc); } -static int llog_lvfs_destroy(struct llog_handle *handle) +static int llog_lvfs_destroy(const struct lu_env *env, + struct llog_handle *handle) { struct dentry *fdentry; struct obdo *oa; @@ -721,14 +720,13 @@ static int llog_lvfs_destroy(struct llog_handle *handle) push_ctxt(&saved, &obd->obd_lvfs_ctxt, NULL); dget(fdentry); - rc = llog_lvfs_close(handle); - - if (rc == 0) { - LOCK_INODE_MUTEX_PARENT(inode); - rc = ll_vfs_unlink(inode, fdentry, mnt); - UNLOCK_INODE_MUTEX(inode); - } - mntput(mnt); + rc = llog_lvfs_close(env, handle); + if (rc == 0) { + mutex_lock_nested(&inode->i_mutex, I_MUTEX_PARENT); + rc = ll_vfs_unlink(inode, fdentry, mnt); + mutex_unlock(&inode->i_mutex); + } + mntput(mnt); dput(fdentry); pop_ctxt(&saved, &obd->obd_lvfs_ctxt, NULL); @@ -745,7 +743,7 @@ static int llog_lvfs_destroy(struct llog_handle *handle) #undef o_generation oa->o_valid = OBD_MD_FLID | OBD_MD_FLGROUP | OBD_MD_FLGENER; - rc = llog_lvfs_close(handle); + rc = llog_lvfs_close(env, handle); if (rc) GOTO(out, rc); @@ -882,50 +880,57 @@ EXPORT_SYMBOL(llog_lvfs_ops); #else /* !__KERNEL__ */ -static int llog_lvfs_read_header(struct llog_handle *handle) +static int llog_lvfs_read_header(const struct lu_env *env, + struct llog_handle *handle) { LBUG(); return 0; } -static int llog_lvfs_write_rec(struct llog_handle *loghandle, - struct llog_rec_hdr *rec, - struct llog_cookie *reccookie, int cookiecount, - void *buf, int idx) +static int llog_lvfs_write_rec(const struct lu_env *env, + struct llog_handle *loghandle, + struct llog_rec_hdr *rec, + struct llog_cookie *reccookie, int cookiecount, + void *buf, int idx) { LBUG(); return 0; } -static int llog_lvfs_next_block(struct llog_handle *loghandle, int *cur_idx, - int next_idx, __u64 *cur_offset, void *buf, - int len) +static int llog_lvfs_next_block(const struct lu_env *env, + struct llog_handle *loghandle, int *cur_idx, + int next_idx, __u64 *cur_offset, void *buf, + int len) { LBUG(); return 0; } -static int llog_lvfs_prev_block(struct llog_handle *loghandle, - int prev_idx, void *buf, int len) +static int llog_lvfs_prev_block(const struct lu_env *env, + struct llog_handle *loghandle, + int prev_idx, void *buf, int len) { LBUG(); return 0; } -static int llog_lvfs_create(struct llog_ctxt *ctxt, struct llog_handle **res, - struct llog_logid *logid, char *name) +static int llog_lvfs_create(const struct lu_env *env, + struct llog_ctxt *ctxt, struct llog_handle **res, + struct llog_logid *logid, char *name) { LBUG(); return 0; } -static int llog_lvfs_close(struct llog_handle *handle) +static int llog_lvfs_close(const struct lu_env *env, + struct llog_handle *handle) { LBUG(); return 0; } -static int llog_lvfs_destroy(struct llog_handle *handle) +static int llog_lvfs_destroy(const struct lu_env *env, + struct llog_handle *handle) { LBUG(); return 0;