X-Git-Url: https://git.whamcloud.com/?a=blobdiff_plain;f=lustre%2Fllite%2Fllite_capa.c;h=c62b99e62e22c5f53803b54d80bd46ac95262994;hb=48a0697d79101ad3ff7651779808dcf002a68890;hp=7b6302df199769b7f4fd52d5baeb96963a14d51b;hpb=a3850a044ef7cc2658b355672338b9865ed59fe4;p=fs%2Flustre-release.git diff --git a/lustre/llite/llite_capa.c b/lustre/llite/llite_capa.c index 7b6302d..c62b99e 100644 --- a/lustre/llite/llite_capa.c +++ b/lustre/llite/llite_capa.c @@ -27,7 +27,7 @@ * Copyright (c) 2005, 2010, Oracle and/or its affiliates. All rights reserved. * Use is subject to license terms. * - * Copyright (c) 2012, Intel Corporation. + * Copyright (c) 2012, 2014, Intel Corporation. */ /* * This file is part of Lustre, http://www.lustre.org/ @@ -46,7 +46,6 @@ #include #include -#include #include "llite_internal.h" /* for obd_capa.c_list, client capa might stay in three places: @@ -56,19 +55,21 @@ */ /* capas for oss writeback and those failed to renew */ -static CFS_LIST_HEAD(ll_idle_capas); +static struct list_head ll_idle_capas = LIST_HEAD_INIT(ll_idle_capas); static struct ptlrpc_thread ll_capa_thread; -static cfs_list_t *ll_capa_list = &capa_list[CAPA_SITE_CLIENT]; +static struct list_head *ll_capa_list = &capa_list[CAPA_SITE_CLIENT]; /* llite capa renewal timer */ struct timer_list ll_capa_timer; /* for debug: indicate whether capa on llite is enabled or not */ -static cfs_atomic_t ll_capa_debug = CFS_ATOMIC_INIT(0); +static atomic_t ll_capa_debug = ATOMIC_INIT(0); static unsigned long long ll_capa_renewed = 0; static unsigned long long ll_capa_renewal_noent = 0; static unsigned long long ll_capa_renewal_failed = 0; static unsigned long long ll_capa_renewal_retries = 0; +static int ll_update_capa(struct obd_capa *ocapa, struct lustre_capa *capa); + static inline void update_capa_timer(struct obd_capa *ocapa, cfs_time_t expiry) { if (cfs_time_before(expiry, ll_capa_timer.expires) || @@ -99,14 +100,14 @@ static inline int have_expired_capa(void) * expired capa, return 1. */ spin_lock(&capa_lock); - if (!cfs_list_empty(ll_capa_list)) { - ocapa = cfs_list_entry(ll_capa_list->next, struct obd_capa, + if (!list_empty(ll_capa_list)) { + ocapa = list_entry(ll_capa_list->next, struct obd_capa, c_list); expired = capa_is_to_expire(ocapa); if (!expired) update_capa_timer(ocapa, capa_renewal_time(ocapa)); - } else if (!cfs_list_empty(&ll_idle_capas)) { - ocapa = cfs_list_entry(ll_idle_capas.next, struct obd_capa, + } else if (!list_empty(&ll_idle_capas)) { + ocapa = list_entry(ll_idle_capas.next, struct obd_capa, c_list); expired = capa_is_expired(ocapa); if (!expired) @@ -119,13 +120,13 @@ static inline int have_expired_capa(void) return expired; } -static void sort_add_capa(struct obd_capa *ocapa, cfs_list_t *head) +static void sort_add_capa(struct obd_capa *ocapa, struct list_head *head) { struct obd_capa *tmp; - cfs_list_t *before = NULL; + struct list_head *before = NULL; /* TODO: client capa is sorted by expiry, this could be optimized */ - cfs_list_for_each_entry_reverse(tmp, head, c_list) { + list_for_each_entry_reverse(tmp, head, c_list) { if (cfs_time_aftereq(ocapa->c_expiry, tmp->c_expiry)) { before = &tmp->c_list; break; @@ -133,13 +134,13 @@ static void sort_add_capa(struct obd_capa *ocapa, cfs_list_t *head) } LASSERT(&ocapa->c_list != before); - cfs_list_add(&ocapa->c_list, before ?: head); + list_add(&ocapa->c_list, before ?: head); } static inline int obd_capa_open_count(struct obd_capa *oc) { - struct ll_inode_info *lli = ll_i2info(oc->u.cli.inode); - return cfs_atomic_read(&lli->lli_open_count); + struct ll_inode_info *lli = ll_i2info(oc->u.cli.inode); + return atomic_read(&lli->lli_open_count); } static void ll_delete_capa(struct obd_capa *ocapa) @@ -150,11 +151,11 @@ static void ll_delete_capa(struct obd_capa *ocapa) LASSERT(lli->lli_mds_capa == ocapa); lli->lli_mds_capa = NULL; } else if (capa_for_oss(&ocapa->c_capa)) { - cfs_list_del_init(&ocapa->u.cli.lli_list); + list_del_init(&ocapa->u.cli.lli_list); } DEBUG_CAPA(D_SEC, &ocapa->c_capa, "free client"); - cfs_list_del_init(&ocapa->c_list); + list_del_init(&ocapa->c_list); capa_count[CAPA_SITE_CLIENT]--; /* release the ref when alloc */ capa_put(ocapa); @@ -188,7 +189,7 @@ static int capa_thread_main(void *unused) next = NULL; spin_lock(&capa_lock); - cfs_list_for_each_entry_safe(ocapa, tmp, ll_capa_list, c_list) { + list_for_each_entry_safe(ocapa, tmp, ll_capa_list, c_list) { __u64 ibits; LASSERT(ocapa->c_capa.lc_opc != CAPA_OPC_OSS_TRUNC); @@ -198,7 +199,7 @@ static int capa_thread_main(void *unused) break; } - cfs_list_del_init(&ocapa->c_list); + list_del_init(&ocapa->c_list); /* for MDS capability, only renew those which belong to * dir, or its inode is opened, or client holds LOOKUP @@ -253,23 +254,23 @@ static int capa_thread_main(void *unused) if (next) update_capa_timer(next, capa_renewal_time(next)); - cfs_list_for_each_entry_safe(ocapa, tmp, &ll_idle_capas, + list_for_each_entry_safe(ocapa, tmp, &ll_idle_capas, c_list) { if (!capa_is_expired(ocapa)) { if (!next) update_capa_timer(ocapa, ocapa->c_expiry); - break; - } - - if (cfs_atomic_read(&ocapa->c_refc) > 1) { - DEBUG_CAPA(D_SEC, &ocapa->c_capa, - "expired(c_refc %d), don't release", - cfs_atomic_read(&ocapa->c_refc)); - /* don't try to renew any more */ - cfs_list_del_init(&ocapa->c_list); - continue; - } + break; + } + + if (atomic_read(&ocapa->c_refc) > 1) { + DEBUG_CAPA(D_SEC, &ocapa->c_capa, + "expired(c_refc %d), don't release", + atomic_read(&ocapa->c_refc)); + /* don't try to renew any more */ + list_del_init(&ocapa->c_list); + continue; + } /* expired capa is released. */ DEBUG_CAPA(D_SEC, &ocapa->c_capa, "release expired"); @@ -331,7 +332,7 @@ struct obd_capa *ll_osscapa_get(struct inode *inode, __u64 opc) opc == CAPA_OPC_OSS_TRUNC); spin_lock(&capa_lock); - cfs_list_for_each_entry(ocapa, &lli->lli_oss_capas, u.cli.lli_list) { + list_for_each_entry(ocapa, &lli->lli_oss_capas, u.cli.lli_list) { if (capa_is_expired(ocapa)) continue; if ((opc & CAPA_OPC_OSS_WRITE) && @@ -358,15 +359,15 @@ struct obd_capa *ll_osscapa_get(struct inode *inode, __u64 opc) capa_get(ocapa); DEBUG_CAPA(D_SEC, &ocapa->c_capa, "found client"); - } else { - ocapa = NULL; - - if (cfs_atomic_read(&ll_capa_debug)) { - CERROR("no capability for "DFID" opc "LPX64"\n", - PFID(&lli->lli_fid), opc); - cfs_atomic_set(&ll_capa_debug, 0); - } - } + } else { + ocapa = NULL; + + if (atomic_read(&ll_capa_debug)) { + CERROR("no capability for "DFID" opc "LPX64"\n", + PFID(&lli->lli_fid), opc); + atomic_set(&ll_capa_debug, 0); + } + } spin_unlock(&capa_lock); RETURN(ocapa); @@ -375,24 +376,24 @@ EXPORT_SYMBOL(ll_osscapa_get); struct obd_capa *ll_mdscapa_get(struct inode *inode) { - struct ll_inode_info *lli = ll_i2info(inode); - struct obd_capa *ocapa; - ENTRY; + struct ll_inode_info *lli = ll_i2info(inode); + struct obd_capa *ocapa; + ENTRY; - LASSERT(inode != NULL); + LASSERT(inode != NULL); - if ((ll_i2sbi(inode)->ll_flags & LL_SBI_MDS_CAPA) == 0) - RETURN(NULL); + if ((ll_i2sbi(inode)->ll_flags & LL_SBI_MDS_CAPA) == 0) + RETURN(NULL); spin_lock(&capa_lock); ocapa = capa_get(lli->lli_mds_capa); spin_unlock(&capa_lock); - if (!ocapa && cfs_atomic_read(&ll_capa_debug)) { - CERROR("no mds capability for "DFID"\n", PFID(&lli->lli_fid)); - cfs_atomic_set(&ll_capa_debug, 0); - } + if (!ocapa && atomic_read(&ll_capa_debug)) { + CERROR("no mds capability for "DFID"\n", PFID(&lli->lli_fid)); + atomic_set(&ll_capa_debug, 0); + } - RETURN(ocapa); + RETURN(ocapa); } static struct obd_capa *do_add_mds_capa(struct inode *inode, @@ -427,7 +428,7 @@ static struct obd_capa *do_lookup_oss_capa(struct inode *inode, int opc) struct obd_capa *ocapa; /* inside capa_lock */ - cfs_list_for_each_entry(ocapa, &lli->lli_oss_capas, u.cli.lli_list) { + list_for_each_entry(ocapa, &lli->lli_oss_capas, u.cli.lli_list) { if ((capa_opc(&ocapa->c_capa) & opc) != opc) continue; @@ -447,18 +448,18 @@ static inline void inode_add_oss_capa(struct inode *inode, { struct ll_inode_info *lli = ll_i2info(inode); struct obd_capa *tmp; - cfs_list_t *next = NULL; + struct list_head *next = NULL; /* capa is sorted in lli_oss_capas so lookup can always find the * latest one */ - cfs_list_for_each_entry(tmp, &lli->lli_oss_capas, u.cli.lli_list) { + list_for_each_entry(tmp, &lli->lli_oss_capas, u.cli.lli_list) { if (cfs_time_after(ocapa->c_expiry, tmp->c_expiry)) { next = &tmp->u.cli.lli_list; break; } } LASSERT(&ocapa->u.cli.lli_list != next); - cfs_list_move_tail(&ocapa->u.cli.lli_list, next ?: &lli->lli_oss_capas); + list_move_tail(&ocapa->u.cli.lli_list, next ?: &lli->lli_oss_capas); } static struct obd_capa *do_add_oss_capa(struct inode *inode, @@ -475,7 +476,7 @@ static struct obd_capa *do_add_oss_capa(struct inode *inode, old = do_lookup_oss_capa(inode, capa_opc(capa) & CAPA_OPC_OSS_ONLY); if (!old) { ocapa->u.cli.inode = inode; - CFS_INIT_LIST_HEAD(&ocapa->u.cli.lli_list); + INIT_LIST_HEAD(&ocapa->u.cli.lli_list); capa_count[CAPA_SITE_CLIENT]++; DEBUG_CAPA(D_SEC, capa, "add OSS"); @@ -497,21 +498,21 @@ static struct obd_capa *do_add_oss_capa(struct inode *inode, struct obd_capa *ll_add_capa(struct inode *inode, struct obd_capa *ocapa) { spin_lock(&capa_lock); - ocapa = capa_for_mds(&ocapa->c_capa) ? do_add_mds_capa(inode, ocapa) : - do_add_oss_capa(inode, ocapa); + ocapa = capa_for_mds(&ocapa->c_capa) ? do_add_mds_capa(inode, ocapa) : + do_add_oss_capa(inode, ocapa); - /* truncate capa won't renew */ - if (ocapa->c_capa.lc_opc != CAPA_OPC_OSS_TRUNC) { - set_capa_expiry(ocapa); - cfs_list_del_init(&ocapa->c_list); - sort_add_capa(ocapa, ll_capa_list); + /* truncate capa won't renew */ + if (ocapa->c_capa.lc_opc != CAPA_OPC_OSS_TRUNC) { + set_capa_expiry(ocapa); + list_del_init(&ocapa->c_list); + sort_add_capa(ocapa, ll_capa_list); - update_capa_timer(ocapa, capa_renewal_time(ocapa)); - } + update_capa_timer(ocapa, capa_renewal_time(ocapa)); + } spin_unlock(&capa_lock); - cfs_atomic_set(&ll_capa_debug, 1); + atomic_set(&ll_capa_debug, 1); return ocapa; } @@ -521,7 +522,7 @@ static inline void delay_capa_renew(struct obd_capa *oc, cfs_time_t delay) oc->c_expiry = cfs_time_add(oc->c_expiry, cfs_time_seconds(delay)); } -int ll_update_capa(struct obd_capa *ocapa, struct lustre_capa *capa) +static int ll_update_capa(struct obd_capa *ocapa, struct lustre_capa *capa) { struct inode *inode = ocapa->u.cli.inode; int rc = 0; @@ -555,7 +556,7 @@ int ll_update_capa(struct obd_capa *ocapa, struct lustre_capa *capa) } } - cfs_list_del_init(&ocapa->c_list); + list_del_init(&ocapa->c_list); sort_add_capa(ocapa, &ll_idle_capas); spin_unlock(&capa_lock); @@ -577,7 +578,7 @@ int ll_update_capa(struct obd_capa *ocapa, struct lustre_capa *capa) DEBUG_CAPA(D_SEC, capa, "renew"); EXIT; retry: - cfs_list_del_init(&ocapa->c_list); + list_del_init(&ocapa->c_list); sort_add_capa(ocapa, ll_capa_list); update_capa_timer(ocapa, capa_renewal_time(ocapa)); spin_unlock(&capa_lock); @@ -589,30 +590,30 @@ retry: void ll_capa_open(struct inode *inode) { - struct ll_inode_info *lli = ll_i2info(inode); + struct ll_inode_info *lli = ll_i2info(inode); - if ((ll_i2sbi(inode)->ll_flags & (LL_SBI_MDS_CAPA | LL_SBI_OSS_CAPA)) - == 0) - return; + if ((ll_i2sbi(inode)->ll_flags & (LL_SBI_MDS_CAPA | LL_SBI_OSS_CAPA)) + == 0) + return; - if (!S_ISREG(inode->i_mode)) - return; + if (!S_ISREG(inode->i_mode)) + return; - cfs_atomic_inc(&lli->lli_open_count); + atomic_inc(&lli->lli_open_count); } void ll_capa_close(struct inode *inode) { - struct ll_inode_info *lli = ll_i2info(inode); + struct ll_inode_info *lli = ll_i2info(inode); - if ((ll_i2sbi(inode)->ll_flags & (LL_SBI_MDS_CAPA | LL_SBI_OSS_CAPA)) - == 0) - return; + if ((ll_i2sbi(inode)->ll_flags & (LL_SBI_MDS_CAPA | LL_SBI_OSS_CAPA)) + == 0) + return; - if (!S_ISREG(inode->i_mode)) - return; + if (!S_ISREG(inode->i_mode)) + return; - cfs_atomic_dec(&lli->lli_open_count); + atomic_dec(&lli->lli_open_count); } /* delete CAPA_OPC_OSS_TRUNC only */ @@ -643,7 +644,7 @@ void ll_clear_inode_capas(struct inode *inode) if (ocapa) ll_delete_capa(ocapa); - cfs_list_for_each_entry_safe(ocapa, tmp, &lli->lli_oss_capas, + list_for_each_entry_safe(ocapa, tmp, &lli->lli_oss_capas, u.cli.lli_list) ll_delete_capa(ocapa); spin_unlock(&capa_lock);