Added kapi-default.h to enable us to not have to include kapi-compat headers when building against mainline. Sunil
Add kapi-default.h to allow us to build ocfs2 1.6 against mainline without the kapi-compat headers. Signed-off-by: Sunil Mushran <sunil.mushran at oracle.com> --- fs/ocfs2/Makefile | 2 +- fs/ocfs2/kapi-default.h | 26 ++++++++++++++++++++++++++ fs/ocfs2/ocfs2.h | 2 ++ 3 files changed, 29 insertions(+), 1 deletions(-) create mode 100644 fs/ocfs2/kapi-default.h diff --git a/fs/ocfs2/Makefile b/fs/ocfs2/Makefile index 8222d03..9ca23b4 100644 --- a/fs/ocfs2/Makefile +++ b/fs/ocfs2/Makefile @@ -13,7 +13,7 @@ include $(OUR_TOPDIR)/Config.make endif COMPAT_SOURCES -COMPAT_HEADERS +COMPAT_HEADERS = kapi-default.h FS_SOURCES FS_HEADERS GLUE_SOURCES diff --git a/fs/ocfs2/kapi-default.h b/fs/ocfs2/kapi-default.h new file mode 100644 index 0000000..fcf3ac9 --- /dev/null +++ b/fs/ocfs2/kapi-default.h @@ -0,0 +1,26 @@ +/* -*- mode: c; c-basic-offset: 8; -*- + * vim: noexpandtab sw=8 ts=8 sts=0: + * + * kapi-default.h + * + * Defines kapi-compat macros and structures used in OCFS2 + * + * Copyright (C) 2009 Oracle. All rights reserved. + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public + * License as published by the Free Software Foundation; either + * version 2 of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + */ + +#ifndef KAPI_DEFAULT_H +#define KAPI_DEFAULT_H + + +#endif diff --git a/fs/ocfs2/ocfs2.h b/fs/ocfs2/ocfs2.h index eae4046..89ed209 100644 --- a/fs/ocfs2/ocfs2.h +++ b/fs/ocfs2/ocfs2.h @@ -42,6 +42,8 @@ # include "ocfs2_jbd_compat.h" #endif +#include "kapi-default.h" + /* For union ocfs2_dlm_lksb */ #include "stackglue.h" -- 1.5.6.5
Sunil Mushran
2009-Nov-11 20:44 UTC
[Ocfs2-devel] [PATCH 02/11] ocfs2: Handle workqueue changes
Mainline commit 52bad64d95bd89e08c49ec5a071fa6dcbe5a1a9c introduced
struct delayed_work to separate delayable and non-delayable work.
Signed-off-by: Sunil Mushran <sunil.mushran at oracle.com>
---
Config.make.in | 2 +
Makefile | 3 +-
configure.in | 6 +++
fs/ocfs2/Makefile | 4 ++
fs/ocfs2/alloc.c | 11 +++---
fs/ocfs2/cluster/Makefile | 4 ++
fs/ocfs2/cluster/heartbeat.c | 10 +++---
fs/ocfs2/cluster/quorum.c | 4 +-
fs/ocfs2/cluster/tcp.c | 65 ++++++++++++++++++++------------------
fs/ocfs2/dcache.c | 6 ++--
fs/ocfs2/dcache.h | 2 +-
fs/ocfs2/dlm/Makefile | 4 ++
fs/ocfs2/dlm/dlmcommon.h | 2 +-
fs/ocfs2/dlm/dlmdomain.c | 2 +-
fs/ocfs2/dlm/dlmrecovery.c | 4 +-
fs/ocfs2/dlm/userdlm.c | 9 +++--
fs/ocfs2/journal.c | 12 +++---
fs/ocfs2/journal.h | 2 +-
fs/ocfs2/kapi-default.h | 6 +++
fs/ocfs2/localalloc.c | 6 ++--
fs/ocfs2/localalloc.h | 2 +-
fs/ocfs2/quota_global.c | 12 +++---
fs/ocfs2/super.c | 6 ++--
kapi-compat/include/workqueue.h | 12 +++++++
24 files changed, 119 insertions(+), 77 deletions(-)
create mode 100644 kapi-compat/include/workqueue.h
diff --git a/Config.make.in b/Config.make.in
index 4e008fb..cf292b6 100644
--- a/Config.make.in
+++ b/Config.make.in
@@ -57,6 +57,8 @@ MAKEBO_VERSION = @VERSION@
EXTRA_CFLAGS += @KAPI_COMPAT_CFLAGS@
+NO_DELAYED_WORK_STRUCT = @NO_DELAYED_WORK_STRUCT@
+
OCFS_DEBUG = @OCFS_DEBUG@
diff --git a/Makefile b/Makefile
index e335ac9..262bc49 100644
--- a/Makefile
+++ b/Makefile
@@ -8,7 +8,8 @@ SUBDIRS = fs vendor
LINUX_INCLUDE_FILES
-KAPI_COMPAT_FILES =
+KAPI_COMPAT_FILES = \
+ kapi-compat/include/workqueue.h
PATCH_FILES
diff --git a/configure.in b/configure.in
index ad06385..e4628a7 100644
--- a/configure.in
+++ b/configure.in
@@ -158,6 +158,12 @@ esac
# Begin kapi_compat checks
+NO_DELAYED_WORK_STRUCT+OCFS2_CHECK_KERNEL([struct delayed_work in workqueue.h],
workqueue.h,
+ , NO_DELAYED_WORK_STRUCT=workqueue.h, [^struct delayed_work])
+AC_SUBST(NO_DELAYED_WORK_STRUCT)
+KAPI_COMPAT_HEADERS="$KAPI_COMPAT_HEADERS $NO_DELAYED_WORK_STRUCT"
+
# End kapi_compat checks
diff --git a/fs/ocfs2/Makefile b/fs/ocfs2/Makefile
index 9ca23b4..4e4f49a 100644
--- a/fs/ocfs2/Makefile
+++ b/fs/ocfs2/Makefile
@@ -34,6 +34,10 @@ EXTRA_CFLAGS += -DCONFIG_OCFS2_DEBUG_MASKLOG
EXTRA_CFLAGS += -DCONFIG_OCFS2_FS_STATS
+ifdef NO_DELAYED_WORK_STRUCT
+EXTRA_CFLAGS += -DNO_DELAYED_WORK_STRUCT
+endif
+
#
# Since SUBDIRS means something to kbuild, define them safely. Do not
# include trailing slashes.
diff --git a/fs/ocfs2/alloc.c b/fs/ocfs2/alloc.c
index 38a42f5..a1cfe4b 100644
--- a/fs/ocfs2/alloc.c
+++ b/fs/ocfs2/alloc.c
@@ -6024,12 +6024,11 @@ int ocfs2_flush_truncate_log(struct ocfs2_super *osb)
return status;
}
-static void ocfs2_truncate_log_worker(struct work_struct *work)
+static void ocfs2_truncate_log_worker(kapi_work_struct_t *work)
{
int status;
- struct ocfs2_super *osb - container_of(work, struct ocfs2_super,
- osb_truncate_log_wq.work);
+ struct ocfs2_super *osb = work_to_object(work, struct ocfs2_super,
+ osb_truncate_log_wq.work);
mlog_entry_void();
@@ -6262,8 +6261,8 @@ int ocfs2_truncate_log_init(struct ocfs2_super *osb)
/* ocfs2_truncate_log_shutdown keys on the existence of
* osb->osb_tl_inode so we don't set any of the osb variables
* until we're sure all is well. */
- INIT_DELAYED_WORK(&osb->osb_truncate_log_wq,
- ocfs2_truncate_log_worker);
+ KAPI_INIT_DELAYED_WORK(&osb->osb_truncate_log_wq,
+ ocfs2_truncate_log_worker, osb);
osb->osb_tl_bh = tl_bh;
osb->osb_tl_inode = tl_inode;
diff --git a/fs/ocfs2/cluster/Makefile b/fs/ocfs2/cluster/Makefile
index fc5d3a0..c1f4f31 100644
--- a/fs/ocfs2/cluster/Makefile
+++ b/fs/ocfs2/cluster/Makefile
@@ -18,6 +18,10 @@ HEADERS
EXTRA_CFLAGS += -DCONFIG_OCFS2_DEBUG_MASKLOG
+ifdef NO_DELAYED_WORK_STRUCT
+EXTRA_CFLAGS += -DNO_DELAYED_WORK_STRUCT
+endif
+
SOURCES += \
heartbeat.c \
masklog.c \
diff --git a/fs/ocfs2/cluster/heartbeat.c b/fs/ocfs2/cluster/heartbeat.c
index c452d11..68e9af5 100644
--- a/fs/ocfs2/cluster/heartbeat.c
+++ b/fs/ocfs2/cluster/heartbeat.c
@@ -162,11 +162,10 @@ struct o2hb_bio_wait_ctxt {
int wc_error;
};
-static void o2hb_write_timeout(struct work_struct *work)
+static void o2hb_write_timeout(kapi_work_struct_t *work)
{
- struct o2hb_region *reg - container_of(work, struct o2hb_region,
- hr_write_timeout_work.work);
+ struct o2hb_region *reg = work_to_object(work, struct o2hb_region,
+ hr_write_timeout_work.work);
mlog(ML_ERROR, "Heartbeat write timeout to device %s after %u "
"milliseconds\n", reg->hr_dev_name,
@@ -1400,7 +1399,8 @@ static ssize_t o2hb_region_dev_write(struct o2hb_region
*reg,
goto out;
}
- INIT_DELAYED_WORK(®->hr_write_timeout_work, o2hb_write_timeout);
+ KAPI_INIT_DELAYED_WORK(®->hr_write_timeout_work, o2hb_write_timeout,
+ reg);
/*
* A node is considered live after it has beat LIVE_THRESHOLD
diff --git a/fs/ocfs2/cluster/quorum.c b/fs/ocfs2/cluster/quorum.c
index bbacf7d..242622f 100644
--- a/fs/ocfs2/cluster/quorum.c
+++ b/fs/ocfs2/cluster/quorum.c
@@ -91,7 +91,7 @@ void o2quo_disk_timeout(void)
o2quo_fence_self();
}
-static void o2quo_make_decision(struct work_struct *work)
+static void o2quo_make_decision(kapi_work_struct_t *work)
{
int quorum;
int lowest_hb, lowest_reachable = 0, fence = 0;
@@ -309,7 +309,7 @@ void o2quo_init(void)
struct o2quo_state *qs = &o2quo_state;
spin_lock_init(&qs->qs_lock);
- INIT_WORK(&qs->qs_work, o2quo_make_decision);
+ KAPI_INIT_WORK(&qs->qs_work, o2quo_make_decision, qs);
}
void o2quo_exit(void)
diff --git a/fs/ocfs2/cluster/tcp.c b/fs/ocfs2/cluster/tcp.c
index 334f231..4b8279e 100644
--- a/fs/ocfs2/cluster/tcp.c
+++ b/fs/ocfs2/cluster/tcp.c
@@ -133,11 +133,11 @@ static int o2net_sys_err_translations[O2NET_ERR_MAX]
[O2NET_ERR_DIED] = -EHOSTDOWN,};
/* can't quite avoid *all* internal declarations :/ */
-static void o2net_sc_connect_completed(struct work_struct *work);
-static void o2net_rx_until_empty(struct work_struct *work);
-static void o2net_shutdown_sc(struct work_struct *work);
+static void o2net_sc_connect_completed(kapi_work_struct_t *work);
+static void o2net_rx_until_empty(kapi_work_struct_t *work);
+static void o2net_shutdown_sc(kapi_work_struct_t *work);
static void o2net_listen_data_ready(struct sock *sk, int bytes);
-static void o2net_sc_send_keep_req(struct work_struct *work);
+static void o2net_sc_send_keep_req(kapi_work_struct_t *work);
static void o2net_idle_timer(unsigned long data);
static void o2net_sc_postpone_idle(struct o2net_sock_container *sc);
static void o2net_sc_reset_idle_timer(struct o2net_sock_container *sc);
@@ -386,10 +386,11 @@ static struct o2net_sock_container *sc_alloc(struct
o2nm_node *node)
o2nm_node_get(node);
sc->sc_node = node;
- INIT_WORK(&sc->sc_connect_work, o2net_sc_connect_completed);
- INIT_WORK(&sc->sc_rx_work, o2net_rx_until_empty);
- INIT_WORK(&sc->sc_shutdown_work, o2net_shutdown_sc);
- INIT_DELAYED_WORK(&sc->sc_keepalive_work, o2net_sc_send_keep_req);
+ KAPI_INIT_WORK(&sc->sc_connect_work, o2net_sc_connect_completed, sc);
+ KAPI_INIT_WORK(&sc->sc_rx_work, o2net_rx_until_empty, sc);
+ KAPI_INIT_WORK(&sc->sc_shutdown_work, o2net_shutdown_sc, sc);
+ KAPI_INIT_DELAYED_WORK(&sc->sc_keepalive_work, o2net_sc_send_keep_req,
+ sc);
init_timer(&sc->sc_idle_timeout);
sc->sc_idle_timeout.function = o2net_idle_timer;
@@ -662,11 +663,11 @@ static void o2net_ensure_shutdown(struct o2net_node *nn,
* ourselves as state_change couldn't get the nn_lock and call set_nn_state
* itself.
*/
-static void o2net_shutdown_sc(struct work_struct *work)
+static void o2net_shutdown_sc(kapi_work_struct_t *work)
{
struct o2net_sock_container *sc - container_of(work, struct
o2net_sock_container,
- sc_shutdown_work);
+ work_to_object(work, struct o2net_sock_container,
+ sc_shutdown_work);
struct o2net_node *nn = o2net_nn_from_num(sc->sc_node->nd_num);
sclog(sc, "shutting down\n");
@@ -1379,10 +1380,10 @@ out:
/* this work func is triggerd by data ready. it reads until it can read no
* more. it interprets 0, eof, as fatal. if data_ready hits while we're
doing
* our work the work struct will be marked and we'll be called again. */
-static void o2net_rx_until_empty(struct work_struct *work)
+static void o2net_rx_until_empty(kapi_work_struct_t *work)
{
struct o2net_sock_container *sc - container_of(work, struct
o2net_sock_container, sc_rx_work);
+ work_to_object(work, struct o2net_sock_container, sc_rx_work);
int ret;
do {
@@ -1439,11 +1440,11 @@ static void o2net_initialize_handshake(void)
/* called when a connect completes and after a sock is accepted. the
* rx path will see the response and mark the sc valid */
-static void o2net_sc_connect_completed(struct work_struct *work)
+static void o2net_sc_connect_completed(kapi_work_struct_t *work)
{
struct o2net_sock_container *sc - container_of(work, struct
o2net_sock_container,
- sc_connect_work);
+ work_to_object(work, struct o2net_sock_container,
+ sc_connect_work);
mlog(ML_MSG, "sc sending handshake with ver %llu id %llx\n",
(unsigned long long)O2NET_PROTOCOL_VERSION,
@@ -1455,11 +1456,11 @@ static void o2net_sc_connect_completed(struct
work_struct *work)
}
/* this is called as a work_struct func. */
-static void o2net_sc_send_keep_req(struct work_struct *work)
+static void o2net_sc_send_keep_req(kapi_work_struct_t *work)
{
struct o2net_sock_container *sc - container_of(work, struct
o2net_sock_container,
- sc_keepalive_work.work);
+ work_to_object(work, struct o2net_sock_container,
+ sc_keepalive_work.work);
o2net_sendpage(sc, o2net_keep_req, sizeof(*o2net_keep_req));
sc_put(sc);
@@ -1525,10 +1526,10 @@ static void o2net_sc_postpone_idle(struct
o2net_sock_container *sc)
* having a connect attempt fail, etc. This centralizes the logic which decides
* if a connect attempt should be made or if we should give up and all future
* transmit attempts should fail */
-static void o2net_start_connect(struct work_struct *work)
+static void o2net_start_connect(kapi_work_struct_t *work)
{
struct o2net_node *nn - container_of(work, struct o2net_node,
nn_connect_work.work);
+ work_to_object(work, struct o2net_node, nn_connect_work.work);
struct o2net_sock_container *sc = NULL;
struct o2nm_node *node = NULL, *mynode = NULL;
struct socket *sock = NULL;
@@ -1642,10 +1643,11 @@ out:
return;
}
-static void o2net_connect_expired(struct work_struct *work)
+static void o2net_connect_expired(kapi_work_struct_t *work)
{
struct o2net_node *nn - container_of(work, struct o2net_node,
nn_connect_expired.work);
+ work_to_object(work, struct o2net_node,
+ nn_connect_expired.work);
spin_lock(&nn->nn_lock);
if (!nn->nn_sc_valid) {
@@ -1660,10 +1662,10 @@ static void o2net_connect_expired(struct work_struct
*work)
spin_unlock(&nn->nn_lock);
}
-static void o2net_still_up(struct work_struct *work)
+static void o2net_still_up(kapi_work_struct_t *work)
{
struct o2net_node *nn - container_of(work, struct o2net_node,
nn_still_up.work);
+ work_to_object(work, struct o2net_node, nn_still_up.work);
o2quo_hb_still_up(o2net_num_from_nn(nn));
}
@@ -1859,7 +1861,7 @@ out:
return ret;
}
-static void o2net_accept_many(struct work_struct *work)
+static void o2net_accept_many(kapi_work_struct_t *work)
{
struct socket *sock = o2net_listen_sock;
while (o2net_accept_one(sock) == 0)
@@ -1915,7 +1917,7 @@ static int o2net_open_listening_sock(__be32 addr, __be16
port)
write_unlock_bh(&sock->sk->sk_callback_lock);
o2net_listen_sock = sock;
- INIT_WORK(&o2net_listen_work, o2net_accept_many);
+ KAPI_INIT_WORK(&o2net_listen_work, o2net_accept_many, sock);
sock->sk->sk_reuse = 1;
ret = sock->ops->bind(sock, (struct sockaddr *)&sin, sizeof(sin));
@@ -2039,10 +2041,11 @@ int o2net_init(void)
atomic_set(&nn->nn_timeout, 0);
spin_lock_init(&nn->nn_lock);
- INIT_DELAYED_WORK(&nn->nn_connect_work, o2net_start_connect);
- INIT_DELAYED_WORK(&nn->nn_connect_expired,
- o2net_connect_expired);
- INIT_DELAYED_WORK(&nn->nn_still_up, o2net_still_up);
+ KAPI_INIT_DELAYED_WORK(&nn->nn_connect_work,
+ o2net_start_connect, nn);
+ KAPI_INIT_DELAYED_WORK(&nn->nn_connect_expired,
+ o2net_connect_expired, nn);
+ KAPI_INIT_DELAYED_WORK(&nn->nn_still_up, o2net_still_up, nn);
/* until we see hb from a node we'll return einval */
nn->nn_persistent_error = -ENOTCONN;
init_waitqueue_head(&nn->nn_sc_wq);
diff --git a/fs/ocfs2/dcache.c b/fs/ocfs2/dcache.c
index b4957c7..8ad82bc 100644
--- a/fs/ocfs2/dcache.c
+++ b/fs/ocfs2/dcache.c
@@ -344,10 +344,10 @@ static void __ocfs2_drop_dl_inodes(struct ocfs2_super
*osb, int drop_count)
spin_unlock(&dentry_list_lock);
}
-void ocfs2_drop_dl_inodes(struct work_struct *work)
+void ocfs2_drop_dl_inodes(kapi_work_struct_t *work)
{
- struct ocfs2_super *osb = container_of(work, struct ocfs2_super,
- dentry_lock_work);
+ struct ocfs2_super *osb = work_to_object(work, struct ocfs2_super,
+ dentry_lock_work);
__ocfs2_drop_dl_inodes(osb, DL_INODE_DROP_COUNT);
/*
diff --git a/fs/ocfs2/dcache.h b/fs/ocfs2/dcache.h
index f5dd178..d13a087 100644
--- a/fs/ocfs2/dcache.h
+++ b/fs/ocfs2/dcache.h
@@ -54,7 +54,7 @@ extern spinlock_t dentry_list_lock;
void ocfs2_dentry_lock_put(struct ocfs2_super *osb,
struct ocfs2_dentry_lock *dl);
-void ocfs2_drop_dl_inodes(struct work_struct *work);
+void ocfs2_drop_dl_inodes(kapi_work_struct_t *work);
void ocfs2_drop_all_dl_inodes(struct ocfs2_super *osb);
struct dentry *ocfs2_find_local_alias(struct inode *inode, u64 parent_blkno,
diff --git a/fs/ocfs2/dlm/Makefile b/fs/ocfs2/dlm/Makefile
index 26cbf6c..44b6cc6 100644
--- a/fs/ocfs2/dlm/Makefile
+++ b/fs/ocfs2/dlm/Makefile
@@ -22,6 +22,10 @@ EXTRA_CFLAGS += -I$(OUR_TOPDIR)/fs/ocfs2
EXTRA_CFLAGS += -DCONFIG_OCFS2_DEBUG_MASKLOG
+ifdef NO_DELAYED_WORK_STRUCT
+EXTRA_CFLAGS += -DNO_DELAYED_WORK_STRUCT
+endif
+
DLM_SOURCES += \
dlmast.c \
dlmconvert.c \
diff --git a/fs/ocfs2/dlm/dlmcommon.h b/fs/ocfs2/dlm/dlmcommon.h
index 0102be3..a13292a 100644
--- a/fs/ocfs2/dlm/dlmcommon.h
+++ b/fs/ocfs2/dlm/dlmcommon.h
@@ -203,7 +203,7 @@ static inline struct hlist_head *dlm_master_hash(struct
dlm_ctxt *dlm,
* called functions that cannot be directly called from the
* net message handlers for some reason, usually because
* they need to send net messages of their own. */
-void dlm_dispatch_work(struct work_struct *work);
+void dlm_dispatch_work(kapi_work_struct_t *work);
struct dlm_lock_resource;
struct dlm_work_item;
diff --git a/fs/ocfs2/dlm/dlmdomain.c b/fs/ocfs2/dlm/dlmdomain.c
index 0334000..05a0350 100644
--- a/fs/ocfs2/dlm/dlmdomain.c
+++ b/fs/ocfs2/dlm/dlmdomain.c
@@ -1613,7 +1613,7 @@ static struct dlm_ctxt *dlm_alloc_ctxt(const char *domain,
spin_lock_init(&dlm->work_lock);
INIT_LIST_HEAD(&dlm->work_list);
- INIT_WORK(&dlm->dispatched_work, dlm_dispatch_work);
+ KAPI_INIT_WORK(&dlm->dispatched_work, dlm_dispatch_work, dlm);
kref_init(&dlm->dlm_refs);
dlm->dlm_state = DLM_CTXT_NEW;
diff --git a/fs/ocfs2/dlm/dlmrecovery.c b/fs/ocfs2/dlm/dlmrecovery.c
index d9fa3d2..2e16a38 100644
--- a/fs/ocfs2/dlm/dlmrecovery.c
+++ b/fs/ocfs2/dlm/dlmrecovery.c
@@ -152,10 +152,10 @@ static inline void dlm_reset_recovery(struct dlm_ctxt
*dlm)
}
/* Worker function used during recovery. */
-void dlm_dispatch_work(struct work_struct *work)
+void dlm_dispatch_work(kapi_work_struct_t *work)
{
struct dlm_ctxt *dlm - container_of(work, struct dlm_ctxt, dispatched_work);
+ work_to_object(work, struct dlm_ctxt, dispatched_work);
LIST_HEAD(tmp_list);
struct dlm_work_item *item, *next;
dlm_workfunc_t *workfunc;
diff --git a/fs/ocfs2/dlm/userdlm.c b/fs/ocfs2/dlm/userdlm.c
index 4cb1d3d..01a57c8 100644
--- a/fs/ocfs2/dlm/userdlm.c
+++ b/fs/ocfs2/dlm/userdlm.c
@@ -171,14 +171,15 @@ static inline void user_dlm_grab_inode_ref(struct
user_lock_res *lockres)
BUG();
}
-static void user_dlm_unblock_lock(struct work_struct *work);
+static void user_dlm_unblock_lock(kapi_work_struct_t *work);
static void __user_dlm_queue_lockres(struct user_lock_res *lockres)
{
if (!(lockres->l_flags & USER_LOCK_QUEUED)) {
user_dlm_grab_inode_ref(lockres);
- INIT_WORK(&lockres->l_work, user_dlm_unblock_lock);
+ KAPI_INIT_WORK(&lockres->l_work, user_dlm_unblock_lock,
+ lockres);
queue_work(user_dlm_worker, &lockres->l_work);
lockres->l_flags |= USER_LOCK_QUEUED;
@@ -278,11 +279,11 @@ static inline void user_dlm_drop_inode_ref(struct
user_lock_res *lockres)
iput(inode);
}
-static void user_dlm_unblock_lock(struct work_struct *work)
+static void user_dlm_unblock_lock(kapi_work_struct_t *work)
{
int new_level, status;
struct user_lock_res *lockres - container_of(work, struct user_lock_res,
l_work);
+ work_to_object(work, struct user_lock_res, l_work);
struct dlm_ctxt *dlm = dlm_ctxt_from_user_lockres(lockres);
mlog(0, "processing lockres %.*s\n", lockres->l_namelen,
diff --git a/fs/ocfs2/journal.c b/fs/ocfs2/journal.c
index 54c16b6..67cc5a7 100644
--- a/fs/ocfs2/journal.c
+++ b/fs/ocfs2/journal.c
@@ -1189,11 +1189,11 @@ struct ocfs2_la_recovery_item {
* NOTE: This function can and will sleep on recovery of other nodes
* during cluster locking, just like any other ocfs2 process.
*/
-void ocfs2_complete_recovery(struct work_struct *work)
+void ocfs2_complete_recovery(kapi_work_struct_t *work)
{
int ret;
struct ocfs2_journal *journal - container_of(work, struct ocfs2_journal,
j_recovery_work);
+ work_to_object(work, struct ocfs2_journal, j_recovery_work);
struct ocfs2_super *osb = journal->j_osb;
struct ocfs2_dinode *la_dinode, *tl_dinode;
struct ocfs2_la_recovery_item *item, *n;
@@ -1926,13 +1926,13 @@ out:
}
/* Worker task that gets fired every ORPHAN_SCAN_SCHEDULE_TIMEOUT millsec */
-void ocfs2_orphan_scan_work(struct work_struct *work)
+void ocfs2_orphan_scan_work(kapi_work_struct_t *work)
{
struct ocfs2_orphan_scan *os;
struct ocfs2_super *osb;
- os = container_of(work, struct ocfs2_orphan_scan,
- os_orphan_scan_work.work);
+ os = work_to_object(work, struct ocfs2_orphan_scan,
+ os_orphan_scan_work.work);
osb = os->os_osb;
mutex_lock(&os->os_lock);
@@ -1965,7 +1965,7 @@ void ocfs2_orphan_scan_init(struct ocfs2_super *osb)
os->os_count = 0;
os->os_seqno = 0;
mutex_init(&os->os_lock);
- INIT_DELAYED_WORK(&os->os_orphan_scan_work, ocfs2_orphan_scan_work);
+ KAPI_INIT_DELAYED_WORK(&os->os_orphan_scan_work,
ocfs2_orphan_scan_work, os);
}
void ocfs2_orphan_scan_start(struct ocfs2_super *osb)
diff --git a/fs/ocfs2/journal.h b/fs/ocfs2/journal.h
index 3f74e09..321c857 100644
--- a/fs/ocfs2/journal.h
+++ b/fs/ocfs2/journal.h
@@ -159,7 +159,7 @@ void ocfs2_orphan_scan_start(struct ocfs2_super *osb);
void ocfs2_orphan_scan_stop(struct ocfs2_super *osb);
void ocfs2_orphan_scan_exit(struct ocfs2_super *osb);
-void ocfs2_complete_recovery(struct work_struct *work);
+void ocfs2_complete_recovery(kapi_work_struct_t *work);
void ocfs2_wait_for_recovery(struct ocfs2_super *osb);
int ocfs2_recovery_init(struct ocfs2_super *osb);
diff --git a/fs/ocfs2/kapi-default.h b/fs/ocfs2/kapi-default.h
index fcf3ac9..21e5e3a 100644
--- a/fs/ocfs2/kapi-default.h
+++ b/fs/ocfs2/kapi-default.h
@@ -22,5 +22,11 @@
#ifndef KAPI_DEFAULT_H
#define KAPI_DEFAULT_H
+#ifndef KAPI_INIT_WORK
+typedef struct work_struct kapi_work_struct_t;
+# define work_to_object(a, b, c) container_of(a, b, c)
+# define KAPI_INIT_WORK(a, b, c) INIT_WORK(a, b)
+# define KAPI_INIT_DELAYED_WORK(a, b, c) INIT_DELAYED_WORK(a, b)
+#endif
#endif
diff --git a/fs/ocfs2/localalloc.c b/fs/ocfs2/localalloc.c
index ac10f83..83b22ca 100644
--- a/fs/ocfs2/localalloc.c
+++ b/fs/ocfs2/localalloc.c
@@ -93,11 +93,11 @@ void ocfs2_local_alloc_seen_free_bits(struct ocfs2_super
*osb,
spin_unlock(&osb->osb_lock);
}
-void ocfs2_la_enable_worker(struct work_struct *work)
+void ocfs2_la_enable_worker(kapi_work_struct_t *work)
{
struct ocfs2_super *osb - container_of(work, struct ocfs2_super,
- la_enable_wq.work);
+ work_to_object(work, struct ocfs2_super,
+ la_enable_wq.work);
spin_lock(&osb->osb_lock);
osb->local_alloc_state = OCFS2_LA_ENABLED;
spin_unlock(&osb->osb_lock);
diff --git a/fs/ocfs2/localalloc.h b/fs/ocfs2/localalloc.h
index ac5ea9f..3234d2a 100644
--- a/fs/ocfs2/localalloc.h
+++ b/fs/ocfs2/localalloc.h
@@ -54,6 +54,6 @@ int ocfs2_claim_local_alloc_bits(struct ocfs2_super *osb,
void ocfs2_local_alloc_seen_free_bits(struct ocfs2_super *osb,
unsigned int num_clusters);
-void ocfs2_la_enable_worker(struct work_struct *work);
+void ocfs2_la_enable_worker(kapi_work_struct_t *work);
#endif /* OCFS2_LOCALALLOC_H */
diff --git a/fs/ocfs2/quota_global.c b/fs/ocfs2/quota_global.c
index b437dc0..0f319fb 100644
--- a/fs/ocfs2/quota_global.c
+++ b/fs/ocfs2/quota_global.c
@@ -28,7 +28,7 @@
static struct workqueue_struct *ocfs2_quota_wq = NULL;
-static void qsync_work_fn(struct work_struct *work);
+static void qsync_work_fn(kapi_work_struct_t *work);
static void ocfs2_global_disk2memdqb(struct dquot *dquot, void *dp)
{
@@ -360,7 +360,7 @@ int ocfs2_global_read_info(struct super_block *sb, int type)
oinfo->dqi_gi.dqi_usable_bs = sb->s_blocksize -
OCFS2_QBLK_RESERVED_SPACE;
oinfo->dqi_gi.dqi_qtree_depth = qtree_depth(&oinfo->dqi_gi);
- INIT_DELAYED_WORK(&oinfo->dqi_sync_work, qsync_work_fn);
+ KAPI_INIT_DELAYED_WORK(&oinfo->dqi_sync_work, qsync_work_fn, oinfo);
queue_delayed_work(ocfs2_quota_wq, &oinfo->dqi_sync_work,
msecs_to_jiffies(oinfo->dqi_syncms));
@@ -653,11 +653,11 @@ out:
return status;
}
-static void qsync_work_fn(struct work_struct *work)
+static void qsync_work_fn(kapi_work_struct_t *work)
{
- struct ocfs2_mem_dqinfo *oinfo = container_of(work,
- struct ocfs2_mem_dqinfo,
- dqi_sync_work.work);
+ struct ocfs2_mem_dqinfo *oinfo + work_to_object(work, struct
ocfs2_mem_dqinfo,
+ dqi_sync_work.work);
struct super_block *sb = oinfo->dqi_gqinode->i_sb;
dquot_scan_active(sb, ocfs2_sync_dquot_helper, oinfo->dqi_type);
diff --git a/fs/ocfs2/super.c b/fs/ocfs2/super.c
index c0e48ae..5f19ff5 100644
--- a/fs/ocfs2/super.c
+++ b/fs/ocfs2/super.c
@@ -2027,7 +2027,7 @@ static int ocfs2_initialize_super(struct super_block *sb,
osb->local_alloc_state = OCFS2_LA_UNUSED;
osb->local_alloc_bh = NULL;
- INIT_DELAYED_WORK(&osb->la_enable_wq, ocfs2_la_enable_worker);
+ KAPI_INIT_DELAYED_WORK(&osb->la_enable_wq, ocfs2_la_enable_worker,
osb);
init_waitqueue_head(&osb->osb_mount_event);
@@ -2134,10 +2134,10 @@ static int ocfs2_initialize_super(struct super_block
*sb,
spin_lock_init(&journal->j_lock);
journal->j_trans_id = (unsigned long) 1;
INIT_LIST_HEAD(&journal->j_la_cleanups);
- INIT_WORK(&journal->j_recovery_work, ocfs2_complete_recovery);
+ KAPI_INIT_WORK(&journal->j_recovery_work, ocfs2_complete_recovery,
journal);
journal->j_state = OCFS2_JOURNAL_FREE;
- INIT_WORK(&osb->dentry_lock_work, ocfs2_drop_dl_inodes);
+ KAPI_INIT_WORK(&osb->dentry_lock_work, ocfs2_drop_dl_inodes, osb);
osb->dentry_lock_list = NULL;
/* get some pseudo constants for clustersize bits */
diff --git a/kapi-compat/include/workqueue.h b/kapi-compat/include/workqueue.h
new file mode 100644
index 0000000..7f76278
--- /dev/null
+++ b/kapi-compat/include/workqueue.h
@@ -0,0 +1,12 @@
+#ifndef KAPI_WORKQUEUE_H
+#define KAPI_WORKQUEUE_H
+
+#ifdef NO_DELAYED_WORK_STRUCT
+# define delayed_work work_struct
+typedef void kapi_work_struct_t;
+# define work_to_object(a, b, c) (a)
+# define KAPI_INIT_WORK(a, b, c) INIT_WORK(a, b, c)
+# define KAPI_INIT_DELAYED_WORK(a, b, c) INIT_WORK(a, b, c)
+#endif
+
+#endif
--
1.5.6.5
Sunil Mushran
2009-Nov-11 20:44 UTC
[Ocfs2-devel] [PATCH 03/11] ocfs2: Handle missing dlmconstants.h
Mainline commit d69a3ad6a0e47b2aa9b2b2ddfd385752132a4d34 split lock mode and flag constants from dlm.h into a sharable header, dlmconstants.h. This patch adds a header with the same name that merely includes dlm.h. Signed-off-by: Sunil Mushran <sunil.mushran at oracle.com> --- Config.make.in | 1 + Makefile | 3 ++- configure.in | 6 ++++++ fs/ocfs2/Makefile | 4 ++++ fs/ocfs2/stackglue.h | 2 ++ kapi-compat/include/dlmconstants.h | 9 +++++++++ 6 files changed, 24 insertions(+), 1 deletions(-) create mode 100644 kapi-compat/include/dlmconstants.h diff --git a/Config.make.in b/Config.make.in index cf292b6..33b7a89 100644 --- a/Config.make.in +++ b/Config.make.in @@ -58,6 +58,7 @@ MAKEBO_VERSION = @VERSION@ EXTRA_CFLAGS += @KAPI_COMPAT_CFLAGS@ NO_DELAYED_WORK_STRUCT = @NO_DELAYED_WORK_STRUCT@ +NO_DLMCONSTANTS_HEADER = @NO_DLMCONSTANTS_HEADER@ OCFS_DEBUG = @OCFS_DEBUG@ diff --git a/Makefile b/Makefile index 262bc49..d038ae9 100644 --- a/Makefile +++ b/Makefile @@ -9,7 +9,8 @@ SUBDIRS = fs vendor LINUX_INCLUDE_FILES KAPI_COMPAT_FILES = \ - kapi-compat/include/workqueue.h + kapi-compat/include/workqueue.h \ + kapi-compat/include/dlmconstants.h PATCH_FILES diff --git a/configure.in b/configure.in index e4628a7..3528514 100644 --- a/configure.in +++ b/configure.in @@ -164,6 +164,12 @@ OCFS2_CHECK_KERNEL([struct delayed_work in workqueue.h], workqueue.h, AC_SUBST(NO_DELAYED_WORK_STRUCT) KAPI_COMPAT_HEADERS="$KAPI_COMPAT_HEADERS $NO_DELAYED_WORK_STRUCT" +NO_DLMCONSTANTS_HEADER+OCFS2_CHECK_KERNEL([dlmconstants.h], dlmconstants.h, + , NO_DLMCONSTANTS_HEADER=dlmconstants.h, [__DLMCONSTANTS_DOT_H__]) +AC_SUBST(NO_DLMCONSTANTS_HEADER) +KAPI_COMPAT_HEADERS="$KAPI_COMPAT_HEADERS $NO_DLMCONSTANTS_HEADER" + # End kapi_compat checks diff --git a/fs/ocfs2/Makefile b/fs/ocfs2/Makefile index 4e4f49a..5f969fe 100644 --- a/fs/ocfs2/Makefile +++ b/fs/ocfs2/Makefile @@ -38,6 +38,10 @@ ifdef NO_DELAYED_WORK_STRUCT EXTRA_CFLAGS += -DNO_DELAYED_WORK_STRUCT endif +ifdef NO_DLMCONSTANTS_HEADER +EXTRA_CFLAGS += -DNO_DLMCONSTANTS_HEADER +endif + # # Since SUBDIRS means something to kbuild, define them safely. Do not # include trailing slashes. diff --git a/fs/ocfs2/stackglue.h b/fs/ocfs2/stackglue.h index 03a44d6..52d1a1d 100644 --- a/fs/ocfs2/stackglue.h +++ b/fs/ocfs2/stackglue.h @@ -23,7 +23,9 @@ #include <linux/types.h> #include <linux/list.h> +#ifndef NO_DLMCONSTANTS_HEADER #include <linux/dlmconstants.h> +#endif #include "dlm/dlmapi.h" #include <linux/dlm.h> diff --git a/kapi-compat/include/dlmconstants.h b/kapi-compat/include/dlmconstants.h new file mode 100644 index 0000000..19e92c9 --- /dev/null +++ b/kapi-compat/include/dlmconstants.h @@ -0,0 +1,9 @@ +#ifndef KAPI_DLMCONSTANTS_H +#define KAPI_DLMCONSTANTS_H + +#ifdef NO_DLMCONSTANTS_HEADER +#include <linux/types.h> +#include <linux/dlm.h> +#endif + +#endif -- 1.5.6.5
Sunil Mushran
2009-Nov-11 20:44 UTC
[Ocfs2-devel] [PATCH 08/11] ocfs2: Handle struct f_path in struct file
Mainline commit 0f7fc9e4d03987fe29f6dd4aa67e4c56eb7ecb05 added
struct path into struct file.
Signed-off-by: Sunil Mushran <sunil.mushran at oracle.com>
---
Config.make.in | 1 +
Makefile | 3 ++-
configure.in | 6 ++++++
fs/ocfs2/Makefile | 4 ++++
fs/ocfs2/aops.c | 4 ++--
fs/ocfs2/dir.c | 2 +-
fs/ocfs2/dlm/Makefile | 4 ++++
fs/ocfs2/dlm/dlmfs.c | 4 ++--
fs/ocfs2/file.c | 36 ++++++++++++++++++------------------
fs/ocfs2/ioctl.c | 6 +++---
fs/ocfs2/kapi-default.h | 5 +++++
fs/ocfs2/mmap.c | 8 ++++----
kapi-compat/include/fpath.h | 9 +++++++++
13 files changed, 61 insertions(+), 31 deletions(-)
create mode 100644 kapi-compat/include/fpath.h
diff --git a/Config.make.in b/Config.make.in
index 33b7a89..eb8e2a9 100644
--- a/Config.make.in
+++ b/Config.make.in
@@ -59,6 +59,7 @@ EXTRA_CFLAGS += @KAPI_COMPAT_CFLAGS@
NO_DELAYED_WORK_STRUCT = @NO_DELAYED_WORK_STRUCT@
NO_DLMCONSTANTS_HEADER = @NO_DLMCONSTANTS_HEADER@
+NO_F_PATH_IN_STRUCT_FILE = @NO_F_PATH_IN_STRUCT_FILE@
OCFS_DEBUG = @OCFS_DEBUG@
diff --git a/Makefile b/Makefile
index 8e58c5d..6a28531 100644
--- a/Makefile
+++ b/Makefile
@@ -13,7 +13,8 @@ KAPI_COMPAT_FILES = \
kapi-compat/include/dlmconstants.h \
kapi-compat/include/task_pid_nr.h \
kapi-compat/include/current_umask.h \
- kapi-compat/include/sync_mapping.h
+ kapi-compat/include/sync_mapping.h \
+ kapi-compat/include/fpath.h
PATCH_FILES
diff --git a/configure.in b/configure.in
index b543a9d..46f1f96 100644
--- a/configure.in
+++ b/configure.in
@@ -193,6 +193,12 @@ if test "x$do_sync_mapping_range" = "x"
; then
KAPI_COMPAT_HEADERS="$KAPI_COMPAT_HEADERS sync_mapping.h"
fi
+NO_F_PATH_IN_STRUCT_FILE+OCFS2_CHECK_KERNEL([f_path in fs.h], fs.h,
+ , NO_F_PATH_IN_STRUCT_FILE=fpath.h, [struct path.*f_path])
+AC_SUBST(NO_F_PATH_IN_STRUCT_FILE)
+KAPI_COMPAT_HEADERS="$KAPI_COMPAT_HEADERS $NO_F_PATH_IN_STRUCT_FILE"
+
# End kapi_compat checks
diff --git a/fs/ocfs2/Makefile b/fs/ocfs2/Makefile
index b2a0a7a..07d2064 100644
--- a/fs/ocfs2/Makefile
+++ b/fs/ocfs2/Makefile
@@ -44,6 +44,10 @@ ifdef NO_DLMCONSTANTS_HEADER
EXTRA_CFLAGS += -DNO_DLMCONSTANTS_HEADER
endif
+ifdef NO_F_PATH_IN_STRUCT_FILE
+EXTRA_CFLAGS += -DNO_F_PATH_IN_STRUCT_FILE
+endif
+
#
# Since SUBDIRS means something to kbuild, define them safely. Do not
# include trailing slashes.
diff --git a/fs/ocfs2/aops.c b/fs/ocfs2/aops.c
index deb2b13..67a3731 100644
--- a/fs/ocfs2/aops.c
+++ b/fs/ocfs2/aops.c
@@ -636,7 +636,7 @@ static void ocfs2_dio_end_io(struct kiocb *iocb,
ssize_t bytes,
void *private)
{
- struct inode *inode = iocb->ki_filp->f_path.dentry->d_inode;
+ struct inode *inode = filp_dentry(iocb->ki_filp)->d_inode;
int level;
/* this io's submitter should not have unlocked this before we could */
@@ -678,7 +678,7 @@ static ssize_t ocfs2_direct_IO(int rw,
unsigned long nr_segs)
{
struct file *file = iocb->ki_filp;
- struct inode *inode =
file->f_path.dentry->d_inode->i_mapping->host;
+ struct inode *inode = filp_dentry(file)->d_inode->i_mapping->host;
int ret;
mlog_entry_void();
diff --git a/fs/ocfs2/dir.c b/fs/ocfs2/dir.c
index 28c3ec2..69b3402 100644
--- a/fs/ocfs2/dir.c
+++ b/fs/ocfs2/dir.c
@@ -2025,7 +2025,7 @@ int ocfs2_dir_foreach(struct inode *inode, loff_t *f_pos,
void *priv,
int ocfs2_readdir(struct file * filp, void * dirent, filldir_t filldir)
{
int error = 0;
- struct inode *inode = filp->f_path.dentry->d_inode;
+ struct inode *inode = filp_dentry(filp)->d_inode;
int lock_level = 0;
mlog_entry("dirino=%llu\n",
diff --git a/fs/ocfs2/dlm/Makefile b/fs/ocfs2/dlm/Makefile
index 44b6cc6..a42d35d 100644
--- a/fs/ocfs2/dlm/Makefile
+++ b/fs/ocfs2/dlm/Makefile
@@ -26,6 +26,10 @@ ifdef NO_DELAYED_WORK_STRUCT
EXTRA_CFLAGS += -DNO_DELAYED_WORK_STRUCT
endif
+ifdef NO_F_PATH_IN_STRUCT_FILE
+EXTRA_CFLAGS += -DNO_F_PATH_IN_STRUCT_FILE
+endif
+
DLM_SOURCES += \
dlmast.c \
dlmconvert.c \
diff --git a/fs/ocfs2/dlm/dlmfs.c b/fs/ocfs2/dlm/dlmfs.c
index 02bf178..8e293fa 100644
--- a/fs/ocfs2/dlm/dlmfs.c
+++ b/fs/ocfs2/dlm/dlmfs.c
@@ -187,7 +187,7 @@ static ssize_t dlmfs_file_read(struct file *filp,
int bytes_left;
ssize_t readlen;
char *lvb_buf;
- struct inode *inode = filp->f_path.dentry->d_inode;
+ struct inode *inode = filp_dentry(filp)->d_inode;
mlog(0, "inode %lu, count = %zu, *ppos = %llu\n",
inode->i_ino, count, *ppos);
@@ -231,7 +231,7 @@ static ssize_t dlmfs_file_write(struct file *filp,
int bytes_left;
ssize_t writelen;
char *lvb_buf;
- struct inode *inode = filp->f_path.dentry->d_inode;
+ struct inode *inode = filp_dentry(filp)->d_inode;
mlog(0, "inode %lu, count = %zu, *ppos = %llu\n",
inode->i_ino, count, *ppos);
diff --git a/fs/ocfs2/file.c b/fs/ocfs2/file.c
index 89fc8ee..68bf44f 100644
--- a/fs/ocfs2/file.c
+++ b/fs/ocfs2/file.c
@@ -105,7 +105,7 @@ static int ocfs2_file_open(struct inode *inode, struct file
*file)
struct ocfs2_inode_info *oi = OCFS2_I(inode);
mlog_entry("(0x%p, 0x%p, '%.*s')\n", inode, file,
- file->f_path.dentry->d_name.len,
file->f_path.dentry->d_name.name);
+ filp_dentry(file)->d_name.len, filp_dentry(file)->d_name.name);
spin_lock(&oi->ip_lock);
@@ -146,8 +146,8 @@ static int ocfs2_file_release(struct inode *inode, struct
file *file)
struct ocfs2_inode_info *oi = OCFS2_I(inode);
mlog_entry("(0x%p, 0x%p, '%.*s')\n", inode, file,
- file->f_path.dentry->d_name.len,
- file->f_path.dentry->d_name.name);
+ filp_dentry(file)->d_name.len,
+ filp_dentry(file)->d_name.name);
spin_lock(&oi->ip_lock);
if (!--oi->ip_open_count)
@@ -1593,7 +1593,7 @@ static int __ocfs2_change_file_space(struct file *file,
struct inode *inode,
}
}
- if (file && should_remove_suid(file->f_path.dentry)) {
+ if (file && should_remove_suid(filp_dentry(file))) {
ret = __ocfs2_write_remove_suid(inode, di_bh);
if (ret) {
mlog_errno(ret);
@@ -1660,7 +1660,7 @@ out:
int ocfs2_change_file_space(struct file *file, unsigned int cmd,
struct ocfs2_space_resv *sr)
{
- struct inode *inode = file->f_path.dentry->d_inode;
+ struct inode *inode = filp_dentry(file)->d_inode;
struct ocfs2_super *osb = OCFS2_SB(inode->i_sb);
if ((cmd == OCFS2_IOC_RESVSP || cmd == OCFS2_IOC_RESVSP64) &&
@@ -1905,13 +1905,13 @@ static ssize_t ocfs2_file_aio_write(struct kiocb *iocb,
loff_t old_size, *ppos = &iocb->ki_pos;
u32 old_clusters;
struct file *file = iocb->ki_filp;
- struct inode *inode = file->f_path.dentry->d_inode;
+ struct inode *inode = filp_dentry(file)->d_inode;
struct ocfs2_super *osb = OCFS2_SB(inode->i_sb);
mlog_entry("(0x%p, %u, '%.*s')\n", file,
(unsigned int)nr_segs,
- file->f_path.dentry->d_name.len,
- file->f_path.dentry->d_name.name);
+ filp_dentry(file)->d_name.len,
+ filp_dentry(file)->d_name.name);
if (iocb->ki_left == 0)
return 0;
@@ -1939,7 +1939,7 @@ relock:
}
can_do_direct = direct_io;
- ret = ocfs2_prepare_inode_for_write(file->f_path.dentry, ppos,
+ ret = ocfs2_prepare_inode_for_write(filp_dentry(file), ppos,
iocb->ki_left, appending,
&can_do_direct);
if (ret < 0) {
@@ -2060,7 +2060,7 @@ static int ocfs2_splice_to_file(struct pipe_inode_info
*pipe,
{
int ret;
- ret = ocfs2_prepare_inode_for_write(out->f_path.dentry, &sd->pos,
+ ret = ocfs2_prepare_inode_for_write(filp_dentry(out), &sd->pos,
sd->total_len, 0, NULL);
if (ret < 0) {
mlog_errno(ret);
@@ -2088,8 +2088,8 @@ static ssize_t ocfs2_file_splice_write(struct
pipe_inode_info *pipe,
mlog_entry("(0x%p, 0x%p, %u, '%.*s')\n", out, pipe,
(unsigned int)len,
- out->f_path.dentry->d_name.len,
- out->f_path.dentry->d_name.name);
+ filp_dentry(out)->d_name.len,
+ filp_dentry(out)->d_name.name);
if (pipe->inode)
mutex_lock_nested(&pipe->inode->i_mutex, I_MUTEX_PARENT);
@@ -2144,12 +2144,12 @@ static ssize_t ocfs2_file_splice_read(struct file *in,
unsigned int flags)
{
int ret = 0, lock_level = 0;
- struct inode *inode = in->f_path.dentry->d_inode;
+ struct inode *inode = filp_dentry(in)->d_inode;
mlog_entry("(0x%p, 0x%p, %u, '%.*s')\n", in, pipe,
(unsigned int)len,
- in->f_path.dentry->d_name.len,
- in->f_path.dentry->d_name.name);
+ filp_dentry(in)->d_name.len,
+ filp_dentry(in)->d_name.name);
/*
* See the comment in ocfs2_file_aio_read()
@@ -2175,12 +2175,12 @@ static ssize_t ocfs2_file_aio_read(struct kiocb *iocb,
{
int ret = 0, rw_level = -1, have_alloc_sem = 0, lock_level = 0;
struct file *filp = iocb->ki_filp;
- struct inode *inode = filp->f_path.dentry->d_inode;
+ struct inode *inode = filp_dentry(filp)->d_inode;
mlog_entry("(0x%p, %u, '%.*s')\n", filp,
(unsigned int)nr_segs,
- filp->f_path.dentry->d_name.len,
- filp->f_path.dentry->d_name.name);
+ filp_dentry(filp)->d_name.len,
+ filp_dentry(filp)->d_name.name);
if (!inode) {
ret = -EINVAL;
diff --git a/fs/ocfs2/ioctl.c b/fs/ocfs2/ioctl.c
index 31fbb06..857b409 100644
--- a/fs/ocfs2/ioctl.c
+++ b/fs/ocfs2/ioctl.c
@@ -110,7 +110,7 @@ bail:
long ocfs2_ioctl(struct file *filp, unsigned int cmd, unsigned long arg)
{
- struct inode *inode = filp->f_path.dentry->d_inode;
+ struct inode *inode = filp_dentry(filp)->d_inode;
unsigned int flags;
int new_clusters;
int status;
@@ -132,12 +132,12 @@ long ocfs2_ioctl(struct file *filp, unsigned int cmd,
unsigned long arg)
if (get_user(flags, (int __user *) arg))
return -EFAULT;
- status = mnt_want_write(filp->f_path.mnt);
+ status = mnt_want_write(filp_mnt(filp));
if (status)
return status;
status = ocfs2_set_inode_attr(inode, flags,
OCFS2_FL_MODIFIABLE);
- mnt_drop_write(filp->f_path.mnt);
+ mnt_drop_write(filp_mnt(filp));
return status;
case OCFS2_IOC_RESVSP:
case OCFS2_IOC_RESVSP64:
diff --git a/fs/ocfs2/kapi-default.h b/fs/ocfs2/kapi-default.h
index 21e5e3a..bb642ae 100644
--- a/fs/ocfs2/kapi-default.h
+++ b/fs/ocfs2/kapi-default.h
@@ -29,4 +29,9 @@ typedef struct work_struct kapi_work_struct_t;
# define KAPI_INIT_DELAYED_WORK(a, b, c) INIT_DELAYED_WORK(a, b)
#endif
+#ifndef filp_dentry
+# define filp_dentry(i) (i)->f_path.dentry
+# define filp_mnt(i) (i)->f_path.mnt
+#endif
+
#endif
diff --git a/fs/ocfs2/mmap.c b/fs/ocfs2/mmap.c
index 3973761..55afd11 100644
--- a/fs/ocfs2/mmap.c
+++ b/fs/ocfs2/mmap.c
@@ -157,7 +157,7 @@ out:
static int ocfs2_page_mkwrite(struct vm_area_struct *vma, struct vm_fault *vmf)
{
struct page *page = vmf->page;
- struct inode *inode = vma->vm_file->f_path.dentry->d_inode;
+ struct inode *inode = filp_dentry(vma->vm_file)->d_inode;
struct buffer_head *di_bh = NULL;
sigset_t blocked, oldset;
int ret, ret2;
@@ -211,13 +211,13 @@ int ocfs2_mmap(struct file *file, struct vm_area_struct
*vma)
{
int ret = 0, lock_level = 0;
- ret = ocfs2_inode_lock_atime(file->f_dentry->d_inode,
- file->f_vfsmnt, &lock_level);
+ ret = ocfs2_inode_lock_atime(filp_dentry(file)->d_inode,
+ filp_mnt(file), &lock_level);
if (ret < 0) {
mlog_errno(ret);
goto out;
}
- ocfs2_inode_unlock(file->f_dentry->d_inode, lock_level);
+ ocfs2_inode_unlock(filp_dentry(file)->d_inode, lock_level);
out:
vma->vm_ops = &ocfs2_file_vm_ops;
vma->vm_flags |= VM_CAN_NONLINEAR;
diff --git a/kapi-compat/include/fpath.h b/kapi-compat/include/fpath.h
new file mode 100644
index 0000000..52a1655
--- /dev/null
+++ b/kapi-compat/include/fpath.h
@@ -0,0 +1,9 @@
+#ifndef KAPI_FPATH_H
+#define KAPI_FPATH_H
+
+#ifdef NO_F_PATH_IN_STRUCT_FILE
+# define filp_dentry(i) (i)->f_dentry
+# define filp_mnt(i) (i)->f_vfsmnt
+#endif
+
+#endif
--
1.5.6.5
Sunil Mushran
2009-Nov-11 20:44 UTC
[Ocfs2-devel] [PATCH 11/11] ocfs2: Handle different f_version types
Mainline commit 2b47c3611de05c585e2d81204f6c7e3e255a3461 changed type of
file->f_version from unsigned long to u64. This patch allows building with
kernels having either definition. Build fails if the type is something else.
Signed-off-by: Sunil Mushran <sunil.mushran at oracle.com>
---
Config.make.in | 1 +
Makefile | 3 ++-
configure.in | 14 ++++++++++++++
fs/ocfs2/Makefile | 4 ++++
fs/ocfs2/dir.c | 12 ++++++------
fs/ocfs2/kapi-default.h | 5 +++++
kapi-compat/include/fversion.h | 9 +++++++++
7 files changed, 41 insertions(+), 7 deletions(-)
create mode 100644 kapi-compat/include/fversion.h
diff --git a/Config.make.in b/Config.make.in
index aead755..ba72950 100644
--- a/Config.make.in
+++ b/Config.make.in
@@ -61,6 +61,7 @@ NO_DELAYED_WORK_STRUCT = @NO_DELAYED_WORK_STRUCT@
NO_DLMCONSTANTS_HEADER = @NO_DLMCONSTANTS_HEADER@
NO_F_PATH_IN_STRUCT_FILE = @NO_F_PATH_IN_STRUCT_FILE@
ADDRESS_SPACE_OPS_EXT = @ADDRESS_SPACE_OPS_EXT@
+FVERSION_IS_ULONG = @FVERSION_IS_ULONG@
OCFS_DEBUG = @OCFS_DEBUG@
diff --git a/Makefile b/Makefile
index 6e28427..06ddabf 100644
--- a/Makefile
+++ b/Makefile
@@ -15,7 +15,8 @@ KAPI_COMPAT_FILES = \
kapi-compat/include/current_umask.h \
kapi-compat/include/sync_mapping.h \
kapi-compat/include/fpath.h \
- kapi-compat/include/ushortmax.h
+ kapi-compat/include/ushortmax.h \
+ kapi-compat/include/fversion.h
PATCH_FILES
diff --git a/configure.in b/configure.in
index d5a0b17..2015fbb 100644
--- a/configure.in
+++ b/configure.in
@@ -217,6 +217,20 @@ OCFS2_CHECK_KERNEL([USHORT_MAX in kernel.h], kernel.h,
, ushort_max_compat_header="ushortmax.h", [#define USHORT_MAX])
KAPI_COMPAT_HEADERS="$KAPI_COMPAT_HEADERS $ushort_max_compat_header"
+FVERSION_IS_ULONG+OCFS2_CHECK_KERNEL([ f_version is type unsigned long in
fs.h], fs.h,
+ FVERSION_IS_ULONG=fversion.h, , [unsigned long.*f_version;])
+AC_SUBST(FVERSION_IS_ULONG)
+if test "x$FVERSION_IS_ULONG" = "x" ; then
+ fversion_is_u64+ OCFS2_CHECK_KERNEL([ f_version is type u64 in fs.h], fs.h,
+ fversion_is_u64=yes, , [u64.*f_version;])
+ if test "x$fversion_is_u64" = "x" ; then
+ AC_MSG_ERROR(Cannot build with kernel in which f_version type is neither
unsigned long nor u64)
+ fi
+fi
+KAPI_COMPAT_HEADERS="$KAPI_COMPAT_HEADERS $FVERSION_IS_ULONG"
+
# End kapi_compat checks
diff --git a/fs/ocfs2/Makefile b/fs/ocfs2/Makefile
index 96f2fb0..dbe0e75 100644
--- a/fs/ocfs2/Makefile
+++ b/fs/ocfs2/Makefile
@@ -52,6 +52,10 @@ ifdef ADDRESS_SPACE_OPS_EXT
EXTRA_CFLAGS += -DADDRESS_SPACE_OPS_EXT
endif
+ifdef FVERSION_IS_ULONG
+EXTRA_CFLAGS += -DFVERSION_IS_ULONG
+endif
+
#
# Since SUBDIRS means something to kbuild, define them safely. Do not
# include trailing slashes.
diff --git a/fs/ocfs2/dir.c b/fs/ocfs2/dir.c
index 69b3402..b8991ac 100644
--- a/fs/ocfs2/dir.c
+++ b/fs/ocfs2/dir.c
@@ -1771,7 +1771,7 @@ bail:
}
static int ocfs2_dir_foreach_blk_id(struct inode *inode,
- u64 *f_version,
+ f_version_t *f_version,
loff_t *f_pos, void *priv,
filldir_t filldir, int *filldir_err)
{
@@ -1832,7 +1832,7 @@ revalidate:
* not the directory has been modified
* during the copy operation.
*/
- u64 version = *f_version;
+ f_version_t version = *f_version;
unsigned char d_type = DT_UNKNOWN;
if (de->file_type < OCFS2_FT_MAX)
@@ -1865,7 +1865,7 @@ out:
* and indexed ones.
*/
static int ocfs2_dir_foreach_blk_el(struct inode *inode,
- u64 *f_version,
+ f_version_t *f_version,
loff_t *f_pos, void *priv,
filldir_t filldir, int *filldir_err)
{
@@ -1952,7 +1952,7 @@ revalidate:
* not the directory has been modified
* during the copy operation.
*/
- unsigned long version = *f_version;
+ f_version_t version = *f_version;
unsigned char d_type = DT_UNKNOWN;
if (de->file_type < OCFS2_FT_MAX)
@@ -1983,7 +1983,7 @@ out:
return stored;
}
-static int ocfs2_dir_foreach_blk(struct inode *inode, u64 *f_version,
+static int ocfs2_dir_foreach_blk(struct inode *inode, f_version_t *f_version,
loff_t *f_pos, void *priv, filldir_t filldir,
int *filldir_err)
{
@@ -2003,7 +2003,7 @@ int ocfs2_dir_foreach(struct inode *inode, loff_t *f_pos,
void *priv,
filldir_t filldir)
{
int ret = 0, filldir_err = 0;
- u64 version = inode->i_version;
+ f_version_t version = inode->i_version;
while (*f_pos < i_size_read(inode)) {
ret = ocfs2_dir_foreach_blk(inode, &version, f_pos, priv,
diff --git a/fs/ocfs2/kapi-default.h b/fs/ocfs2/kapi-default.h
index bb642ae..3f04924 100644
--- a/fs/ocfs2/kapi-default.h
+++ b/fs/ocfs2/kapi-default.h
@@ -34,4 +34,9 @@ typedef struct work_struct kapi_work_struct_t;
# define filp_mnt(i) (i)->f_path.mnt
#endif
+#ifndef F_VERSION_DEFINED
+#define F_VERSION_DEFINED
+typedef u64 f_version_t;
+#endif
+
#endif
diff --git a/kapi-compat/include/fversion.h b/kapi-compat/include/fversion.h
new file mode 100644
index 0000000..a3fa9e9
--- /dev/null
+++ b/kapi-compat/include/fversion.h
@@ -0,0 +1,9 @@
+#ifndef KAPI_FVERSION_H
+#define KAPI_FVERSION_H
+
+#ifdef FVERSION_IS_ULONG
+# define F_VERSION_DEFINED
+typedef unsigned long f_version_t;
+#endif
+
+#endif
--
1.5.6.5