* [Ocfs2-devel] ocfs2 1.6 - second set of patches
@ 2009-11-10 2:00 Sunil Mushran
2009-11-10 2:00 ` [Ocfs2-devel] [PATCH 01/10] ocfs2: Handle workqueue changes Sunil Mushran
` (9 more replies)
0 siblings, 10 replies; 18+ messages in thread
From: Sunil Mushran @ 2009-11-10 2:00 UTC (permalink / raw)
To: ocfs2-devel
The second set of patches.
^ permalink raw reply [flat|nested] 18+ messages in thread
* [Ocfs2-devel] [PATCH 01/10] ocfs2: Handle workqueue changes
2009-11-10 2:00 [Ocfs2-devel] ocfs2 1.6 - second set of patches Sunil Mushran
@ 2009-11-10 2:00 ` Sunil Mushran
2009-11-11 2:57 ` Joel Becker
2009-11-10 2:00 ` [Ocfs2-devel] [PATCH 02/10] ocfs2: Handle missing dlmconstants.h Sunil Mushran
` (8 subsequent siblings)
9 siblings, 1 reply; 18+ messages in thread
From: Sunil Mushran @ 2009-11-10 2:00 UTC (permalink / raw)
To: ocfs2-devel
Mainline commit 52bad64d95bd89e08c49ec5a071fa6dcbe5a1a9c introduced
struct delayed_work to separate delayable and non-delayable work.
Signed-off-by: Sunil Mushran <sunil.mushran@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/localalloc.c | 6 ++--
fs/ocfs2/localalloc.h | 2 +-
fs/ocfs2/quota_global.c | 12 +++---
fs/ocfs2/super.c | 6 ++--
kapi-compat/include/workqueue.h | 17 ++++++++++
23 files changed, 118 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..acbe098 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=yes, [^struct delayed_work])
+AC_SUBST(NO_DELAYED_WORK_STRUCT)
+KAPI_COMPAT_HEADERS="$KAPI_COMPAT_HEADERS workqueue.h"
+
# End kapi_compat checks
diff --git a/fs/ocfs2/Makefile b/fs/ocfs2/Makefile
index 8222d03..4415ce6 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/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..24dfe2d
--- /dev/null
+++ b/kapi-compat/include/workqueue.h
@@ -0,0 +1,17 @@
+#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)
+#else
+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
--
1.5.6.5
^ permalink raw reply related [flat|nested] 18+ messages in thread
* [Ocfs2-devel] [PATCH 02/10] ocfs2: Handle missing dlmconstants.h
2009-11-10 2:00 [Ocfs2-devel] ocfs2 1.6 - second set of patches Sunil Mushran
2009-11-10 2:00 ` [Ocfs2-devel] [PATCH 01/10] ocfs2: Handle workqueue changes Sunil Mushran
@ 2009-11-10 2:00 ` Sunil Mushran
2009-11-11 2:59 ` Joel Becker
2009-11-10 2:00 ` [Ocfs2-devel] [PATCH 03/10] ocfs2: Add helper task_pid_nr() Sunil Mushran
` (7 subsequent siblings)
9 siblings, 1 reply; 18+ messages in thread
From: Sunil Mushran @ 2009-11-10 2:00 UTC (permalink / raw)
To: ocfs2-devel
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@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 acbe098..f67de02 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 workqueue.h"
+NO_DLMCONSTANTS_HEADER=
+OCFS2_CHECK_KERNEL([dlmconstants.h], dlmconstants.h,
+ , NO_DLMCONSTANTS_HEADER=yes, [__DLMCONSTANTS_DOT_H__])
+AC_SUBST(NO_DLMCONSTANTS_HEADER)
+KAPI_COMPAT_HEADERS="$KAPI_COMPAT_HEADERS dlmconstants.h"
+
# End kapi_compat checks
diff --git a/fs/ocfs2/Makefile b/fs/ocfs2/Makefile
index 4415ce6..e997fe4 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
^ permalink raw reply related [flat|nested] 18+ messages in thread
* [Ocfs2-devel] [PATCH 03/10] ocfs2: Add helper task_pid_nr()
2009-11-10 2:00 [Ocfs2-devel] ocfs2 1.6 - second set of patches Sunil Mushran
2009-11-10 2:00 ` [Ocfs2-devel] [PATCH 01/10] ocfs2: Handle workqueue changes Sunil Mushran
2009-11-10 2:00 ` [Ocfs2-devel] [PATCH 02/10] ocfs2: Handle missing dlmconstants.h Sunil Mushran
@ 2009-11-10 2:00 ` Sunil Mushran
2009-11-10 2:00 ` [Ocfs2-devel] [PATCH 04/10] ocfs2: Enable CONFIG_OCFS2_FS_POSIX_ACL Sunil Mushran
` (6 subsequent siblings)
9 siblings, 0 replies; 18+ messages in thread
From: Sunil Mushran @ 2009-11-10 2:00 UTC (permalink / raw)
To: ocfs2-devel
Mainline commit 7af5729474b5b8ad385adadab78d6e723e7655a3 added a helper
to obtain the pid number.
Signed-off-by: Sunil Mushran <sunil.mushran@oracle.com>
---
Makefile | 3 ++-
configure.in | 5 +++++
kapi-compat/include/task_pid_nr.h | 12 ++++++++++++
3 files changed, 19 insertions(+), 1 deletions(-)
create mode 100644 kapi-compat/include/task_pid_nr.h
diff --git a/Makefile b/Makefile
index d038ae9..98726c9 100644
--- a/Makefile
+++ b/Makefile
@@ -10,7 +10,8 @@ LINUX_INCLUDE_FILES =
KAPI_COMPAT_FILES = \
kapi-compat/include/workqueue.h \
- kapi-compat/include/dlmconstants.h
+ kapi-compat/include/dlmconstants.h \
+ kapi-compat/include/task_pid_nr.h
PATCH_FILES =
diff --git a/configure.in b/configure.in
index f67de02..e94412b 100644
--- a/configure.in
+++ b/configure.in
@@ -170,6 +170,11 @@ OCFS2_CHECK_KERNEL([dlmconstants.h], dlmconstants.h,
AC_SUBST(NO_DLMCONSTANTS_HEADER)
KAPI_COMPAT_HEADERS="$KAPI_COMPAT_HEADERS dlmconstants.h"
+task_pid_nr_compat_header=
+OCFS2_CHECK_KERNEL([task_pid_nr() in sched.h], sched.h,
+ , task_pid_nr_compat_header="task_pid_nr.h", [^static inline pid_t task_pid_nr(struct])
+KAPI_COMPAT_HEADERS="$KAPI_COMPAT_HEADERS $task_pid_nr_compat_header"
+
# End kapi_compat checks
diff --git a/kapi-compat/include/task_pid_nr.h b/kapi-compat/include/task_pid_nr.h
new file mode 100644
index 0000000..bd69a75
--- /dev/null
+++ b/kapi-compat/include/task_pid_nr.h
@@ -0,0 +1,12 @@
+#ifndef KAPI_TASK_PID_NR_H
+#define KAPI_TASK_PID_NR_H
+
+#include <linux/types.h>
+#include <linux/sched.h>
+
+static inline pid_t task_pid_nr(struct task_struct *tsk)
+{
+ return tsk->pid;
+}
+
+#endif
--
1.5.6.5
^ permalink raw reply related [flat|nested] 18+ messages in thread
* [Ocfs2-devel] [PATCH 04/10] ocfs2: Enable CONFIG_OCFS2_FS_POSIX_ACL
2009-11-10 2:00 [Ocfs2-devel] ocfs2 1.6 - second set of patches Sunil Mushran
` (2 preceding siblings ...)
2009-11-10 2:00 ` [Ocfs2-devel] [PATCH 03/10] ocfs2: Add helper task_pid_nr() Sunil Mushran
@ 2009-11-10 2:00 ` Sunil Mushran
2009-11-10 2:00 ` [Ocfs2-devel] [PATCH 05/10] ocfs2: Add helper current_umask() Sunil Mushran
` (5 subsequent siblings)
9 siblings, 0 replies; 18+ messages in thread
From: Sunil Mushran @ 2009-11-10 2:00 UTC (permalink / raw)
To: ocfs2-devel
Signed-off-by: Sunil Mushran <sunil.mushran@oracle.com>
---
fs/ocfs2/Makefile | 2 ++
1 files changed, 2 insertions(+), 0 deletions(-)
diff --git a/fs/ocfs2/Makefile b/fs/ocfs2/Makefile
index e997fe4..efa7f57 100644
--- a/fs/ocfs2/Makefile
+++ b/fs/ocfs2/Makefile
@@ -34,6 +34,8 @@ EXTRA_CFLAGS += -DCONFIG_OCFS2_DEBUG_MASKLOG
EXTRA_CFLAGS += -DCONFIG_OCFS2_FS_STATS
+EXTRA_CFLAGS += -DCONFIG_OCFS2_FS_POSIX_ACL
+
ifdef NO_DELAYED_WORK_STRUCT
EXTRA_CFLAGS += -DNO_DELAYED_WORK_STRUCT
endif
--
1.5.6.5
^ permalink raw reply related [flat|nested] 18+ messages in thread
* [Ocfs2-devel] [PATCH 05/10] ocfs2: Add helper current_umask()
2009-11-10 2:00 [Ocfs2-devel] ocfs2 1.6 - second set of patches Sunil Mushran
` (3 preceding siblings ...)
2009-11-10 2:00 ` [Ocfs2-devel] [PATCH 04/10] ocfs2: Enable CONFIG_OCFS2_FS_POSIX_ACL Sunil Mushran
@ 2009-11-10 2:00 ` Sunil Mushran
2009-11-10 2:00 ` [Ocfs2-devel] [PATCH 06/10] ocfs2: Handle missing do_sync_mapping_range() Sunil Mushran
` (4 subsequent siblings)
9 siblings, 0 replies; 18+ messages in thread
From: Sunil Mushran @ 2009-11-10 2:00 UTC (permalink / raw)
To: ocfs2-devel
Mainline commit ce3b0f8d5c2203301fc87f3aaaed73e5819e2a48 adde helper
current_umask().
Signed-off-by: Sunil Mushran <sunil.mushran@oracle.com>
---
Makefile | 3 ++-
configure.in | 5 +++++
kapi-compat/include/current_umask.h | 9 +++++++++
3 files changed, 16 insertions(+), 1 deletions(-)
create mode 100644 kapi-compat/include/current_umask.h
diff --git a/Makefile b/Makefile
index 98726c9..950d6fc 100644
--- a/Makefile
+++ b/Makefile
@@ -11,7 +11,8 @@ LINUX_INCLUDE_FILES =
KAPI_COMPAT_FILES = \
kapi-compat/include/workqueue.h \
kapi-compat/include/dlmconstants.h \
- kapi-compat/include/task_pid_nr.h
+ kapi-compat/include/task_pid_nr.h \
+ kapi-compat/include/current_umask.h
PATCH_FILES =
diff --git a/configure.in b/configure.in
index e94412b..93f9632 100644
--- a/configure.in
+++ b/configure.in
@@ -175,6 +175,11 @@ OCFS2_CHECK_KERNEL([task_pid_nr() in sched.h], sched.h,
, task_pid_nr_compat_header="task_pid_nr.h", [^static inline pid_t task_pid_nr(struct])
KAPI_COMPAT_HEADERS="$KAPI_COMPAT_HEADERS $task_pid_nr_compat_header"
+current_umask_compat_header=
+OCFS2_CHECK_KERNEL([current_umask() in fs.h], fs.h,
+ , current_umask_compat_header="current_umask.h", [^extern int current_umask(void)])
+KAPI_COMPAT_HEADERS="$KAPI_COMPAT_HEADERS $current_umask_compat_header"
+
# End kapi_compat checks
diff --git a/kapi-compat/include/current_umask.h b/kapi-compat/include/current_umask.h
new file mode 100644
index 0000000..eee781f
--- /dev/null
+++ b/kapi-compat/include/current_umask.h
@@ -0,0 +1,9 @@
+#ifndef KAPI_CURRENT_UMASK_H
+#define KAPI_CURRENT_UMASK_H
+
+static inline int current_umask(void)
+{
+ return current->fs->umask;
+}
+
+#endif
--
1.5.6.5
^ permalink raw reply related [flat|nested] 18+ messages in thread
* [Ocfs2-devel] [PATCH 06/10] ocfs2: Handle missing do_sync_mapping_range()
2009-11-10 2:00 [Ocfs2-devel] ocfs2 1.6 - second set of patches Sunil Mushran
` (4 preceding siblings ...)
2009-11-10 2:00 ` [Ocfs2-devel] [PATCH 05/10] ocfs2: Add helper current_umask() Sunil Mushran
@ 2009-11-10 2:00 ` Sunil Mushran
2009-11-10 2:00 ` [Ocfs2-devel] [PATCH 07/10] ocfs2: Handle struct f_path in struct file Sunil Mushran
` (3 subsequent siblings)
9 siblings, 0 replies; 18+ messages in thread
From: Sunil Mushran @ 2009-11-10 2:00 UTC (permalink / raw)
To: ocfs2-devel
Mainline commit 5b04aa3a64f854244bc40a6f528176ed50b5c4f6 added
do_sync_mapping_range(). EL5 has do_sync_file_range(). This patch
wires do_sync_mapping_range() into do_sync_file_range().
Build fails if both symbols are not found.
Signed-off-by: Sunil Mushran <sunil.mushran@oracle.com>
---
Makefile | 3 ++-
configure.in | 13 +++++++++++++
kapi-compat/include/sync_mapping.h | 13 +++++++++++++
3 files changed, 28 insertions(+), 1 deletions(-)
create mode 100644 kapi-compat/include/sync_mapping.h
diff --git a/Makefile b/Makefile
index 950d6fc..8e58c5d 100644
--- a/Makefile
+++ b/Makefile
@@ -12,7 +12,8 @@ KAPI_COMPAT_FILES = \
kapi-compat/include/workqueue.h \
kapi-compat/include/dlmconstants.h \
kapi-compat/include/task_pid_nr.h \
- kapi-compat/include/current_umask.h
+ kapi-compat/include/current_umask.h \
+ kapi-compat/include/sync_mapping.h
PATCH_FILES =
diff --git a/configure.in b/configure.in
index 93f9632..658cd6f 100644
--- a/configure.in
+++ b/configure.in
@@ -180,6 +180,19 @@ OCFS2_CHECK_KERNEL([current_umask() in fs.h], fs.h,
, current_umask_compat_header="current_umask.h", [^extern int current_umask(void)])
KAPI_COMPAT_HEADERS="$KAPI_COMPAT_HEADERS $current_umask_compat_header"
+do_sync_mapping_range=
+OCFS2_CHECK_KERNEL([do_sync_mapping_range() in fs.h], fs.h,
+do_sync_mapping_range="yes", , [int do_sync_mapping_range(struct address_space \*mapping])
+if test "x$do_sync_mapping_range" = "x" ; then
+ do_sync_file_range=
+ OCFS2_CHECK_KERNEL([ do_sync_file_range() in fs.h], fs.h,
+ do_sync_file_range="yes", , [int do_sync_file_range(struct file \*file])
+ if test "x$do_sync_file_range" = "x" ; then
+ AC_MSG_ERROR(Cannot build with kernel that is missing both do_sync_mapping_range() and do_sync_file_range())
+ fi
+ KAPI_COMPAT_HEADERS="$KAPI_COMPAT_HEADERS sync_mapping.h"
+fi
+
# End kapi_compat checks
diff --git a/kapi-compat/include/sync_mapping.h b/kapi-compat/include/sync_mapping.h
new file mode 100644
index 0000000..5d77feb
--- /dev/null
+++ b/kapi-compat/include/sync_mapping.h
@@ -0,0 +1,13 @@
+#ifndef KAPI_SYNC_MAPPING_H
+#define KAPI_SYNC_MAPPING_H
+
+#include <linux/fs.h>
+static inline int do_sync_mapping_range(struct address_space *mapping,
+ loff_t offset, loff_t endbyte,
+ unsigned int flags)
+{
+ struct file fake = { .f_mapping = mapping, };
+ return do_sync_file_range(&fake, offset, endbyte, flags);
+}
+
+#endif
--
1.5.6.5
^ permalink raw reply related [flat|nested] 18+ messages in thread
* [Ocfs2-devel] [PATCH 07/10] ocfs2: Handle struct f_path in struct file
2009-11-10 2:00 [Ocfs2-devel] ocfs2 1.6 - second set of patches Sunil Mushran
` (5 preceding siblings ...)
2009-11-10 2:00 ` [Ocfs2-devel] [PATCH 06/10] ocfs2: Handle missing do_sync_mapping_range() Sunil Mushran
@ 2009-11-10 2:00 ` Sunil Mushran
2009-11-11 3:03 ` Joel Becker
2009-11-10 2:00 ` [Ocfs2-devel] [PATCH 08/10] ocfs2: Handle struct address_space_operations_ext Sunil Mushran
` (2 subsequent siblings)
9 siblings, 1 reply; 18+ messages in thread
From: Sunil Mushran @ 2009-11-10 2:00 UTC (permalink / raw)
To: ocfs2-devel
Mainline commit 0f7fc9e4d03987fe29f6dd4aa67e4c56eb7ecb05 added
struct path into struct file.
Signed-off-by: Sunil Mushran <sunil.mushran@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/mmap.c | 8 ++++----
kapi-compat/include/fpath.h | 12 ++++++++++++
12 files changed, 59 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 658cd6f..e29e6df 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=yes, [struct path.*f_path])
+AC_SUBST(NO_F_PATH_IN_STRUCT_FILE)
+KAPI_COMPAT_HEADERS="$KAPI_COMPAT_HEADERS fpath.h"
+
# End kapi_compat checks
diff --git a/fs/ocfs2/Makefile b/fs/ocfs2/Makefile
index efa7f57..86dabb1 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/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..f8b53f2
--- /dev/null
+++ b/kapi-compat/include/fpath.h
@@ -0,0 +1,12 @@
+#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
+#else
+# define filp_dentry(i) (i)->f_path.dentry
+# define filp_mnt(i) (i)->f_path.mnt
+#endif
+
+#endif
--
1.5.6.5
^ permalink raw reply related [flat|nested] 18+ messages in thread
* [Ocfs2-devel] [PATCH 08/10] ocfs2: Handle struct address_space_operations_ext
2009-11-10 2:00 [Ocfs2-devel] ocfs2 1.6 - second set of patches Sunil Mushran
` (6 preceding siblings ...)
2009-11-10 2:00 ` [Ocfs2-devel] [PATCH 07/10] ocfs2: Handle struct f_path in struct file Sunil Mushran
@ 2009-11-10 2:00 ` Sunil Mushran
2009-11-10 2:00 ` [Ocfs2-devel] [PATCH 09/10] ocfs2: Handle missing USHORT_MAX Sunil Mushran
2009-11-10 2:00 ` [Ocfs2-devel] [PATCH 10/10] ocfs2: Handle different f_version types Sunil Mushran
9 siblings, 0 replies; 18+ messages in thread
From: Sunil Mushran @ 2009-11-10 2:00 UTC (permalink / raw)
To: ocfs2-devel
Around in 2.6.24 or so, two new aops, write_begin() and write_end(), were added.
In that release, OCFS2 was updated to make use of these aops instead of the older
prepare_write() and commit_write().
EL5 U4 backports the new aops in a new struct address_space_operations_ext.
This patch looks for the new struct failing which looks for the new aops in
the older struct. If both lookups fail, the build errors out.
Signed-off-by: Sunil Mushran <sunil.mushran@oracle.com>
---
Config.make.in | 1 +
configure.in | 13 +++++++++++++
fs/ocfs2/Makefile | 4 ++++
fs/ocfs2/aops.c | 16 ++++++++++++++++
fs/ocfs2/inode.c | 5 +++++
fs/ocfs2/inode.h | 4 ++++
fs/ocfs2/super.c | 4 ++++
7 files changed, 47 insertions(+), 0 deletions(-)
diff --git a/Config.make.in b/Config.make.in
index eb8e2a9..aead755 100644
--- a/Config.make.in
+++ b/Config.make.in
@@ -60,6 +60,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@
+ADDRESS_SPACE_OPS_EXT = @ADDRESS_SPACE_OPS_EXT@
OCFS_DEBUG = @OCFS_DEBUG@
diff --git a/configure.in b/configure.in
index e29e6df..8179f59 100644
--- a/configure.in
+++ b/configure.in
@@ -199,6 +199,19 @@ OCFS2_CHECK_KERNEL([f_path in fs.h], fs.h,
AC_SUBST(NO_F_PATH_IN_STRUCT_FILE)
KAPI_COMPAT_HEADERS="$KAPI_COMPAT_HEADERS fpath.h"
+ADDRESS_SPACE_OPS_EXT=
+OCFS2_CHECK_KERNEL([ struct address_space_operations_ext in fs.h], fs.h,
+ ADDRESS_SPACE_OPS_EXT=yes, , [^struct address_space_operations_ext {])
+AC_SUBST(ADDRESS_SPACE_OPS_EXT)
+if test "x$ADDRESS_SPACE_OPS_EXT" = "x" ; then
+ has_write_begin=
+ OCFS2_CHECK_KERNEL([ write_begin() in fs.h], fs.h,
+ has_write_begin=yes, , [int (\*write_begin)(struct file \*])
+ if test "x$has_write_begin" = "x" ; then
+ AC_MSG_ERROR(Cannot build with kernel that does not have aops->write_begin())
+ fi
+fi
+
# End kapi_compat checks
diff --git a/fs/ocfs2/Makefile b/fs/ocfs2/Makefile
index 86dabb1..817f9d2 100644
--- a/fs/ocfs2/Makefile
+++ b/fs/ocfs2/Makefile
@@ -48,6 +48,10 @@ ifdef NO_F_PATH_IN_STRUCT_FILE
EXTRA_CFLAGS += -DNO_F_PATH_IN_STRUCT_FILE
endif
+ifdef ADDRESS_SPACE_OPS_EXT
+EXTRA_CFLAGS += -DADDRESS_SPACE_OPS_EXT
+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 67a3731..99ae9f0 100644
--- a/fs/ocfs2/aops.c
+++ b/fs/ocfs2/aops.c
@@ -2009,6 +2009,7 @@ static int ocfs2_write_end(struct file *file, struct address_space *mapping,
return ret;
}
+#ifndef ADDRESS_SPACE_OPS_EXT
const struct address_space_operations ocfs2_aops = {
.readpage = ocfs2_readpage,
.readpages = ocfs2_readpages,
@@ -2024,3 +2025,18 @@ const struct address_space_operations ocfs2_aops = {
.is_partially_uptodate = block_is_partially_uptodate,
.error_remove_page = generic_error_remove_page,
};
+#else
+const struct address_space_operations_ext ocfs2_aops_ext = {
+ .orig_aops.readpage = ocfs2_readpage,
+ .orig_aops.readpages = ocfs2_readpages,
+ .orig_aops.writepage = ocfs2_writepage,
+ .write_begin = ocfs2_write_begin,
+ .write_end = ocfs2_write_end,
+ .orig_aops.bmap = ocfs2_bmap,
+ .orig_aops.sync_page = block_sync_page,
+ .orig_aops.direct_IO = ocfs2_direct_IO,
+ .orig_aops.invalidatepage = ocfs2_invalidatepage,
+ .orig_aops.releasepage = ocfs2_releasepage,
+ .orig_aops.migratepage = buffer_migrate_page,
+};
+#endif
diff --git a/fs/ocfs2/inode.c b/fs/ocfs2/inode.c
index 0297fb8..d38dcdd 100644
--- a/fs/ocfs2/inode.c
+++ b/fs/ocfs2/inode.c
@@ -285,7 +285,12 @@ void ocfs2_populate_inode(struct inode *inode, struct ocfs2_dinode *fe,
inode->i_blocks = 0;
else
inode->i_blocks = ocfs2_inode_sector_count(inode);
+#ifndef ADDRESS_SPACE_OPS_EXT
inode->i_mapping->a_ops = &ocfs2_aops;
+#else
+ inode->i_mapping->a_ops =
+ (struct address_space_operations *)&ocfs2_aops_ext;
+#endif
inode->i_atime.tv_sec = le64_to_cpu(fe->i_atime);
inode->i_atime.tv_nsec = le32_to_cpu(fe->i_atime_nsec);
inode->i_mtime.tv_sec = le64_to_cpu(fe->i_mtime);
diff --git a/fs/ocfs2/inode.h b/fs/ocfs2/inode.h
index ba4fe07..c7db724 100644
--- a/fs/ocfs2/inode.h
+++ b/fs/ocfs2/inode.h
@@ -111,7 +111,11 @@ static inline struct ocfs2_inode_info *OCFS2_I(struct inode *inode)
extern struct kmem_cache *ocfs2_inode_cache;
+#ifndef ADDRESS_SPACE_OPS_EXT
extern const struct address_space_operations ocfs2_aops;
+#else
+extern const struct address_space_operations_ext ocfs2_aops_ext;
+#endif
extern const struct ocfs2_caching_operations ocfs2_inode_caching_ops;
static inline struct ocfs2_caching_info *INODE_CACHE(struct inode *inode)
diff --git a/fs/ocfs2/super.c b/fs/ocfs2/super.c
index 5f19ff5..8c8b206 100644
--- a/fs/ocfs2/super.c
+++ b/fs/ocfs2/super.c
@@ -1044,6 +1044,10 @@ static int ocfs2_fill_super(struct super_block *sb, void *data, int silent)
sb->s_flags = (sb->s_flags & ~MS_POSIXACL) |
((osb->s_mount_opt & OCFS2_MOUNT_POSIX_ACL) ? MS_POSIXACL : 0);
+#ifdef ADDRESS_SPACE_OPS_EXT
+ sb->s_flags |= MS_HAS_NEW_AOPS;
+#endif
+
/* Hard readonly mode only if: bdev_read_only, MS_RDONLY,
* heartbeat=none */
if (bdev_read_only(sb->s_bdev)) {
--
1.5.6.5
^ permalink raw reply related [flat|nested] 18+ messages in thread
* [Ocfs2-devel] [PATCH 09/10] ocfs2: Handle missing USHORT_MAX
2009-11-10 2:00 [Ocfs2-devel] ocfs2 1.6 - second set of patches Sunil Mushran
` (7 preceding siblings ...)
2009-11-10 2:00 ` [Ocfs2-devel] [PATCH 08/10] ocfs2: Handle struct address_space_operations_ext Sunil Mushran
@ 2009-11-10 2:00 ` Sunil Mushran
2009-11-10 2:00 ` [Ocfs2-devel] [PATCH 10/10] ocfs2: Handle different f_version types Sunil Mushran
9 siblings, 0 replies; 18+ messages in thread
From: Sunil Mushran @ 2009-11-10 2:00 UTC (permalink / raw)
To: ocfs2-devel
Mainline commit 44f564a4bf6ac70f2a84806203045cf515bc9367 USHORT_MAX.
Signed-off-by: Sunil Mushran <sunil.mushran@oracle.com>
---
Makefile | 3 ++-
configure.in | 5 +++++
kapi-compat/include/ushortmax.h | 6 ++++++
3 files changed, 13 insertions(+), 1 deletions(-)
create mode 100644 kapi-compat/include/ushortmax.h
diff --git a/Makefile b/Makefile
index 6a28531..6e28427 100644
--- a/Makefile
+++ b/Makefile
@@ -14,7 +14,8 @@ KAPI_COMPAT_FILES = \
kapi-compat/include/task_pid_nr.h \
kapi-compat/include/current_umask.h \
kapi-compat/include/sync_mapping.h \
- kapi-compat/include/fpath.h
+ kapi-compat/include/fpath.h \
+ kapi-compat/include/ushortmax.h
PATCH_FILES =
diff --git a/configure.in b/configure.in
index 8179f59..4d9bea3 100644
--- a/configure.in
+++ b/configure.in
@@ -212,6 +212,11 @@ if test "x$ADDRESS_SPACE_OPS_EXT" = "x" ; then
fi
fi
+ushort_max_compat_header=
+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"
+
# End kapi_compat checks
diff --git a/kapi-compat/include/ushortmax.h b/kapi-compat/include/ushortmax.h
new file mode 100644
index 0000000..a12633a
--- /dev/null
+++ b/kapi-compat/include/ushortmax.h
@@ -0,0 +1,6 @@
+#ifndef KAPI_USHORTMAX_H
+#define KAPI_USHORTMAX_H
+
+#define USHORT_MAX ((u16)(~0U))
+
+#endif
--
1.5.6.5
^ permalink raw reply related [flat|nested] 18+ messages in thread
* [Ocfs2-devel] [PATCH 10/10] ocfs2: Handle different f_version types
2009-11-10 2:00 [Ocfs2-devel] ocfs2 1.6 - second set of patches Sunil Mushran
` (8 preceding siblings ...)
2009-11-10 2:00 ` [Ocfs2-devel] [PATCH 09/10] ocfs2: Handle missing USHORT_MAX Sunil Mushran
@ 2009-11-10 2:00 ` Sunil Mushran
2009-11-11 3:13 ` Joel Becker
9 siblings, 1 reply; 18+ messages in thread
From: Sunil Mushran @ 2009-11-10 2:00 UTC (permalink / raw)
To: ocfs2-devel
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@oracle.com>
---
Config.make.in | 1 +
Makefile | 3 ++-
configure.in | 14 ++++++++++++++
fs/ocfs2/Makefile | 4 ++++
fs/ocfs2/dir.c | 12 ++++++------
kapi-compat/include/fversion.h | 10 ++++++++++
6 files changed, 37 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 4d9bea3..7ee2d34 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=yes, , [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.h"
+
# End kapi_compat checks
diff --git a/fs/ocfs2/Makefile b/fs/ocfs2/Makefile
index 817f9d2..e6b5801 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/kapi-compat/include/fversion.h b/kapi-compat/include/fversion.h
new file mode 100644
index 0000000..4977591
--- /dev/null
+++ b/kapi-compat/include/fversion.h
@@ -0,0 +1,10 @@
+#ifndef KAPI_FVERSION_H
+#define KAPI_FVERSION_H
+
+#ifdef FVERSION_IS_ULONG
+typedef unsigned long f_version_t;
+#else
+typedef u64 f_version_t;
+#endif
+
+#endif
--
1.5.6.5
^ permalink raw reply related [flat|nested] 18+ messages in thread
* [Ocfs2-devel] [PATCH 01/10] ocfs2: Handle workqueue changes
2009-11-10 2:00 ` [Ocfs2-devel] [PATCH 01/10] ocfs2: Handle workqueue changes Sunil Mushran
@ 2009-11-11 2:57 ` Joel Becker
2009-11-11 18:11 ` Sunil Mushran
0 siblings, 1 reply; 18+ messages in thread
From: Joel Becker @ 2009-11-11 2:57 UTC (permalink / raw)
To: ocfs2-devel
On Mon, Nov 09, 2009 at 06:00:04PM -0800, Sunil Mushran wrote:
> diff --git a/kapi-compat/include/workqueue.h b/kapi-compat/include/workqueue.h
> new file mode 100644
> index 0000000..24dfe2d
> --- /dev/null
> +++ b/kapi-compat/include/workqueue.h
> @@ -0,0 +1,17 @@
> +#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)
> +#else
> +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
Rather than include kapi-compat/include/workqueue.h at all
times, I'd really like to only include it when necessary. That way you
can build the driver against mainline even when there is no kapi-compat
directory.
Can't we have an fs/ocfs2/kapi-default.h that has defines for
when we're against mainline? Include it from fs/ocfs2/ocfs2.h. For
this patch, it would include:
#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
Joel
--
#!/bin/perl -sp0777i<X+d*lMLa^*lN%0]dsXx++lMlN/dsM0<j]dsj
$/=unpack('H*',$_);$_=`echo 16dio\U$k"SK$/SM$n\EsN0p[lN*1
lK[d2%Sa2/d0$^Ixp"|dc`;s/\W//g;$_=pack('H*',/((..)*)$/)
Joel Becker
Principal Software Developer
Oracle
E-mail: joel.becker@oracle.com
Phone: (650) 506-8127
^ permalink raw reply [flat|nested] 18+ messages in thread
* [Ocfs2-devel] [PATCH 02/10] ocfs2: Handle missing dlmconstants.h
2009-11-10 2:00 ` [Ocfs2-devel] [PATCH 02/10] ocfs2: Handle missing dlmconstants.h Sunil Mushran
@ 2009-11-11 2:59 ` Joel Becker
2009-11-11 19:27 ` Sunil Mushran
0 siblings, 1 reply; 18+ messages in thread
From: Joel Becker @ 2009-11-11 2:59 UTC (permalink / raw)
To: ocfs2-devel
On Mon, Nov 09, 2009 at 06:00:05PM -0800, Sunil Mushran wrote:
> 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.
Again you're including the kapi-compat header unconditionally.
Only include it when it is necessary.
> +#ifdef NO_DLMCONSTANTS_HEADER
> +#include <linux/types.h>
> +#include <linux/dlm.h>
Then maybe change this to
#ifndef DLM_LOCK_NL
# include <linux/dlmconstants.h>
#endif
Joel
--
"In the arms of the angel, fly away from here,
From this dark, cold hotel room and the endlessness that you fear.
You are pulled from the wreckage of your silent reverie.
In the arms of the angel, may you find some comfort here."
Joel Becker
Principal Software Developer
Oracle
E-mail: joel.becker at oracle.com
Phone: (650) 506-8127
^ permalink raw reply [flat|nested] 18+ messages in thread
* [Ocfs2-devel] [PATCH 07/10] ocfs2: Handle struct f_path in struct file
2009-11-10 2:00 ` [Ocfs2-devel] [PATCH 07/10] ocfs2: Handle struct f_path in struct file Sunil Mushran
@ 2009-11-11 3:03 ` Joel Becker
0 siblings, 0 replies; 18+ messages in thread
From: Joel Becker @ 2009-11-11 3:03 UTC (permalink / raw)
To: ocfs2-devel
On Mon, Nov 09, 2009 at 06:00:10PM -0800, Sunil Mushran wrote:
> Mainline commit 0f7fc9e4d03987fe29f6dd4aa67e4c56eb7ecb05 added
> struct path into struct file.
Again, put #ifndef filp_dentry() in fs/ocfs2/kapi-defaults.h and
only include kapi-include/fpath.h if necessary.
Joel
--
"Get right to the heart of matters.
It's the heart that matters more."
Joel Becker
Principal Software Developer
Oracle
E-mail: joel.becker at oracle.com
Phone: (650) 506-8127
^ permalink raw reply [flat|nested] 18+ messages in thread
* [Ocfs2-devel] [PATCH 10/10] ocfs2: Handle different f_version types
2009-11-10 2:00 ` [Ocfs2-devel] [PATCH 10/10] ocfs2: Handle different f_version types Sunil Mushran
@ 2009-11-11 3:13 ` Joel Becker
0 siblings, 0 replies; 18+ messages in thread
From: Joel Becker @ 2009-11-11 3:13 UTC (permalink / raw)
To: ocfs2-devel
On Mon, Nov 09, 2009 at 06:00:13PM -0800, Sunil Mushran wrote:
> 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.
I was trying to come up with a way to not create f_version_t.
You know, pass around a u64 and cast it when comparing to
inode->i_version. But I'm not terribly happy with that, so I guess we
leave f_version_t. Please reorganize it so that kapi-include/ is not
needed for mainline.
Joel
--
"In the beginning, the universe was created. This has made a lot
of people very angry, and is generally considered to have been a
bad move."
- Douglas Adams
Joel Becker
Principal Software Developer
Oracle
E-mail: joel.becker at oracle.com
Phone: (650) 506-8127
^ permalink raw reply [flat|nested] 18+ messages in thread
* [Ocfs2-devel] [PATCH 01/10] ocfs2: Handle workqueue changes
2009-11-11 2:57 ` Joel Becker
@ 2009-11-11 18:11 ` Sunil Mushran
0 siblings, 0 replies; 18+ messages in thread
From: Sunil Mushran @ 2009-11-11 18:11 UTC (permalink / raw)
To: ocfs2-devel
Joel Becker wrote:
> Rather than include kapi-compat/include/workqueue.h at all
> times, I'd really like to only include it when necessary. That way you
> can build the driver against mainline even when there is no kapi-compat
> directory.
> Can't we have an fs/ocfs2/kapi-default.h that has defines for
> when we're against mainline? Include it from fs/ocfs2/ocfs2.h. For
> this patch, it would include:
>
> #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
>
Yeah, that's a good idea.
^ permalink raw reply [flat|nested] 18+ messages in thread
* [Ocfs2-devel] [PATCH 02/10] ocfs2: Handle missing dlmconstants.h
2009-11-11 2:59 ` Joel Becker
@ 2009-11-11 19:27 ` Sunil Mushran
2009-11-11 22:57 ` Joel Becker
0 siblings, 1 reply; 18+ messages in thread
From: Sunil Mushran @ 2009-11-11 19:27 UTC (permalink / raw)
To: ocfs2-devel
Joel Becker wrote:
> Again you're including the kapi-compat header unconditionally.
> Only include it when it is necessary.
>
Ok.
>
>> +#ifdef NO_DLMCONSTANTS_HEADER
>> +#include <linux/types.h>
>> +#include <linux/dlm.h>
>>
>
> Then maybe change this to
>
> #ifndef DLM_LOCK_NL
> # include <linux/dlmconstants.h>
> #endif
>
Not sure why we need to do this.
^ permalink raw reply [flat|nested] 18+ messages in thread
* [Ocfs2-devel] [PATCH 02/10] ocfs2: Handle missing dlmconstants.h
2009-11-11 19:27 ` Sunil Mushran
@ 2009-11-11 22:57 ` Joel Becker
0 siblings, 0 replies; 18+ messages in thread
From: Joel Becker @ 2009-11-11 22:57 UTC (permalink / raw)
To: ocfs2-devel
On Wed, Nov 11, 2009 at 11:27:32AM -0800, Sunil Mushran wrote:
> Joel Becker wrote:
> > Then maybe change this to
> >
> > #ifndef DLM_LOCK_NL
> > # include <linux/dlmconstants.h>
> > #endif
> >
>
> Not sure why we need to do this.
Because if we are against mainline, we will not include the
kapi-compat header. Then we have to include linux/dlmconstants.h. Or
are you asking why do this instead of checking the NO_DLMCONSTANTS
define? That works too. -EDONTCARE
Joel
--
"Sometimes one pays most for the things one gets for nothing."
- Albert Einstein
Joel Becker
Principal Software Developer
Oracle
E-mail: joel.becker at oracle.com
Phone: (650) 506-8127
^ permalink raw reply [flat|nested] 18+ messages in thread
end of thread, other threads:[~2009-11-11 22:57 UTC | newest]
Thread overview: 18+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2009-11-10 2:00 [Ocfs2-devel] ocfs2 1.6 - second set of patches Sunil Mushran
2009-11-10 2:00 ` [Ocfs2-devel] [PATCH 01/10] ocfs2: Handle workqueue changes Sunil Mushran
2009-11-11 2:57 ` Joel Becker
2009-11-11 18:11 ` Sunil Mushran
2009-11-10 2:00 ` [Ocfs2-devel] [PATCH 02/10] ocfs2: Handle missing dlmconstants.h Sunil Mushran
2009-11-11 2:59 ` Joel Becker
2009-11-11 19:27 ` Sunil Mushran
2009-11-11 22:57 ` Joel Becker
2009-11-10 2:00 ` [Ocfs2-devel] [PATCH 03/10] ocfs2: Add helper task_pid_nr() Sunil Mushran
2009-11-10 2:00 ` [Ocfs2-devel] [PATCH 04/10] ocfs2: Enable CONFIG_OCFS2_FS_POSIX_ACL Sunil Mushran
2009-11-10 2:00 ` [Ocfs2-devel] [PATCH 05/10] ocfs2: Add helper current_umask() Sunil Mushran
2009-11-10 2:00 ` [Ocfs2-devel] [PATCH 06/10] ocfs2: Handle missing do_sync_mapping_range() Sunil Mushran
2009-11-10 2:00 ` [Ocfs2-devel] [PATCH 07/10] ocfs2: Handle struct f_path in struct file Sunil Mushran
2009-11-11 3:03 ` Joel Becker
2009-11-10 2:00 ` [Ocfs2-devel] [PATCH 08/10] ocfs2: Handle struct address_space_operations_ext Sunil Mushran
2009-11-10 2:00 ` [Ocfs2-devel] [PATCH 09/10] ocfs2: Handle missing USHORT_MAX Sunil Mushran
2009-11-10 2:00 ` [Ocfs2-devel] [PATCH 10/10] ocfs2: Handle different f_version types Sunil Mushran
2009-11-11 3:13 ` Joel Becker
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.