diff --git a/[refs] b/[refs] index 2b4e531065d7..2067356fe5f0 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: 036a98263a30930a329e7bb184d5e77f27358e40 +refs/heads/master: 3814554d11b3f677117ab048f147d207fd66f856 diff --git a/trunk/arch/arm/mach-s5p64x0/cpu.c b/trunk/arch/arm/mach-s5p64x0/cpu.c index b8d02eb4cf30..a5c00952ea35 100644 --- a/trunk/arch/arm/mach-s5p64x0/cpu.c +++ b/trunk/arch/arm/mach-s5p64x0/cpu.c @@ -119,7 +119,7 @@ void __init s5p6450_map_io(void) s3c_adc_setname("s3c64xx-adc"); iotable_init(s5p64x0_iodesc, ARRAY_SIZE(s5p64x0_iodesc)); - iotable_init(s5p6450_iodesc, ARRAY_SIZE(s5p6440_iodesc)); + iotable_init(s5p6450_iodesc, ARRAY_SIZE(s5p6450_iodesc)); } /* diff --git a/trunk/arch/score/Kconfig b/trunk/arch/score/Kconfig index 4278bbc032ce..27b2295f41f3 100644 --- a/trunk/arch/score/Kconfig +++ b/trunk/arch/score/Kconfig @@ -3,8 +3,6 @@ menu "Machine selection" config SCORE def_bool y select HAVE_GENERIC_HARDIRQS - select GENERIC_HARDIRQS_NO_DEPRECATED - select GENERIC_IRQ_SHOW choice prompt "System type" diff --git a/trunk/arch/score/include/asm/irqflags.h b/trunk/arch/score/include/asm/irqflags.h index 37c6ac9dd6e8..5c7563891e28 100644 --- a/trunk/arch/score/include/asm/irqflags.h +++ b/trunk/arch/score/include/asm/irqflags.h @@ -29,7 +29,7 @@ static inline unsigned long arch_local_save_flags(void) static inline unsigned long arch_local_irq_save(void) { - unsigned long flags; + unsigned long flags asm volatile( " mfcr r8, cr0 \n" diff --git a/trunk/arch/score/kernel/irq.c b/trunk/arch/score/kernel/irq.c index d4196732c65e..47647dde09ca 100644 --- a/trunk/arch/score/kernel/irq.c +++ b/trunk/arch/score/kernel/irq.c @@ -52,9 +52,9 @@ asmlinkage void do_IRQ(int irq) irq_exit(); } -static void score_mask(struct irq_data *d) +static void score_mask(unsigned int irq_nr) { - unsigned int irq_source = 63 - d->irq; + unsigned int irq_source = 63 - irq_nr; if (irq_source < 32) __raw_writel((__raw_readl(SCORE_PIC + INT_MASKL) | \ @@ -64,9 +64,9 @@ static void score_mask(struct irq_data *d) (1 << (irq_source - 32))), SCORE_PIC + INT_MASKH); } -static void score_unmask(struct irq_data *d) +static void score_unmask(unsigned int irq_nr) { - unsigned int irq_source = 63 - d->irq; + unsigned int irq_source = 63 - irq_nr; if (irq_source < 32) __raw_writel((__raw_readl(SCORE_PIC + INT_MASKL) & \ @@ -78,9 +78,9 @@ static void score_unmask(struct irq_data *d) struct irq_chip score_irq_chip = { .name = "Score7-level", - .irq_mask = score_mask, - .irq_mask_ack = score_mask, - .irq_unmask = score_unmask, + .mask = score_mask, + .mask_ack = score_mask, + .unmask = score_unmask, }; /* @@ -92,7 +92,7 @@ void __init init_IRQ(void) unsigned long target_addr; for (index = 0; index < NR_IRQS; ++index) - irq_set_chip_and_handler(index, &score_irq_chip, + set_irq_chip_and_handler(index, &score_irq_chip, handle_level_irq); for (target_addr = IRQ_VECTOR_BASE_ADDR; @@ -109,3 +109,40 @@ void __init init_IRQ(void) : : "r" (EXCEPTION_VECTOR_BASE_ADDR | \ VECTOR_ADDRESS_OFFSET_MODE16)); } + +/* + * Generic, controller-independent functions: + */ +int show_interrupts(struct seq_file *p, void *v) +{ + int i = *(loff_t *)v, cpu; + struct irqaction *action; + unsigned long flags; + + if (i == 0) { + seq_puts(p, " "); + for_each_online_cpu(cpu) + seq_printf(p, "CPU%d ", cpu); + seq_putc(p, '\n'); + } + + if (i < NR_IRQS) { + spin_lock_irqsave(&irq_desc[i].lock, flags); + action = irq_desc[i].action; + if (!action) + goto unlock; + + seq_printf(p, "%3d: ", i); + seq_printf(p, "%10u ", kstat_irqs(i)); + seq_printf(p, " %8s", irq_desc[i].chip->name ? : "-"); + seq_printf(p, " %s", action->name); + for (action = action->next; action; action = action->next) + seq_printf(p, ", %s", action->name); + + seq_putc(p, '\n'); +unlock: + spin_unlock_irqrestore(&irq_desc[i].lock, flags); + } + + return 0; +} diff --git a/trunk/arch/tile/Kconfig b/trunk/arch/tile/Kconfig index 5e34a9fee9b3..f3b78701c219 100644 --- a/trunk/arch/tile/Kconfig +++ b/trunk/arch/tile/Kconfig @@ -12,7 +12,6 @@ config TILE select GENERIC_IRQ_PROBE select GENERIC_PENDING_IRQ if SMP select GENERIC_HARDIRQS_NO_DEPRECATED - select GENERIC_IRQ_SHOW # FIXME: investigate whether we need/want these options. # select HAVE_IOREMAP_PROT diff --git a/trunk/arch/tile/kernel/irq.c b/trunk/arch/tile/kernel/irq.c index aa0134db2dd6..0baa7580121f 100644 --- a/trunk/arch/tile/kernel/irq.c +++ b/trunk/arch/tile/kernel/irq.c @@ -241,14 +241,14 @@ void tile_irq_activate(unsigned int irq, int tile_irq_type) irq_flow_handler_t handle = handle_level_irq; if (tile_irq_type == TILE_IRQ_PERCPU) handle = handle_percpu_irq; - irq_set_chip_and_handler(irq, &tile_irq_chip, handle); + set_irq_chip_and_handler(irq, &tile_irq_chip, handle); /* * Flag interrupts that are hardware-cleared so that ack() * won't clear them. */ if (tile_irq_type == TILE_IRQ_HW_CLEAR) - irq_set_chip_data(irq, (void *)IS_HW_CLEARED); + set_irq_chip_data(irq, (void *)IS_HW_CLEARED); } EXPORT_SYMBOL(tile_irq_activate); @@ -262,6 +262,47 @@ void ack_bad_irq(unsigned int irq) * Generic, controller-independent functions: */ +int show_interrupts(struct seq_file *p, void *v) +{ + int i = *(loff_t *) v, j; + struct irqaction *action; + unsigned long flags; + + if (i == 0) { + seq_printf(p, " "); + for (j = 0; j < NR_CPUS; j++) + if (cpu_online(j)) + seq_printf(p, "CPU%-8d", j); + seq_putc(p, '\n'); + } + + if (i < NR_IRQS) { + struct irq_desc *desc = irq_to_desc(i); + + raw_spin_lock_irqsave(&desc->lock, flags); + action = desc->action; + if (!action) + goto skip; + seq_printf(p, "%3d: ", i); +#ifndef CONFIG_SMP + seq_printf(p, "%10u ", kstat_irqs(i)); +#else + for_each_online_cpu(j) + seq_printf(p, "%10u ", kstat_irqs_cpu(i, j)); +#endif + seq_printf(p, " %14s", get_irq_desc_chip(desc)->name); + seq_printf(p, " %s", action->name); + + for (action = action->next; action; action = action->next) + seq_printf(p, ", %s", action->name); + + seq_putc(p, '\n'); +skip: + raw_spin_unlock_irqrestore(&desc->lock, flags); + } + return 0; +} + #if CHIP_HAS_IPI() int create_irq(void) { diff --git a/trunk/arch/x86/crypto/aesni-intel_asm.S b/trunk/arch/x86/crypto/aesni-intel_asm.S index be6d9e365a80..adcf794b22e2 100644 --- a/trunk/arch/x86/crypto/aesni-intel_asm.S +++ b/trunk/arch/x86/crypto/aesni-intel_asm.S @@ -1612,7 +1612,6 @@ _zero_cipher_left_encrypt: movdqa SHUF_MASK(%rip), %xmm10 PSHUFB_XMM %xmm10, %xmm0 - ENCRYPT_SINGLE_BLOCK %xmm0, %xmm1 # Encrypt(K, Yn) sub $16, %r11 add %r13, %r11 @@ -1635,9 +1634,7 @@ _zero_cipher_left_encrypt: # GHASH computation for the last <16 byte block sub %r13, %r11 add $16, %r11 - - movdqa SHUF_MASK(%rip), %xmm10 - PSHUFB_XMM %xmm10, %xmm0 + PSHUFB_XMM %xmm10, %xmm1 # shuffle xmm0 back to output as ciphertext diff --git a/trunk/arch/x86/crypto/aesni-intel_glue.c b/trunk/arch/x86/crypto/aesni-intel_glue.c index 2577613fb32b..e0e6340c8dad 100644 --- a/trunk/arch/x86/crypto/aesni-intel_glue.c +++ b/trunk/arch/x86/crypto/aesni-intel_glue.c @@ -828,15 +828,9 @@ static int rfc4106_init(struct crypto_tfm *tfm) struct cryptd_aead *cryptd_tfm; struct aesni_rfc4106_gcm_ctx *ctx = (struct aesni_rfc4106_gcm_ctx *) PTR_ALIGN((u8 *)crypto_tfm_ctx(tfm), AESNI_ALIGN); - struct crypto_aead *cryptd_child; - struct aesni_rfc4106_gcm_ctx *child_ctx; cryptd_tfm = cryptd_alloc_aead("__driver-gcm-aes-aesni", 0, 0); if (IS_ERR(cryptd_tfm)) return PTR_ERR(cryptd_tfm); - - cryptd_child = cryptd_aead_child(cryptd_tfm); - child_ctx = aesni_rfc4106_gcm_ctx_get(cryptd_child); - memcpy(child_ctx, ctx, sizeof(*ctx)); ctx->cryptd_tfm = cryptd_tfm; tfm->crt_aead.reqsize = sizeof(struct aead_request) + crypto_aead_reqsize(&cryptd_tfm->base); @@ -929,9 +923,6 @@ static int rfc4106_set_key(struct crypto_aead *parent, const u8 *key, int ret = 0; struct crypto_tfm *tfm = crypto_aead_tfm(parent); struct aesni_rfc4106_gcm_ctx *ctx = aesni_rfc4106_gcm_ctx_get(parent); - struct crypto_aead *cryptd_child = cryptd_aead_child(ctx->cryptd_tfm); - struct aesni_rfc4106_gcm_ctx *child_ctx = - aesni_rfc4106_gcm_ctx_get(cryptd_child); u8 *new_key_mem = NULL; if (key_len < 4) { @@ -975,7 +966,6 @@ static int rfc4106_set_key(struct crypto_aead *parent, const u8 *key, goto exit; } ret = rfc4106_set_hash_subkey(ctx->hash_subkey, key, key_len); - memcpy(child_ctx, ctx, sizeof(*ctx)); exit: kfree(new_key_mem); return ret; @@ -1007,6 +997,7 @@ static int rfc4106_encrypt(struct aead_request *req) int ret; struct crypto_aead *tfm = crypto_aead_reqtfm(req); struct aesni_rfc4106_gcm_ctx *ctx = aesni_rfc4106_gcm_ctx_get(tfm); + struct crypto_aead *cryptd_child = cryptd_aead_child(ctx->cryptd_tfm); if (!irq_fpu_usable()) { struct aead_request *cryptd_req = @@ -1015,7 +1006,6 @@ static int rfc4106_encrypt(struct aead_request *req) aead_request_set_tfm(cryptd_req, &ctx->cryptd_tfm->base); return crypto_aead_encrypt(cryptd_req); } else { - struct crypto_aead *cryptd_child = cryptd_aead_child(ctx->cryptd_tfm); kernel_fpu_begin(); ret = cryptd_child->base.crt_aead.encrypt(req); kernel_fpu_end(); @@ -1028,6 +1018,7 @@ static int rfc4106_decrypt(struct aead_request *req) int ret; struct crypto_aead *tfm = crypto_aead_reqtfm(req); struct aesni_rfc4106_gcm_ctx *ctx = aesni_rfc4106_gcm_ctx_get(tfm); + struct crypto_aead *cryptd_child = cryptd_aead_child(ctx->cryptd_tfm); if (!irq_fpu_usable()) { struct aead_request *cryptd_req = @@ -1036,7 +1027,6 @@ static int rfc4106_decrypt(struct aead_request *req) aead_request_set_tfm(cryptd_req, &ctx->cryptd_tfm->base); return crypto_aead_decrypt(cryptd_req); } else { - struct crypto_aead *cryptd_child = cryptd_aead_child(ctx->cryptd_tfm); kernel_fpu_begin(); ret = cryptd_child->base.crt_aead.decrypt(req); kernel_fpu_end(); diff --git a/trunk/drivers/acpi/video.c b/trunk/drivers/acpi/video.c index 31e9e10f657e..a18e497f1c3c 100644 --- a/trunk/drivers/acpi/video.c +++ b/trunk/drivers/acpi/video.c @@ -824,6 +824,11 @@ static void acpi_video_device_find_cap(struct acpi_video_device *device) device->backlight->props.brightness = acpi_video_get_brightness(device->backlight); + result = sysfs_create_link(&device->backlight->dev.kobj, + &device->dev->dev.kobj, "device"); + if (result) + printk(KERN_ERR PREFIX "Create sysfs link\n"); + device->cooling_dev = thermal_cooling_device_register("LCD", device->dev, &video_cooling_ops); if (IS_ERR(device->cooling_dev)) { @@ -1376,6 +1381,7 @@ static int acpi_video_bus_put_one_device(struct acpi_video_device *device) "Cant remove video notify handler\n"); } if (device->backlight) { + sysfs_remove_link(&device->backlight->dev.kobj, "device"); backlight_device_unregister(device->backlight); device->backlight = NULL; } diff --git a/trunk/drivers/block/drbd/drbd_bitmap.c b/trunk/drivers/block/drbd/drbd_bitmap.c index 76210ba401ac..f0ae63d2df65 100644 --- a/trunk/drivers/block/drbd/drbd_bitmap.c +++ b/trunk/drivers/block/drbd/drbd_bitmap.c @@ -29,6 +29,8 @@ #include #include +#include + #include "drbd_int.h" @@ -1182,10 +1184,10 @@ static unsigned long __bm_find_next(struct drbd_conf *mdev, unsigned long bm_fo, p_addr = __bm_map_pidx(b, bm_bit_to_page_idx(b, bm_fo), km); if (find_zero_bit) - i = find_next_zero_bit_le(p_addr, + i = generic_find_next_zero_le_bit(p_addr, PAGE_SIZE*8, bm_fo & BITS_PER_PAGE_MASK); else - i = find_next_bit_le(p_addr, + i = generic_find_next_le_bit(p_addr, PAGE_SIZE*8, bm_fo & BITS_PER_PAGE_MASK); __bm_unmap(p_addr, km); @@ -1285,9 +1287,9 @@ static int __bm_change_bits_to(struct drbd_conf *mdev, const unsigned long s, last_page_nr = page_nr; } if (val) - c += (0 == __test_and_set_bit_le(bitnr & BITS_PER_PAGE_MASK, p_addr)); + c += (0 == generic___test_and_set_le_bit(bitnr & BITS_PER_PAGE_MASK, p_addr)); else - c -= (0 != __test_and_clear_bit_le(bitnr & BITS_PER_PAGE_MASK, p_addr)); + c -= (0 != generic___test_and_clear_le_bit(bitnr & BITS_PER_PAGE_MASK, p_addr)); } if (p_addr) __bm_unmap(p_addr, km); @@ -1436,7 +1438,7 @@ int drbd_bm_test_bit(struct drbd_conf *mdev, const unsigned long bitnr) bm_print_lock_info(mdev); if (bitnr < b->bm_bits) { p_addr = bm_map_pidx(b, bm_bit_to_page_idx(b, bitnr)); - i = test_bit_le(bitnr & BITS_PER_PAGE_MASK, p_addr) ? 1 : 0; + i = generic_test_le_bit(bitnr & BITS_PER_PAGE_MASK, p_addr) ? 1 : 0; bm_unmap(p_addr); } else if (bitnr == b->bm_bits) { i = -1; @@ -1480,7 +1482,7 @@ int drbd_bm_count_bits(struct drbd_conf *mdev, const unsigned long s, const unsi ERR_IF (bitnr >= b->bm_bits) { dev_err(DEV, "bitnr=%lu bm_bits=%lu\n", bitnr, b->bm_bits); } else { - c += (0 != test_bit_le(bitnr - (page_nr << (PAGE_SHIFT+3)), p_addr)); + c += (0 != generic_test_le_bit(bitnr - (page_nr << (PAGE_SHIFT+3)), p_addr)); } } if (p_addr) diff --git a/trunk/drivers/dma/ipu/ipu_irq.c b/trunk/drivers/dma/ipu/ipu_irq.c index ab8a4eff072a..dd8ebc75b667 100644 --- a/trunk/drivers/dma/ipu/ipu_irq.c +++ b/trunk/drivers/dma/ipu/ipu_irq.c @@ -94,9 +94,9 @@ static struct ipu_irq_map *src2map(unsigned int src) return NULL; } -static void ipu_irq_unmask(struct irq_data *d) +static void ipu_irq_unmask(unsigned int irq) { - struct ipu_irq_map *map = irq_data_get_irq_chip_data(d); + struct ipu_irq_map *map = get_irq_chip_data(irq); struct ipu_irq_bank *bank; uint32_t reg; unsigned long lock_flags; @@ -106,7 +106,7 @@ static void ipu_irq_unmask(struct irq_data *d) bank = map->bank; if (!bank) { spin_unlock_irqrestore(&bank_lock, lock_flags); - pr_err("IPU: %s(%u) - unmapped!\n", __func__, d->irq); + pr_err("IPU: %s(%u) - unmapped!\n", __func__, irq); return; } @@ -117,9 +117,9 @@ static void ipu_irq_unmask(struct irq_data *d) spin_unlock_irqrestore(&bank_lock, lock_flags); } -static void ipu_irq_mask(struct irq_data *d) +static void ipu_irq_mask(unsigned int irq) { - struct ipu_irq_map *map = irq_data_get_irq_chip_data(d); + struct ipu_irq_map *map = get_irq_chip_data(irq); struct ipu_irq_bank *bank; uint32_t reg; unsigned long lock_flags; @@ -129,7 +129,7 @@ static void ipu_irq_mask(struct irq_data *d) bank = map->bank; if (!bank) { spin_unlock_irqrestore(&bank_lock, lock_flags); - pr_err("IPU: %s(%u) - unmapped!\n", __func__, d->irq); + pr_err("IPU: %s(%u) - unmapped!\n", __func__, irq); return; } @@ -140,9 +140,9 @@ static void ipu_irq_mask(struct irq_data *d) spin_unlock_irqrestore(&bank_lock, lock_flags); } -static void ipu_irq_ack(struct irq_data *d) +static void ipu_irq_ack(unsigned int irq) { - struct ipu_irq_map *map = irq_data_get_irq_chip_data(d); + struct ipu_irq_map *map = get_irq_chip_data(irq); struct ipu_irq_bank *bank; unsigned long lock_flags; @@ -151,7 +151,7 @@ static void ipu_irq_ack(struct irq_data *d) bank = map->bank; if (!bank) { spin_unlock_irqrestore(&bank_lock, lock_flags); - pr_err("IPU: %s(%u) - unmapped!\n", __func__, d->irq); + pr_err("IPU: %s(%u) - unmapped!\n", __func__, irq); return; } @@ -167,7 +167,7 @@ static void ipu_irq_ack(struct irq_data *d) */ bool ipu_irq_status(unsigned int irq) { - struct ipu_irq_map *map = irq_get_chip_data(irq); + struct ipu_irq_map *map = get_irq_chip_data(irq); struct ipu_irq_bank *bank; unsigned long lock_flags; bool ret; @@ -269,7 +269,7 @@ int ipu_irq_unmap(unsigned int source) /* Chained IRQ handler for IPU error interrupt */ static void ipu_irq_err(unsigned int irq, struct irq_desc *desc) { - struct ipu *ipu = irq_get_handler_data(irq); + struct ipu *ipu = get_irq_data(irq); u32 status; int i, line; @@ -310,7 +310,7 @@ static void ipu_irq_err(unsigned int irq, struct irq_desc *desc) /* Chained IRQ handler for IPU function interrupt */ static void ipu_irq_fn(unsigned int irq, struct irq_desc *desc) { - struct ipu *ipu = irq_desc_get_handler_data(desc); + struct ipu *ipu = get_irq_data(irq); u32 status; int i, line; @@ -345,10 +345,10 @@ static void ipu_irq_fn(unsigned int irq, struct irq_desc *desc) } static struct irq_chip ipu_irq_chip = { - .name = "ipu_irq", - .irq_ack = ipu_irq_ack, - .irq_mask = ipu_irq_mask, - .irq_unmask = ipu_irq_unmask, + .name = "ipu_irq", + .ack = ipu_irq_ack, + .mask = ipu_irq_mask, + .unmask = ipu_irq_unmask, }; /* Install the IRQ handler */ @@ -366,26 +366,26 @@ int __init ipu_irq_attach_irq(struct ipu *ipu, struct platform_device *dev) int ret; irq = irq_base + i; - ret = irq_set_chip(irq, &ipu_irq_chip); + ret = set_irq_chip(irq, &ipu_irq_chip); if (ret < 0) return ret; - ret = irq_set_chip_data(irq, irq_map + i); + ret = set_irq_chip_data(irq, irq_map + i); if (ret < 0) return ret; irq_map[i].ipu = ipu; irq_map[i].irq = irq; irq_map[i].source = -EINVAL; - irq_set_handler(irq, handle_level_irq); + set_irq_handler(irq, handle_level_irq); #ifdef CONFIG_ARM set_irq_flags(irq, IRQF_VALID | IRQF_PROBE); #endif } - irq_set_handler_data(ipu->irq_fn, ipu); - irq_set_chained_handler(ipu->irq_fn, ipu_irq_fn); + set_irq_data(ipu->irq_fn, ipu); + set_irq_chained_handler(ipu->irq_fn, ipu_irq_fn); - irq_set_handler_data(ipu->irq_err, ipu); - irq_set_chained_handler(ipu->irq_err, ipu_irq_err); + set_irq_data(ipu->irq_err, ipu); + set_irq_chained_handler(ipu->irq_err, ipu_irq_err); return 0; } @@ -397,17 +397,17 @@ void ipu_irq_detach_irq(struct ipu *ipu, struct platform_device *dev) irq_base = pdata->irq_base; - irq_set_chained_handler(ipu->irq_fn, NULL); - irq_set_handler_data(ipu->irq_fn, NULL); + set_irq_chained_handler(ipu->irq_fn, NULL); + set_irq_data(ipu->irq_fn, NULL); - irq_set_chained_handler(ipu->irq_err, NULL); - irq_set_handler_data(ipu->irq_err, NULL); + set_irq_chained_handler(ipu->irq_err, NULL); + set_irq_data(ipu->irq_err, NULL); for (irq = irq_base; irq < irq_base + CONFIG_MX3_IPU_IRQS; irq++) { #ifdef CONFIG_ARM set_irq_flags(irq, 0); #endif - irq_set_chip(irq, NULL); - irq_set_chip_data(irq, NULL); + set_irq_chip(irq, NULL); + set_irq_chip_data(irq, NULL); } } diff --git a/trunk/drivers/mfd/Kconfig b/trunk/drivers/mfd/Kconfig index 9a46d64996a9..e986f91fff9c 100644 --- a/trunk/drivers/mfd/Kconfig +++ b/trunk/drivers/mfd/Kconfig @@ -592,7 +592,7 @@ config AB3550_CORE config MFD_CS5535 tristate "Support for CS5535 and CS5536 southbridge core functions" select MFD_CORE - depends on PCI && X86 + depends on PCI ---help--- This is the core driver for CS5535/CS5536 MFD functions. This is necessary for using the board's GPIO and MFGPT functionality. diff --git a/trunk/fs/nfs/namespace.c b/trunk/fs/nfs/namespace.c index 9166fcb66da2..ad92bf731ff5 100644 --- a/trunk/fs/nfs/namespace.c +++ b/trunk/fs/nfs/namespace.c @@ -192,15 +192,13 @@ static rpc_authflavor_t nfs_lookup_with_sec(struct nfs_server *server, struct de auth = rpcauth_create(flavor, clone); if (!auth) { flavor = -EIO; - goto out_shutdown; + goto out; } err = server->nfs_client->rpc_ops->lookup(clone, parent->d_inode, &path->dentry->d_name, fh, fattr); if (err < 0) flavor = err; -out_shutdown: - rpc_shutdown_client(clone); out: return flavor; } diff --git a/trunk/fs/nfs/pagelist.c b/trunk/fs/nfs/pagelist.c index c80add6e2213..87a593c2b055 100644 --- a/trunk/fs/nfs/pagelist.c +++ b/trunk/fs/nfs/pagelist.c @@ -135,14 +135,14 @@ void nfs_clear_page_tag_locked(struct nfs_page *req) nfs_unlock_request(req); } -/* +/** * nfs_clear_request - Free up all resources allocated to the request * @req: * * Release page and open context resources associated with a read/write * request after it has completed. */ -static void nfs_clear_request(struct nfs_page *req) +void nfs_clear_request(struct nfs_page *req) { struct page *page = req->wb_page; struct nfs_open_context *ctx = req->wb_context; diff --git a/trunk/fs/nfs/write.c b/trunk/fs/nfs/write.c index af0c6279a4a7..85d75254328e 100644 --- a/trunk/fs/nfs/write.c +++ b/trunk/fs/nfs/write.c @@ -389,8 +389,11 @@ static int nfs_inode_add_request(struct inode *inode, struct nfs_page *req) spin_lock(&inode->i_lock); error = radix_tree_insert(&nfsi->nfs_page_tree, req->wb_index, req); BUG_ON(error); - if (!nfsi->npages && nfs_have_delegation(inode, FMODE_WRITE)) - nfsi->change_attr++; + if (!nfsi->npages) { + igrab(inode); + if (nfs_have_delegation(inode, FMODE_WRITE)) + nfsi->change_attr++; + } set_bit(PG_MAPPED, &req->wb_flags); SetPagePrivate(req->wb_page); set_page_private(req->wb_page, (unsigned long)req); @@ -420,7 +423,11 @@ static void nfs_inode_remove_request(struct nfs_page *req) clear_bit(PG_MAPPED, &req->wb_flags); radix_tree_delete(&nfsi->nfs_page_tree, req->wb_index); nfsi->npages--; - spin_unlock(&inode->i_lock); + if (!nfsi->npages) { + spin_unlock(&inode->i_lock); + iput(inode); + } else + spin_unlock(&inode->i_lock); nfs_release_request(req); } diff --git a/trunk/fs/ocfs2/acl.c b/trunk/fs/ocfs2/acl.c index e913ad130fdd..90f2729b7a5b 100644 --- a/trunk/fs/ocfs2/acl.c +++ b/trunk/fs/ocfs2/acl.c @@ -24,6 +24,7 @@ #include #include +#define MLOG_MASK_PREFIX ML_INODE #include #include "ocfs2.h" diff --git a/trunk/fs/ocfs2/alloc.c b/trunk/fs/ocfs2/alloc.c index b27a0d86f8c5..e4984e259cb6 100644 --- a/trunk/fs/ocfs2/alloc.c +++ b/trunk/fs/ocfs2/alloc.c @@ -30,6 +30,7 @@ #include #include +#define MLOG_MASK_PREFIX ML_DISK_ALLOC #include #include "ocfs2.h" @@ -49,7 +50,6 @@ #include "uptodate.h" #include "xattr.h" #include "refcounttree.h" -#include "ocfs2_trace.h" #include "buffer_head_io.h" @@ -886,7 +886,8 @@ static int ocfs2_validate_extent_block(struct super_block *sb, struct ocfs2_extent_block *eb = (struct ocfs2_extent_block *)bh->b_data; - trace_ocfs2_validate_extent_block((unsigned long long)bh->b_blocknr); + mlog(0, "Validating extent block %llu\n", + (unsigned long long)bh->b_blocknr); BUG_ON(!buffer_uptodate(bh)); @@ -964,6 +965,8 @@ int ocfs2_num_free_extents(struct ocfs2_super *osb, struct buffer_head *eb_bh = NULL; u64 last_eb_blk = 0; + mlog_entry_void(); + el = et->et_root_el; last_eb_blk = ocfs2_et_get_last_eb_blk(et); @@ -984,7 +987,7 @@ int ocfs2_num_free_extents(struct ocfs2_super *osb, bail: brelse(eb_bh); - trace_ocfs2_num_free_extents(retval); + mlog_exit(retval); return retval; } @@ -1007,6 +1010,8 @@ static int ocfs2_create_new_meta_bhs(handle_t *handle, OCFS2_SB(ocfs2_metadata_cache_get_super(et->et_ci)); struct ocfs2_extent_block *eb; + mlog_entry_void(); + count = 0; while (count < wanted) { status = ocfs2_claim_metadata(handle, @@ -1069,8 +1074,8 @@ static int ocfs2_create_new_meta_bhs(handle_t *handle, brelse(bhs[i]); bhs[i] = NULL; } - mlog_errno(status); } + mlog_exit(status); return status; } @@ -1168,6 +1173,8 @@ static int ocfs2_add_branch(handle_t *handle, struct ocfs2_extent_list *el; u32 new_cpos, root_end; + mlog_entry_void(); + BUG_ON(!last_eb_bh || !*last_eb_bh); if (eb_bh) { @@ -1193,11 +1200,8 @@ static int ocfs2_add_branch(handle_t *handle, * from new_cpos). */ if (root_end > new_cpos) { - trace_ocfs2_adjust_rightmost_branch( - (unsigned long long) - ocfs2_metadata_cache_owner(et->et_ci), - root_end, new_cpos); - + mlog(0, "adjust the cluster end from %u to %u\n", + root_end, new_cpos); status = ocfs2_adjust_rightmost_branch(handle, et); if (status) { mlog_errno(status); @@ -1328,6 +1332,7 @@ static int ocfs2_add_branch(handle_t *handle, kfree(new_eb_bhs); } + mlog_exit(status); return status; } @@ -1348,6 +1353,8 @@ static int ocfs2_shift_tree_depth(handle_t *handle, struct ocfs2_extent_list *root_el; struct ocfs2_extent_list *eb_el; + mlog_entry_void(); + status = ocfs2_create_new_meta_bhs(handle, et, 1, meta_ac, &new_eb_bh); if (status < 0) { @@ -1408,6 +1415,7 @@ static int ocfs2_shift_tree_depth(handle_t *handle, bail: brelse(new_eb_bh); + mlog_exit(status); return status; } @@ -1438,6 +1446,8 @@ static int ocfs2_find_branch_target(struct ocfs2_extent_tree *et, struct buffer_head *bh = NULL; struct buffer_head *lowest_bh = NULL; + mlog_entry_void(); + *target_bh = NULL; el = et->et_root_el; @@ -1493,6 +1503,7 @@ static int ocfs2_find_branch_target(struct ocfs2_extent_tree *et, bail: brelse(bh); + mlog_exit(status); return status; } @@ -1529,10 +1540,7 @@ static int ocfs2_grow_tree(handle_t *handle, struct ocfs2_extent_tree *et, * another tree level */ if (shift) { BUG_ON(bh); - trace_ocfs2_grow_tree( - (unsigned long long) - ocfs2_metadata_cache_owner(et->et_ci), - depth); + mlog(0, "need to shift tree depth (current = %d)\n", depth); /* ocfs2_shift_tree_depth will return us a buffer with * the new extent block (so we can pass that to @@ -1562,6 +1570,7 @@ static int ocfs2_grow_tree(handle_t *handle, struct ocfs2_extent_tree *et, /* call ocfs2_add_branch to add the final part of the tree with * the new data. */ + mlog(0, "add branch. bh = %p\n", bh); ret = ocfs2_add_branch(handle, et, bh, last_eb_bh, meta_ac); if (ret < 0) { @@ -1636,9 +1645,8 @@ static void ocfs2_rotate_leaf(struct ocfs2_extent_list *el, } insert_index = i; - trace_ocfs2_rotate_leaf(insert_cpos, insert_index, - has_empty, next_free, - le16_to_cpu(el->l_count)); + mlog(0, "ins %u: index %d, has_empty %d, next_free %d, count %d\n", + insert_cpos, insert_index, has_empty, next_free, le16_to_cpu(el->l_count)); BUG_ON(insert_index < 0); BUG_ON(insert_index >= le16_to_cpu(el->l_count)); @@ -2051,7 +2059,7 @@ static void ocfs2_complete_edge_insert(handle_t *handle, left_el = path_leaf_el(left_path); right_el = path_leaf_el(right_path); for(i = left_path->p_tree_depth - 1; i > subtree_index; i--) { - trace_ocfs2_complete_edge_insert(i); + mlog(0, "Adjust records at index %u\n", i); /* * One nice property of knowing that all of these @@ -2381,9 +2389,7 @@ static int ocfs2_rotate_tree_right(handle_t *handle, goto out; } - trace_ocfs2_rotate_tree_right( - (unsigned long long)ocfs2_metadata_cache_owner(et->et_ci), - insert_cpos, cpos); + mlog(0, "Insert: %u, first left path cpos: %u\n", insert_cpos, cpos); /* * What we want to do here is: @@ -2412,10 +2418,8 @@ static int ocfs2_rotate_tree_right(handle_t *handle, * rotating subtrees. */ while (cpos && insert_cpos <= cpos) { - trace_ocfs2_rotate_tree_right( - (unsigned long long) - ocfs2_metadata_cache_owner(et->et_ci), - insert_cpos, cpos); + mlog(0, "Rotating a tree: ins. cpos: %u, left path cpos: %u\n", + insert_cpos, cpos); ret = ocfs2_find_path(et->et_ci, left_path, cpos); if (ret) { @@ -2457,10 +2461,10 @@ static int ocfs2_rotate_tree_right(handle_t *handle, start = ocfs2_find_subtree_root(et, left_path, right_path); - trace_ocfs2_rotate_subtree(start, - (unsigned long long) - right_path->p_node[start].bh->b_blocknr, - right_path->p_tree_depth); + mlog(0, "Subtree root at index %d (blk %llu, depth %d)\n", + start, + (unsigned long long) right_path->p_node[start].bh->b_blocknr, + right_path->p_tree_depth); ret = ocfs2_extend_rotate_transaction(handle, start, orig_credits, right_path); @@ -2960,7 +2964,8 @@ static int __ocfs2_rotate_tree_left(handle_t *handle, subtree_root = ocfs2_find_subtree_root(et, left_path, right_path); - trace_ocfs2_rotate_subtree(subtree_root, + mlog(0, "Subtree root at index %d (blk %llu, depth %d)\n", + subtree_root, (unsigned long long) right_path->p_node[subtree_root].bh->b_blocknr, right_path->p_tree_depth); @@ -3984,11 +3989,9 @@ static int ocfs2_append_rec_to_path(handle_t *handle, goto out; } - trace_ocfs2_append_rec_to_path( - (unsigned long long) - ocfs2_metadata_cache_owner(et->et_ci), - le32_to_cpu(insert_rec->e_cpos), - left_cpos); + mlog(0, "Append may need a left path update. cpos: %u, " + "left_cpos: %u\n", le32_to_cpu(insert_rec->e_cpos), + left_cpos); /* * No need to worry if the append is already in the @@ -4559,7 +4562,7 @@ static int ocfs2_figure_insert_type(struct ocfs2_extent_tree *et, ocfs2_et_get_last_eb_blk(et), &bh); if (ret) { - mlog_errno(ret); + mlog_exit(ret); goto out; } eb = (struct ocfs2_extent_block *) bh->b_data; @@ -4675,9 +4678,9 @@ int ocfs2_insert_extent(handle_t *handle, struct ocfs2_insert_type insert = {0, }; struct ocfs2_extent_rec rec; - trace_ocfs2_insert_extent_start( - (unsigned long long)ocfs2_metadata_cache_owner(et->et_ci), - cpos, new_clusters); + mlog(0, "add %u clusters at position %u to owner %llu\n", + new_clusters, cpos, + (unsigned long long)ocfs2_metadata_cache_owner(et->et_ci)); memset(&rec, 0, sizeof(rec)); rec.e_cpos = cpu_to_le32(cpos); @@ -4697,9 +4700,11 @@ int ocfs2_insert_extent(handle_t *handle, goto bail; } - trace_ocfs2_insert_extent(insert.ins_appending, insert.ins_contig, - insert.ins_contig_index, free_records, - insert.ins_tree_depth); + mlog(0, "Insert.appending: %u, Insert.Contig: %u, " + "Insert.contig_index: %d, Insert.free_records: %d, " + "Insert.tree_depth: %d\n", + insert.ins_appending, insert.ins_contig, insert.ins_contig_index, + free_records, insert.ins_tree_depth); if (insert.ins_contig == CONTIG_NONE && free_records == 0) { status = ocfs2_grow_tree(handle, et, @@ -4721,6 +4726,7 @@ int ocfs2_insert_extent(handle_t *handle, bail: brelse(last_eb_bh); + mlog_exit(status); return status; } @@ -4740,7 +4746,7 @@ int ocfs2_add_clusters_in_btree(handle_t *handle, struct ocfs2_alloc_context *meta_ac, enum ocfs2_alloc_restarted *reason_ret) { - int status = 0, err = 0; + int status = 0; int free_extents; enum ocfs2_alloc_restarted reason = RESTART_NONE; u32 bit_off, num_bits; @@ -4767,14 +4773,14 @@ int ocfs2_add_clusters_in_btree(handle_t *handle, * 2) we are so fragmented, we've needed to add metadata too * many times. */ if (!free_extents && !meta_ac) { - err = -1; + mlog(0, "we haven't reserved any metadata!\n"); status = -EAGAIN; reason = RESTART_META; goto leave; } else if ((!free_extents) && (ocfs2_alloc_context_bits_left(meta_ac) < ocfs2_extend_meta_needed(et->et_root_el))) { - err = -2; + mlog(0, "filesystem is really fragmented...\n"); status = -EAGAIN; reason = RESTART_META; goto leave; @@ -4799,9 +4805,9 @@ int ocfs2_add_clusters_in_btree(handle_t *handle, } block = ocfs2_clusters_to_blocks(osb->sb, bit_off); - trace_ocfs2_add_clusters_in_btree( - (unsigned long long)ocfs2_metadata_cache_owner(et->et_ci), - bit_off, num_bits); + mlog(0, "Allocating %u clusters at block %u for owner %llu\n", + num_bits, bit_off, + (unsigned long long)ocfs2_metadata_cache_owner(et->et_ci)); status = ocfs2_insert_extent(handle, et, *logical_offset, block, num_bits, flags, meta_ac); if (status < 0) { @@ -4815,15 +4821,16 @@ int ocfs2_add_clusters_in_btree(handle_t *handle, *logical_offset += num_bits; if (clusters_to_add) { - err = clusters_to_add; + mlog(0, "need to alloc once more, wanted = %u\n", + clusters_to_add); status = -EAGAIN; reason = RESTART_TRANS; } leave: + mlog_exit(status); if (reason_ret) *reason_ret = reason; - trace_ocfs2_add_clusters_in_btree_ret(status, reason, err); return status; } @@ -5032,7 +5039,7 @@ int ocfs2_split_extent(handle_t *handle, ocfs2_et_get_last_eb_blk(et), &last_eb_bh); if (ret) { - mlog_errno(ret); + mlog_exit(ret); goto out; } @@ -5049,9 +5056,9 @@ int ocfs2_split_extent(handle_t *handle, ctxt.c_has_empty_extent = ocfs2_is_empty_extent(&el->l_recs[0]); - trace_ocfs2_split_extent(split_index, ctxt.c_contig_type, - ctxt.c_has_empty_extent, - ctxt.c_split_covers_rec); + mlog(0, "index: %d, contig: %u, has_empty: %u, split_covers: %u\n", + split_index, ctxt.c_contig_type, ctxt.c_has_empty_extent, + ctxt.c_split_covers_rec); if (ctxt.c_contig_type == CONTIG_NONE) { if (ctxt.c_split_covers_rec) @@ -5185,9 +5192,8 @@ int ocfs2_mark_extent_written(struct inode *inode, { int ret; - trace_ocfs2_mark_extent_written( - (unsigned long long)OCFS2_I(inode)->ip_blkno, - cpos, len, phys); + mlog(0, "Inode %lu cpos %u, len %u, phys clusters %u\n", + inode->i_ino, cpos, len, phys); if (!ocfs2_writes_unwritten_extents(OCFS2_SB(inode->i_sb))) { ocfs2_error(inode->i_sb, "Inode %llu has unwritten extents " @@ -5506,10 +5512,11 @@ int ocfs2_remove_extent(handle_t *handle, BUG_ON(cpos < le32_to_cpu(rec->e_cpos) || trunc_range > rec_range); - trace_ocfs2_remove_extent( - (unsigned long long)ocfs2_metadata_cache_owner(et->et_ci), - cpos, len, index, le32_to_cpu(rec->e_cpos), - ocfs2_rec_clusters(el, rec)); + mlog(0, "Owner %llu, remove (cpos %u, len %u). Existing index %d " + "(cpos %u, len %u)\n", + (unsigned long long)ocfs2_metadata_cache_owner(et->et_ci), + cpos, len, index, + le32_to_cpu(rec->e_cpos), ocfs2_rec_clusters(el, rec)); if (le32_to_cpu(rec->e_cpos) == cpos || rec_range == trunc_range) { ret = ocfs2_truncate_rec(handle, et, path, index, dealloc, @@ -5788,6 +5795,9 @@ int ocfs2_truncate_log_append(struct ocfs2_super *osb, struct ocfs2_dinode *di; struct ocfs2_truncate_log *tl; + mlog_entry("start_blk = %llu, num_clusters = %u\n", + (unsigned long long)start_blk, num_clusters); + BUG_ON(mutex_trylock(&tl_inode->i_mutex)); start_cluster = ocfs2_blocks_to_clusters(osb->sb, start_blk); @@ -5824,9 +5834,10 @@ int ocfs2_truncate_log_append(struct ocfs2_super *osb, goto bail; } - trace_ocfs2_truncate_log_append( - (unsigned long long)OCFS2_I(tl_inode)->ip_blkno, index, - start_cluster, num_clusters); + mlog(0, "Log truncate of %u clusters starting at cluster %u to " + "%llu (index = %d)\n", num_clusters, start_cluster, + (unsigned long long)OCFS2_I(tl_inode)->ip_blkno, index); + if (ocfs2_truncate_log_can_coalesce(tl, start_cluster)) { /* * Move index back to the record we are coalescing with. @@ -5835,10 +5846,9 @@ int ocfs2_truncate_log_append(struct ocfs2_super *osb, index--; num_clusters += le32_to_cpu(tl->tl_recs[index].t_clusters); - trace_ocfs2_truncate_log_append( - (unsigned long long)OCFS2_I(tl_inode)->ip_blkno, - index, le32_to_cpu(tl->tl_recs[index].t_start), - num_clusters); + mlog(0, "Coalesce with index %u (start = %u, clusters = %u)\n", + index, le32_to_cpu(tl->tl_recs[index].t_start), + num_clusters); } else { tl->tl_recs[index].t_start = cpu_to_le32(start_cluster); tl->tl_used = cpu_to_le16(index + 1); @@ -5849,6 +5859,7 @@ int ocfs2_truncate_log_append(struct ocfs2_super *osb, osb->truncated_clusters += num_clusters; bail: + mlog_exit(status); return status; } @@ -5867,6 +5878,8 @@ static int ocfs2_replay_truncate_records(struct ocfs2_super *osb, struct inode *tl_inode = osb->osb_tl_inode; struct buffer_head *tl_bh = osb->osb_tl_bh; + mlog_entry_void(); + di = (struct ocfs2_dinode *) tl_bh->b_data; tl = &di->id2.i_dealloc; i = le16_to_cpu(tl->tl_used) - 1; @@ -5902,9 +5915,8 @@ static int ocfs2_replay_truncate_records(struct ocfs2_super *osb, /* if start_blk is not set, we ignore the record as * invalid. */ if (start_blk) { - trace_ocfs2_replay_truncate_records( - (unsigned long long)OCFS2_I(tl_inode)->ip_blkno, - i, le32_to_cpu(rec.t_start), num_clusters); + mlog(0, "free record %d, start = %u, clusters = %u\n", + i, le32_to_cpu(rec.t_start), num_clusters); status = ocfs2_free_clusters(handle, data_alloc_inode, data_alloc_bh, start_blk, @@ -5920,6 +5932,7 @@ static int ocfs2_replay_truncate_records(struct ocfs2_super *osb, osb->truncated_clusters = 0; bail: + mlog_exit(status); return status; } @@ -5936,6 +5949,8 @@ int __ocfs2_flush_truncate_log(struct ocfs2_super *osb) struct ocfs2_dinode *di; struct ocfs2_truncate_log *tl; + mlog_entry_void(); + BUG_ON(mutex_trylock(&tl_inode->i_mutex)); di = (struct ocfs2_dinode *) tl_bh->b_data; @@ -5947,9 +5962,8 @@ int __ocfs2_flush_truncate_log(struct ocfs2_super *osb) tl = &di->id2.i_dealloc; num_to_flush = le16_to_cpu(tl->tl_used); - trace_ocfs2_flush_truncate_log( - (unsigned long long)OCFS2_I(tl_inode)->ip_blkno, - num_to_flush); + mlog(0, "Flush %u records from truncate log #%llu\n", + num_to_flush, (unsigned long long)OCFS2_I(tl_inode)->ip_blkno); if (!num_to_flush) { status = 0; goto out; @@ -5995,6 +6009,7 @@ int __ocfs2_flush_truncate_log(struct ocfs2_super *osb) iput(data_alloc_inode); out: + mlog_exit(status); return status; } @@ -6017,11 +6032,15 @@ static void ocfs2_truncate_log_worker(struct work_struct *work) container_of(work, struct ocfs2_super, osb_truncate_log_wq.work); + mlog_entry_void(); + status = ocfs2_flush_truncate_log(osb); if (status < 0) mlog_errno(status); else ocfs2_init_steal_slots(osb); + + mlog_exit(status); } #define OCFS2_TRUNCATE_LOG_FLUSH_INTERVAL (2 * HZ) @@ -6067,6 +6086,7 @@ static int ocfs2_get_truncate_log_info(struct ocfs2_super *osb, *tl_inode = inode; *tl_bh = bh; bail: + mlog_exit(status); return status; } @@ -6086,7 +6106,7 @@ int ocfs2_begin_truncate_log_recovery(struct ocfs2_super *osb, *tl_copy = NULL; - trace_ocfs2_begin_truncate_log_recovery(slot_num); + mlog(0, "recover truncate log from slot %d\n", slot_num); status = ocfs2_get_truncate_log_info(osb, slot_num, &tl_inode, &tl_bh); if (status < 0) { @@ -6103,7 +6123,8 @@ int ocfs2_begin_truncate_log_recovery(struct ocfs2_super *osb, tl = &di->id2.i_dealloc; if (le16_to_cpu(tl->tl_used)) { - trace_ocfs2_truncate_log_recovery_num(le16_to_cpu(tl->tl_used)); + mlog(0, "We'll have %u logs to recover\n", + le16_to_cpu(tl->tl_used)); *tl_copy = kmalloc(tl_bh->b_size, GFP_KERNEL); if (!(*tl_copy)) { @@ -6136,9 +6157,9 @@ int ocfs2_begin_truncate_log_recovery(struct ocfs2_super *osb, if (status < 0 && (*tl_copy)) { kfree(*tl_copy); *tl_copy = NULL; - mlog_errno(status); } + mlog_exit(status); return status; } @@ -6153,6 +6174,8 @@ int ocfs2_complete_truncate_log_recovery(struct ocfs2_super *osb, struct inode *tl_inode = osb->osb_tl_inode; struct ocfs2_truncate_log *tl; + mlog_entry_void(); + if (OCFS2_I(tl_inode)->ip_blkno == le64_to_cpu(tl_copy->i_blkno)) { mlog(ML_ERROR, "Asked to recover my own truncate log!\n"); return -EINVAL; @@ -6160,9 +6183,8 @@ int ocfs2_complete_truncate_log_recovery(struct ocfs2_super *osb, tl = &tl_copy->id2.i_dealloc; num_recs = le16_to_cpu(tl->tl_used); - trace_ocfs2_complete_truncate_log_recovery( - (unsigned long long)le64_to_cpu(tl_copy->i_blkno), - num_recs); + mlog(0, "cleanup %u records from %llu\n", num_recs, + (unsigned long long)le64_to_cpu(tl_copy->i_blkno)); mutex_lock(&tl_inode->i_mutex); for(i = 0; i < num_recs; i++) { @@ -6197,6 +6219,7 @@ int ocfs2_complete_truncate_log_recovery(struct ocfs2_super *osb, bail_up: mutex_unlock(&tl_inode->i_mutex); + mlog_exit(status); return status; } @@ -6205,6 +6228,8 @@ void ocfs2_truncate_log_shutdown(struct ocfs2_super *osb) int status; struct inode *tl_inode = osb->osb_tl_inode; + mlog_entry_void(); + if (tl_inode) { cancel_delayed_work(&osb->osb_truncate_log_wq); flush_workqueue(ocfs2_wq); @@ -6216,6 +6241,8 @@ void ocfs2_truncate_log_shutdown(struct ocfs2_super *osb) brelse(osb->osb_tl_bh); iput(osb->osb_tl_inode); } + + mlog_exit_void(); } int ocfs2_truncate_log_init(struct ocfs2_super *osb) @@ -6224,6 +6251,8 @@ int ocfs2_truncate_log_init(struct ocfs2_super *osb) struct inode *tl_inode = NULL; struct buffer_head *tl_bh = NULL; + mlog_entry_void(); + status = ocfs2_get_truncate_log_info(osb, osb->slot_num, &tl_inode, @@ -6239,6 +6268,7 @@ int ocfs2_truncate_log_init(struct ocfs2_super *osb) osb->osb_tl_bh = tl_bh; osb->osb_tl_inode = tl_inode; + mlog_exit(status); return status; } @@ -6320,8 +6350,8 @@ static int ocfs2_free_cached_blocks(struct ocfs2_super *osb, else bg_blkno = ocfs2_which_suballoc_group(head->free_blk, head->free_bit); - trace_ocfs2_free_cached_blocks( - (unsigned long long)head->free_blk, head->free_bit); + mlog(0, "Free bit: (bit %u, blkno %llu)\n", + head->free_bit, (unsigned long long)head->free_blk); ret = ocfs2_free_suballoc_bits(handle, inode, di_bh, head->free_bit, bg_blkno, 1); @@ -6374,7 +6404,8 @@ int ocfs2_cache_cluster_dealloc(struct ocfs2_cached_dealloc_ctxt *ctxt, return ret; } - trace_ocfs2_cache_cluster_dealloc((unsigned long long)blkno, bit); + mlog(0, "Insert clusters: (bit %u, blk %llu)\n", + bit, (unsigned long long)blkno); item->free_blk = blkno; item->free_bit = bit; @@ -6449,8 +6480,8 @@ int ocfs2_run_deallocs(struct ocfs2_super *osb, fl = ctxt->c_first_suballocator; if (fl->f_first) { - trace_ocfs2_run_deallocs(fl->f_inode_type, - fl->f_slot); + mlog(0, "Free items: (type %u, slot %d)\n", + fl->f_inode_type, fl->f_slot); ret2 = ocfs2_free_cached_blocks(osb, fl->f_inode_type, fl->f_slot, @@ -6527,9 +6558,8 @@ int ocfs2_cache_block_dealloc(struct ocfs2_cached_dealloc_ctxt *ctxt, goto out; } - trace_ocfs2_cache_block_dealloc(type, slot, - (unsigned long long)suballoc, - (unsigned long long)blkno, bit); + mlog(0, "Insert: (type %d, slot %u, bit %u, blk %llu)\n", + type, slot, bit, (unsigned long long)blkno); item->free_bg = suballoc; item->free_blk = blkno; @@ -6975,6 +7005,8 @@ int ocfs2_commit_truncate(struct ocfs2_super *osb, struct ocfs2_extent_tree et; struct ocfs2_cached_dealloc_ctxt dealloc; + mlog_entry_void(); + ocfs2_init_dinode_extent_tree(&et, INODE_CACHE(inode), di_bh); ocfs2_init_dealloc_ctxt(&dealloc); @@ -7009,11 +7041,8 @@ int ocfs2_commit_truncate(struct ocfs2_super *osb, goto bail; } - trace_ocfs2_commit_truncate( - (unsigned long long)OCFS2_I(inode)->ip_blkno, - new_highest_cpos, - OCFS2_I(inode)->ip_clusters, - path->p_tree_depth); + mlog(0, "inode->ip_clusters = %u, tree_depth = %u\n", + OCFS2_I(inode)->ip_clusters, path->p_tree_depth); /* * By now, el will point to the extent list on the bottom most @@ -7107,6 +7136,7 @@ int ocfs2_commit_truncate(struct ocfs2_super *osb, ocfs2_free_path(path); + mlog_exit(status); return status; } diff --git a/trunk/fs/ocfs2/aops.c b/trunk/fs/ocfs2/aops.c index ac97bca282d2..daea0359e974 100644 --- a/trunk/fs/ocfs2/aops.c +++ b/trunk/fs/ocfs2/aops.c @@ -29,6 +29,7 @@ #include #include +#define MLOG_MASK_PREFIX ML_FILE_IO #include #include "ocfs2.h" @@ -44,7 +45,6 @@ #include "super.h" #include "symlink.h" #include "refcounttree.h" -#include "ocfs2_trace.h" #include "buffer_head_io.h" @@ -59,9 +59,8 @@ static int ocfs2_symlink_get_block(struct inode *inode, sector_t iblock, struct ocfs2_super *osb = OCFS2_SB(inode->i_sb); void *kaddr; - trace_ocfs2_symlink_get_block( - (unsigned long long)OCFS2_I(inode)->ip_blkno, - (unsigned long long)iblock, bh_result, create); + mlog_entry("(0x%p, %llu, 0x%p, %d)\n", inode, + (unsigned long long)iblock, bh_result, create); BUG_ON(ocfs2_inode_is_fast_symlink(inode)); @@ -124,6 +123,7 @@ static int ocfs2_symlink_get_block(struct inode *inode, sector_t iblock, bail: brelse(bh); + mlog_exit(err); return err; } @@ -136,8 +136,8 @@ int ocfs2_get_block(struct inode *inode, sector_t iblock, u64 p_blkno, count, past_eof; struct ocfs2_super *osb = OCFS2_SB(inode->i_sb); - trace_ocfs2_get_block((unsigned long long)OCFS2_I(inode)->ip_blkno, - (unsigned long long)iblock, bh_result, create); + mlog_entry("(0x%p, %llu, 0x%p, %d)\n", inode, + (unsigned long long)iblock, bh_result, create); if (OCFS2_I(inode)->ip_flags & OCFS2_INODE_SYSTEM_FILE) mlog(ML_NOTICE, "get_block on system inode 0x%p (%lu)\n", @@ -199,9 +199,8 @@ int ocfs2_get_block(struct inode *inode, sector_t iblock, } past_eof = ocfs2_blocks_for_bytes(inode->i_sb, i_size_read(inode)); - - trace_ocfs2_get_block_end((unsigned long long)OCFS2_I(inode)->ip_blkno, - (unsigned long long)past_eof); + mlog(0, "Inode %lu, past_eof = %llu\n", inode->i_ino, + (unsigned long long)past_eof); if (create && (iblock >= past_eof)) set_buffer_new(bh_result); @@ -209,6 +208,7 @@ int ocfs2_get_block(struct inode *inode, sector_t iblock, if (err < 0) err = -EIO; + mlog_exit(err); return err; } @@ -278,8 +278,7 @@ static int ocfs2_readpage(struct file *file, struct page *page) loff_t start = (loff_t)page->index << PAGE_CACHE_SHIFT; int ret, unlock = 1; - trace_ocfs2_readpage((unsigned long long)oi->ip_blkno, - (page ? page->index : 0)); + mlog_entry("(0x%p, %lu)\n", file, (page ? page->index : 0)); ret = ocfs2_inode_lock_with_page(inode, NULL, 0, page); if (ret != 0) { @@ -324,6 +323,7 @@ static int ocfs2_readpage(struct file *file, struct page *page) out: if (unlock) unlock_page(page); + mlog_exit(ret); return ret; } @@ -396,11 +396,15 @@ static int ocfs2_readpages(struct file *filp, struct address_space *mapping, */ static int ocfs2_writepage(struct page *page, struct writeback_control *wbc) { - trace_ocfs2_writepage( - (unsigned long long)OCFS2_I(page->mapping->host)->ip_blkno, - page->index); + int ret; + + mlog_entry("(0x%p)\n", page); + + ret = block_write_full_page(page, ocfs2_get_block, wbc); - return block_write_full_page(page, ocfs2_get_block, wbc); + mlog_exit(ret); + + return ret; } /* Taken from ext3. We don't necessarily need the full blown @@ -446,8 +450,7 @@ static sector_t ocfs2_bmap(struct address_space *mapping, sector_t block) int err = 0; struct inode *inode = mapping->host; - trace_ocfs2_bmap((unsigned long long)OCFS2_I(inode)->ip_blkno, - (unsigned long long)block); + mlog_entry("(block = %llu)\n", (unsigned long long)block); /* We don't need to lock journal system files, since they aren't * accessed concurrently from multiple nodes. @@ -481,6 +484,8 @@ static sector_t ocfs2_bmap(struct address_space *mapping, sector_t block) bail: status = err ? 0 : p_blkno; + mlog_exit((int)status); + return status; } @@ -611,6 +616,9 @@ static ssize_t ocfs2_direct_IO(int rw, { struct file *file = iocb->ki_filp; struct inode *inode = file->f_path.dentry->d_inode->i_mapping->host; + int ret; + + mlog_entry_void(); /* * Fallback to buffered I/O if we see an inode without @@ -623,10 +631,13 @@ static ssize_t ocfs2_direct_IO(int rw, if (i_size_read(inode) <= offset) return 0; - return __blockdev_direct_IO(rw, iocb, inode, inode->i_sb->s_bdev, - iov, offset, nr_segs, - ocfs2_direct_IO_get_blocks, - ocfs2_dio_end_io, NULL, 0); + ret = __blockdev_direct_IO(rw, iocb, inode, inode->i_sb->s_bdev, + iov, offset, nr_segs, + ocfs2_direct_IO_get_blocks, + ocfs2_dio_end_io, NULL, 0); + + mlog_exit(ret); + return ret; } static void ocfs2_figure_cluster_boundaries(struct ocfs2_super *osb, @@ -1015,12 +1026,6 @@ static int ocfs2_prepare_page_for_write(struct inode *inode, u64 *p_blkno, ocfs2_figure_cluster_boundaries(OCFS2_SB(inode->i_sb), cpos, &cluster_start, &cluster_end); - /* treat the write as new if the a hole/lseek spanned across - * the page boundary. - */ - new = new | ((i_size_read(inode) <= page_offset(page)) && - (page_offset(page) <= user_pos)); - if (page == wc->w_target_page) { map_from = user_pos & (PAGE_CACHE_SIZE - 1); map_to = map_from + user_len; @@ -1529,9 +1534,9 @@ static int ocfs2_try_to_write_inline_data(struct address_space *mapping, struct ocfs2_inode_info *oi = OCFS2_I(inode); struct ocfs2_dinode *di = NULL; - trace_ocfs2_try_to_write_inline_data((unsigned long long)oi->ip_blkno, - len, (unsigned long long)pos, - oi->ip_dyn_features); + mlog(0, "Inode %llu, write of %u bytes at off %llu. features: 0x%x\n", + (unsigned long long)oi->ip_blkno, len, (unsigned long long)pos, + oi->ip_dyn_features); /* * Handle inodes which already have inline data 1st. @@ -1734,13 +1739,6 @@ int ocfs2_write_begin_nolock(struct file *filp, di = (struct ocfs2_dinode *)wc->w_di_bh->b_data; - trace_ocfs2_write_begin_nolock( - (unsigned long long)OCFS2_I(inode)->ip_blkno, - (long long)i_size_read(inode), - le32_to_cpu(di->i_clusters), - pos, len, flags, mmap_page, - clusters_to_alloc, extents_to_split); - /* * We set w_target_from, w_target_to here so that * ocfs2_write_end() knows which range in the target page to @@ -1753,6 +1751,12 @@ int ocfs2_write_begin_nolock(struct file *filp, * ocfs2_lock_allocators(). It greatly over-estimates * the work to be done. */ + mlog(0, "extend inode %llu, i_size = %lld, di->i_clusters = %u," + " clusters_to_add = %u, extents_to_split = %u\n", + (unsigned long long)OCFS2_I(inode)->ip_blkno, + (long long)i_size_read(inode), le32_to_cpu(di->i_clusters), + clusters_to_alloc, extents_to_split); + ocfs2_init_dinode_extent_tree(&et, INODE_CACHE(inode), wc->w_di_bh); ret = ocfs2_lock_allocators(inode, &et, @@ -1934,8 +1938,8 @@ static void ocfs2_write_end_inline(struct inode *inode, loff_t pos, memcpy(di->id2.i_data.id_data + pos, kaddr + pos, *copied); kunmap_atomic(kaddr, KM_USER0); - trace_ocfs2_write_end_inline( - (unsigned long long)OCFS2_I(inode)->ip_blkno, + mlog(0, "Data written to inode at offset %llu. " + "id_count = %u, copied = %u, i_dyn_features = 0x%x\n", (unsigned long long)pos, *copied, le16_to_cpu(di->id2.i_data.id_count), le16_to_cpu(di->i_dyn_features)); diff --git a/trunk/fs/ocfs2/buffer_head_io.c b/trunk/fs/ocfs2/buffer_head_io.c index 5d18ad10c27f..f9d5d3ffc75a 100644 --- a/trunk/fs/ocfs2/buffer_head_io.c +++ b/trunk/fs/ocfs2/buffer_head_io.c @@ -35,8 +35,8 @@ #include "inode.h" #include "journal.h" #include "uptodate.h" + #include "buffer_head_io.h" -#include "ocfs2_trace.h" /* * Bits on bh->b_state used by ocfs2. @@ -55,7 +55,8 @@ int ocfs2_write_block(struct ocfs2_super *osb, struct buffer_head *bh, { int ret = 0; - trace_ocfs2_write_block((unsigned long long)bh->b_blocknr, ci); + mlog_entry("(bh->b_blocknr = %llu, ci=%p)\n", + (unsigned long long)bh->b_blocknr, ci); BUG_ON(bh->b_blocknr < OCFS2_SUPER_BLOCK_BLKNO); BUG_ON(buffer_jbd(bh)); @@ -65,7 +66,6 @@ int ocfs2_write_block(struct ocfs2_super *osb, struct buffer_head *bh, * can get modified during recovery even if read-only. */ if (ocfs2_is_hard_readonly(osb)) { ret = -EROFS; - mlog_errno(ret); goto out; } @@ -91,11 +91,11 @@ int ocfs2_write_block(struct ocfs2_super *osb, struct buffer_head *bh, * uptodate. */ ret = -EIO; put_bh(bh); - mlog_errno(ret); } ocfs2_metadata_cache_io_unlock(ci); out: + mlog_exit(ret); return ret; } @@ -106,10 +106,10 @@ int ocfs2_read_blocks_sync(struct ocfs2_super *osb, u64 block, unsigned int i; struct buffer_head *bh; - trace_ocfs2_read_blocks_sync((unsigned long long)block, nr); - - if (!nr) + if (!nr) { + mlog(ML_BH_IO, "No buffers will be read!\n"); goto bail; + } for (i = 0 ; i < nr ; i++) { if (bhs[i] == NULL) { @@ -123,8 +123,10 @@ int ocfs2_read_blocks_sync(struct ocfs2_super *osb, u64 block, bh = bhs[i]; if (buffer_jbd(bh)) { - trace_ocfs2_read_blocks_sync_jbd( - (unsigned long long)bh->b_blocknr); + mlog(ML_BH_IO, + "trying to sync read a jbd " + "managed bh (blocknr = %llu), skipping\n", + (unsigned long long)bh->b_blocknr); continue; } @@ -184,7 +186,8 @@ int ocfs2_read_blocks(struct ocfs2_caching_info *ci, u64 block, int nr, struct buffer_head *bh; struct super_block *sb = ocfs2_metadata_cache_get_super(ci); - trace_ocfs2_read_blocks_begin(ci, (unsigned long long)block, nr, flags); + mlog_entry("(ci=%p, block=(%llu), nr=(%d), flags=%d)\n", + ci, (unsigned long long)block, nr, flags); BUG_ON(!ci); BUG_ON((flags & OCFS2_BH_READAHEAD) && @@ -204,6 +207,7 @@ int ocfs2_read_blocks(struct ocfs2_caching_info *ci, u64 block, int nr, } if (nr == 0) { + mlog(ML_BH_IO, "No buffers will be read!\n"); status = 0; goto bail; } @@ -247,7 +251,8 @@ int ocfs2_read_blocks(struct ocfs2_caching_info *ci, u64 block, int nr, */ if (!ignore_cache && !ocfs2_buffer_uptodate(ci, bh)) { - trace_ocfs2_read_blocks_from_disk( + mlog(ML_UPTODATE, + "bh (%llu), owner %llu not uptodate\n", (unsigned long long)bh->b_blocknr, (unsigned long long)ocfs2_metadata_cache_owner(ci)); /* We're using ignore_cache here to say @@ -255,10 +260,11 @@ int ocfs2_read_blocks(struct ocfs2_caching_info *ci, u64 block, int nr, ignore_cache = 1; } - trace_ocfs2_read_blocks_bh((unsigned long long)bh->b_blocknr, - ignore_cache, buffer_jbd(bh), buffer_dirty(bh)); - if (buffer_jbd(bh)) { + if (ignore_cache) + mlog(ML_BH_IO, "trying to sync read a jbd " + "managed bh (blocknr = %llu)\n", + (unsigned long long)bh->b_blocknr); continue; } @@ -266,6 +272,9 @@ int ocfs2_read_blocks(struct ocfs2_caching_info *ci, u64 block, int nr, if (buffer_dirty(bh)) { /* This should probably be a BUG, or * at least return an error. */ + mlog(ML_BH_IO, "asking me to sync read a dirty " + "buffer! (blocknr = %llu)\n", + (unsigned long long)bh->b_blocknr); continue; } @@ -358,11 +367,14 @@ int ocfs2_read_blocks(struct ocfs2_caching_info *ci, u64 block, int nr, } ocfs2_metadata_cache_io_unlock(ci); - trace_ocfs2_read_blocks_end((unsigned long long)block, nr, - flags, ignore_cache); + mlog(ML_BH_IO, "block=(%llu), nr=(%d), cached=%s, flags=0x%x\n", + (unsigned long long)block, nr, + ((flags & OCFS2_BH_IGNORE_CACHE) || ignore_cache) ? "no" : "yes", + flags); bail: + mlog_exit(status); return status; } @@ -396,12 +408,13 @@ int ocfs2_write_super_or_backup(struct ocfs2_super *osb, int ret = 0; struct ocfs2_dinode *di = (struct ocfs2_dinode *)bh->b_data; + mlog_entry_void(); + BUG_ON(buffer_jbd(bh)); ocfs2_check_super_or_backup(osb->sb, bh->b_blocknr); if (ocfs2_is_hard_readonly(osb) || ocfs2_is_soft_readonly(osb)) { ret = -EROFS; - mlog_errno(ret); goto out; } @@ -421,9 +434,9 @@ int ocfs2_write_super_or_backup(struct ocfs2_super *osb, if (!buffer_uptodate(bh)) { ret = -EIO; put_bh(bh); - mlog_errno(ret); } out: + mlog_exit(ret); return ret; } diff --git a/trunk/fs/ocfs2/cluster/heartbeat.c b/trunk/fs/ocfs2/cluster/heartbeat.c index 2461eb3272ed..1adab287bd24 100644 --- a/trunk/fs/ocfs2/cluster/heartbeat.c +++ b/trunk/fs/ocfs2/cluster/heartbeat.c @@ -1654,6 +1654,8 @@ static int o2hb_populate_slot_data(struct o2hb_region *reg) struct o2hb_disk_slot *slot; struct o2hb_disk_heartbeat_block *hb_block; + mlog_entry_void(); + ret = o2hb_read_slots(reg, reg->hr_blocks); if (ret) { mlog_errno(ret); @@ -1675,6 +1677,7 @@ static int o2hb_populate_slot_data(struct o2hb_region *reg) } out: + mlog_exit(ret); return ret; } diff --git a/trunk/fs/ocfs2/cluster/masklog.c b/trunk/fs/ocfs2/cluster/masklog.c index 07ac24fd9252..6c61771469af 100644 --- a/trunk/fs/ocfs2/cluster/masklog.c +++ b/trunk/fs/ocfs2/cluster/masklog.c @@ -30,7 +30,7 @@ struct mlog_bits mlog_and_bits = MLOG_BITS_RHS(MLOG_INITIAL_AND_MASK); EXPORT_SYMBOL_GPL(mlog_and_bits); -struct mlog_bits mlog_not_bits = MLOG_BITS_RHS(0); +struct mlog_bits mlog_not_bits = MLOG_BITS_RHS(MLOG_INITIAL_NOT_MASK); EXPORT_SYMBOL_GPL(mlog_not_bits); static ssize_t mlog_mask_show(u64 mask, char *buf) @@ -80,6 +80,8 @@ struct mlog_attribute { } static struct mlog_attribute mlog_attrs[MLOG_MAX_BITS] = { + define_mask(ENTRY), + define_mask(EXIT), define_mask(TCP), define_mask(MSG), define_mask(SOCKET), @@ -91,11 +93,27 @@ static struct mlog_attribute mlog_attrs[MLOG_MAX_BITS] = { define_mask(DLM_THREAD), define_mask(DLM_MASTER), define_mask(DLM_RECOVERY), + define_mask(AIO), + define_mask(JOURNAL), + define_mask(DISK_ALLOC), + define_mask(SUPER), + define_mask(FILE_IO), + define_mask(EXTENT_MAP), define_mask(DLM_GLUE), + define_mask(BH_IO), + define_mask(UPTODATE), + define_mask(NAMEI), + define_mask(INODE), define_mask(VOTE), + define_mask(DCACHE), define_mask(CONN), define_mask(QUORUM), + define_mask(EXPORT), + define_mask(XATTR), + define_mask(QUOTA), + define_mask(REFCOUNT), define_mask(BASTS), + define_mask(RESERVATIONS), define_mask(CLUSTER), define_mask(ERROR), define_mask(NOTICE), diff --git a/trunk/fs/ocfs2/cluster/masklog.h b/trunk/fs/ocfs2/cluster/masklog.h index baa2b9ef7eef..34d6544357d9 100644 --- a/trunk/fs/ocfs2/cluster/masklog.h +++ b/trunk/fs/ocfs2/cluster/masklog.h @@ -82,23 +82,41 @@ /* bits that are frequently given and infrequently matched in the low word */ /* NOTE: If you add a flag, you need to also update masklog.c! */ -#define ML_TCP 0x0000000000000001ULL /* net cluster/tcp.c */ -#define ML_MSG 0x0000000000000002ULL /* net network messages */ -#define ML_SOCKET 0x0000000000000004ULL /* net socket lifetime */ -#define ML_HEARTBEAT 0x0000000000000008ULL /* hb all heartbeat tracking */ -#define ML_HB_BIO 0x0000000000000010ULL /* hb io tracing */ -#define ML_DLMFS 0x0000000000000020ULL /* dlm user dlmfs */ -#define ML_DLM 0x0000000000000040ULL /* dlm general debugging */ -#define ML_DLM_DOMAIN 0x0000000000000080ULL /* dlm domain debugging */ -#define ML_DLM_THREAD 0x0000000000000100ULL /* dlm domain thread */ -#define ML_DLM_MASTER 0x0000000000000200ULL /* dlm master functions */ -#define ML_DLM_RECOVERY 0x0000000000000400ULL /* dlm master functions */ -#define ML_DLM_GLUE 0x0000000000000800ULL /* ocfs2 dlm glue layer */ -#define ML_VOTE 0x0000000000001000ULL /* ocfs2 node messaging */ -#define ML_CONN 0x0000000000002000ULL /* net connection management */ -#define ML_QUORUM 0x0000000000004000ULL /* net connection quorum */ -#define ML_BASTS 0x0000000000008000ULL /* dlmglue asts and basts */ -#define ML_CLUSTER 0x0000000000010000ULL /* cluster stack */ +#define ML_ENTRY 0x0000000000000001ULL /* func call entry */ +#define ML_EXIT 0x0000000000000002ULL /* func call exit */ +#define ML_TCP 0x0000000000000004ULL /* net cluster/tcp.c */ +#define ML_MSG 0x0000000000000008ULL /* net network messages */ +#define ML_SOCKET 0x0000000000000010ULL /* net socket lifetime */ +#define ML_HEARTBEAT 0x0000000000000020ULL /* hb all heartbeat tracking */ +#define ML_HB_BIO 0x0000000000000040ULL /* hb io tracing */ +#define ML_DLMFS 0x0000000000000080ULL /* dlm user dlmfs */ +#define ML_DLM 0x0000000000000100ULL /* dlm general debugging */ +#define ML_DLM_DOMAIN 0x0000000000000200ULL /* dlm domain debugging */ +#define ML_DLM_THREAD 0x0000000000000400ULL /* dlm domain thread */ +#define ML_DLM_MASTER 0x0000000000000800ULL /* dlm master functions */ +#define ML_DLM_RECOVERY 0x0000000000001000ULL /* dlm master functions */ +#define ML_AIO 0x0000000000002000ULL /* ocfs2 aio read and write */ +#define ML_JOURNAL 0x0000000000004000ULL /* ocfs2 journalling functions */ +#define ML_DISK_ALLOC 0x0000000000008000ULL /* ocfs2 disk allocation */ +#define ML_SUPER 0x0000000000010000ULL /* ocfs2 mount / umount */ +#define ML_FILE_IO 0x0000000000020000ULL /* ocfs2 file I/O */ +#define ML_EXTENT_MAP 0x0000000000040000ULL /* ocfs2 extent map caching */ +#define ML_DLM_GLUE 0x0000000000080000ULL /* ocfs2 dlm glue layer */ +#define ML_BH_IO 0x0000000000100000ULL /* ocfs2 buffer I/O */ +#define ML_UPTODATE 0x0000000000200000ULL /* ocfs2 caching sequence #'s */ +#define ML_NAMEI 0x0000000000400000ULL /* ocfs2 directory / namespace */ +#define ML_INODE 0x0000000000800000ULL /* ocfs2 inode manipulation */ +#define ML_VOTE 0x0000000001000000ULL /* ocfs2 node messaging */ +#define ML_DCACHE 0x0000000002000000ULL /* ocfs2 dcache operations */ +#define ML_CONN 0x0000000004000000ULL /* net connection management */ +#define ML_QUORUM 0x0000000008000000ULL /* net connection quorum */ +#define ML_EXPORT 0x0000000010000000ULL /* ocfs2 export operations */ +#define ML_XATTR 0x0000000020000000ULL /* ocfs2 extended attributes */ +#define ML_QUOTA 0x0000000040000000ULL /* ocfs2 quota operations */ +#define ML_REFCOUNT 0x0000000080000000ULL /* refcount tree operations */ +#define ML_BASTS 0x0000000100000000ULL /* dlmglue asts and basts */ +#define ML_RESERVATIONS 0x0000000200000000ULL /* ocfs2 alloc reservations */ +#define ML_CLUSTER 0x0000000400000000ULL /* cluster stack */ /* bits that are infrequently given and frequently matched in the high word */ #define ML_ERROR 0x1000000000000000ULL /* sent to KERN_ERR */ @@ -106,6 +124,7 @@ #define ML_KTHREAD 0x4000000000000000ULL /* kernel thread activity */ #define MLOG_INITIAL_AND_MASK (ML_ERROR|ML_NOTICE) +#define MLOG_INITIAL_NOT_MASK (ML_ENTRY|ML_EXIT) #ifndef MLOG_MASK_PREFIX #define MLOG_MASK_PREFIX 0 #endif @@ -203,6 +222,58 @@ extern struct mlog_bits mlog_and_bits, mlog_not_bits; mlog(ML_ERROR, "status = %lld\n", (long long)_st); \ } while (0) +#if defined(CONFIG_OCFS2_DEBUG_MASKLOG) +#define mlog_entry(fmt, args...) do { \ + mlog(ML_ENTRY, "ENTRY:" fmt , ##args); \ +} while (0) + +#define mlog_entry_void() do { \ + mlog(ML_ENTRY, "ENTRY:\n"); \ +} while (0) + +/* + * We disable this for sparse. + */ +#if !defined(__CHECKER__) +#define mlog_exit(st) do { \ + if (__builtin_types_compatible_p(typeof(st), unsigned long)) \ + mlog(ML_EXIT, "EXIT: %lu\n", (unsigned long) (st)); \ + else if (__builtin_types_compatible_p(typeof(st), signed long)) \ + mlog(ML_EXIT, "EXIT: %ld\n", (signed long) (st)); \ + else if (__builtin_types_compatible_p(typeof(st), unsigned int) \ + || __builtin_types_compatible_p(typeof(st), unsigned short) \ + || __builtin_types_compatible_p(typeof(st), unsigned char)) \ + mlog(ML_EXIT, "EXIT: %u\n", (unsigned int) (st)); \ + else if (__builtin_types_compatible_p(typeof(st), signed int) \ + || __builtin_types_compatible_p(typeof(st), signed short) \ + || __builtin_types_compatible_p(typeof(st), signed char)) \ + mlog(ML_EXIT, "EXIT: %d\n", (signed int) (st)); \ + else if (__builtin_types_compatible_p(typeof(st), long long)) \ + mlog(ML_EXIT, "EXIT: %lld\n", (long long) (st)); \ + else \ + mlog(ML_EXIT, "EXIT: %llu\n", (unsigned long long) (st)); \ +} while (0) +#else +#define mlog_exit(st) do { \ + mlog(ML_EXIT, "EXIT: %lld\n", (long long) (st)); \ +} while (0) +#endif + +#define mlog_exit_ptr(ptr) do { \ + mlog(ML_EXIT, "EXIT: %p\n", ptr); \ +} while (0) + +#define mlog_exit_void() do { \ + mlog(ML_EXIT, "EXIT\n"); \ +} while (0) +#else +#define mlog_entry(...) do { } while (0) +#define mlog_entry_void(...) do { } while (0) +#define mlog_exit(...) do { } while (0) +#define mlog_exit_ptr(...) do { } while (0) +#define mlog_exit_void(...) do { } while (0) +#endif /* defined(CONFIG_OCFS2_DEBUG_MASKLOG) */ + #define mlog_bug_on_msg(cond, fmt, args...) do { \ if (cond) { \ mlog(ML_ERROR, "bug expression: " #cond "\n"); \ diff --git a/trunk/fs/ocfs2/cluster/tcp.c b/trunk/fs/ocfs2/cluster/tcp.c index ee04ff5ee603..3b11cb1e38fc 100644 --- a/trunk/fs/ocfs2/cluster/tcp.c +++ b/trunk/fs/ocfs2/cluster/tcp.c @@ -210,6 +210,10 @@ static inline void o2net_set_func_stop_time(struct o2net_sock_container *sc) sc->sc_tv_func_stop = ktime_get(); } +static ktime_t o2net_get_func_run_time(struct o2net_sock_container *sc) +{ + return ktime_sub(sc->sc_tv_func_stop, sc->sc_tv_func_start); +} #else /* CONFIG_DEBUG_FS */ # define o2net_init_nst(a, b, c, d, e) # define o2net_set_nst_sock_time(a) @@ -223,14 +227,10 @@ static inline void o2net_set_func_stop_time(struct o2net_sock_container *sc) # define o2net_set_advance_stop_time(a) # define o2net_set_func_start_time(a) # define o2net_set_func_stop_time(a) +# define o2net_get_func_run_time(a) (ktime_t)0 #endif /* CONFIG_DEBUG_FS */ #ifdef CONFIG_OCFS2_FS_STATS -static ktime_t o2net_get_func_run_time(struct o2net_sock_container *sc) -{ - return ktime_sub(sc->sc_tv_func_stop, sc->sc_tv_func_start); -} - static void o2net_update_send_stats(struct o2net_send_tracking *nst, struct o2net_sock_container *sc) { diff --git a/trunk/fs/ocfs2/dcache.c b/trunk/fs/ocfs2/dcache.c index e5ba34818332..7eb90403fc8a 100644 --- a/trunk/fs/ocfs2/dcache.c +++ b/trunk/fs/ocfs2/dcache.c @@ -28,6 +28,7 @@ #include #include +#define MLOG_MASK_PREFIX ML_DCACHE #include #include "ocfs2.h" @@ -38,7 +39,6 @@ #include "file.h" #include "inode.h" #include "super.h" -#include "ocfs2_trace.h" void ocfs2_dentry_attach_gen(struct dentry *dentry) { @@ -62,8 +62,8 @@ static int ocfs2_dentry_revalidate(struct dentry *dentry, inode = dentry->d_inode; osb = OCFS2_SB(dentry->d_sb); - trace_ocfs2_dentry_revalidate(dentry, dentry->d_name.len, - dentry->d_name.name); + mlog_entry("(0x%p, '%.*s')\n", dentry, + dentry->d_name.len, dentry->d_name.name); /* For a negative dentry - * check the generation number of the parent and compare with the @@ -73,10 +73,9 @@ static int ocfs2_dentry_revalidate(struct dentry *dentry, unsigned long gen = (unsigned long) dentry->d_fsdata; unsigned long pgen = OCFS2_I(dentry->d_parent->d_inode)->ip_dir_lock_gen; - - trace_ocfs2_dentry_revalidate_negative(dentry->d_name.len, - dentry->d_name.name, - pgen, gen); + mlog(0, "negative dentry: %.*s parent gen: %lu " + "dentry gen: %lu\n", + dentry->d_name.len, dentry->d_name.name, pgen, gen); if (gen != pgen) goto bail; goto valid; @@ -91,8 +90,8 @@ static int ocfs2_dentry_revalidate(struct dentry *dentry, /* did we or someone else delete this inode? */ if (OCFS2_I(inode)->ip_flags & OCFS2_INODE_DELETED) { spin_unlock(&OCFS2_I(inode)->ip_lock); - trace_ocfs2_dentry_revalidate_delete( - (unsigned long long)OCFS2_I(inode)->ip_blkno); + mlog(0, "inode (%llu) deleted, returning false\n", + (unsigned long long)OCFS2_I(inode)->ip_blkno); goto bail; } spin_unlock(&OCFS2_I(inode)->ip_lock); @@ -102,9 +101,10 @@ static int ocfs2_dentry_revalidate(struct dentry *dentry, * inode nlink hits zero, it never goes back. */ if (inode->i_nlink == 0) { - trace_ocfs2_dentry_revalidate_orphaned( - (unsigned long long)OCFS2_I(inode)->ip_blkno, - S_ISDIR(inode->i_mode)); + mlog(0, "Inode %llu orphaned, returning false " + "dir = %d\n", + (unsigned long long)OCFS2_I(inode)->ip_blkno, + S_ISDIR(inode->i_mode)); goto bail; } @@ -113,8 +113,9 @@ static int ocfs2_dentry_revalidate(struct dentry *dentry, * redo it. */ if (!dentry->d_fsdata) { - trace_ocfs2_dentry_revalidate_nofsdata( - (unsigned long long)OCFS2_I(inode)->ip_blkno); + mlog(0, "Inode %llu doesn't have dentry lock, " + "returning false\n", + (unsigned long long)OCFS2_I(inode)->ip_blkno); goto bail; } @@ -122,7 +123,8 @@ static int ocfs2_dentry_revalidate(struct dentry *dentry, ret = 1; bail: - trace_ocfs2_dentry_revalidate_ret(ret); + mlog_exit(ret); + return ret; } @@ -179,8 +181,8 @@ struct dentry *ocfs2_find_local_alias(struct inode *inode, spin_lock(&dentry->d_lock); if (ocfs2_match_dentry(dentry, parent_blkno, skip_unhashed)) { - trace_ocfs2_find_local_alias(dentry->d_name.len, - dentry->d_name.name); + mlog(0, "dentry found: %.*s\n", + dentry->d_name.len, dentry->d_name.name); dget_dlock(dentry); spin_unlock(&dentry->d_lock); @@ -238,8 +240,9 @@ int ocfs2_dentry_attach_lock(struct dentry *dentry, struct dentry *alias; struct ocfs2_dentry_lock *dl = dentry->d_fsdata; - trace_ocfs2_dentry_attach_lock(dentry->d_name.len, dentry->d_name.name, - (unsigned long long)parent_blkno, dl); + mlog(0, "Attach \"%.*s\", parent %llu, fsdata: %p\n", + dentry->d_name.len, dentry->d_name.name, + (unsigned long long)parent_blkno, dl); /* * Negative dentry. We ignore these for now. @@ -289,9 +292,7 @@ int ocfs2_dentry_attach_lock(struct dentry *dentry, (unsigned long long)parent_blkno, (unsigned long long)dl->dl_parent_blkno); - trace_ocfs2_dentry_attach_lock_found(dl->dl_lockres.l_name, - (unsigned long long)parent_blkno, - (unsigned long long)OCFS2_I(inode)->ip_blkno); + mlog(0, "Found: %s\n", dl->dl_lockres.l_name); goto out_attach; } diff --git a/trunk/fs/ocfs2/dir.c b/trunk/fs/ocfs2/dir.c index 9fe5b8fd658f..f97b6f1c61dd 100644 --- a/trunk/fs/ocfs2/dir.c +++ b/trunk/fs/ocfs2/dir.c @@ -43,6 +43,7 @@ #include #include +#define MLOG_MASK_PREFIX ML_NAMEI #include #include "ocfs2.h" @@ -60,7 +61,6 @@ #include "super.h" #include "sysfile.h" #include "uptodate.h" -#include "ocfs2_trace.h" #include "buffer_head_io.h" @@ -322,23 +322,21 @@ static int ocfs2_check_dir_entry(struct inode * dir, const char *error_msg = NULL; const int rlen = le16_to_cpu(de->rec_len); - if (unlikely(rlen < OCFS2_DIR_REC_LEN(1))) + if (rlen < OCFS2_DIR_REC_LEN(1)) error_msg = "rec_len is smaller than minimal"; - else if (unlikely(rlen % 4 != 0)) + else if (rlen % 4 != 0) error_msg = "rec_len % 4 != 0"; - else if (unlikely(rlen < OCFS2_DIR_REC_LEN(de->name_len))) + else if (rlen < OCFS2_DIR_REC_LEN(de->name_len)) error_msg = "rec_len is too small for name_len"; - else if (unlikely( - ((char *) de - bh->b_data) + rlen > dir->i_sb->s_blocksize)) + else if (((char *) de - bh->b_data) + rlen > dir->i_sb->s_blocksize) error_msg = "directory entry across blocks"; - if (unlikely(error_msg != NULL)) + if (error_msg != NULL) mlog(ML_ERROR, "bad entry in directory #%llu: %s - " "offset=%lu, inode=%llu, rec_len=%d, name_len=%d\n", (unsigned long long)OCFS2_I(dir)->ip_blkno, error_msg, offset, (unsigned long long)le64_to_cpu(de->inode), rlen, de->name_len); - return error_msg == NULL ? 1 : 0; } @@ -369,6 +367,8 @@ static inline int ocfs2_search_dirblock(struct buffer_head *bh, int de_len; int ret = 0; + mlog_entry_void(); + de_buf = first_de; dlimit = de_buf + bytes; @@ -402,7 +402,7 @@ static inline int ocfs2_search_dirblock(struct buffer_head *bh, } bail: - trace_ocfs2_search_dirblock(ret); + mlog_exit(ret); return ret; } @@ -447,7 +447,8 @@ static int ocfs2_validate_dir_block(struct super_block *sb, * We don't validate dirents here, that's handled * in-place when the code walks them. */ - trace_ocfs2_validate_dir_block((unsigned long long)bh->b_blocknr); + mlog(0, "Validating dirblock %llu\n", + (unsigned long long)bh->b_blocknr); BUG_ON(!buffer_uptodate(bh)); @@ -705,6 +706,8 @@ static struct buffer_head *ocfs2_find_entry_el(const char *name, int namelen, int num = 0; int nblocks, i, err; + mlog_entry_void(); + sb = dir->i_sb; nblocks = i_size_read(dir) >> sb->s_blocksize_bits; @@ -785,7 +788,7 @@ static struct buffer_head *ocfs2_find_entry_el(const char *name, int namelen, for (; ra_ptr < ra_max; ra_ptr++) brelse(bh_use[ra_ptr]); - trace_ocfs2_find_entry_el(ret); + mlog_exit_ptr(ret); return ret; } @@ -947,9 +950,11 @@ static int ocfs2_dx_dir_search(const char *name, int namelen, goto out; } - trace_ocfs2_dx_dir_search((unsigned long long)OCFS2_I(dir)->ip_blkno, - namelen, name, hinfo->major_hash, - hinfo->minor_hash, (unsigned long long)phys); + mlog(0, "Dir %llu: name: \"%.*s\", lookup of hash: %u.0x%x " + "returns: %llu\n", + (unsigned long long)OCFS2_I(dir)->ip_blkno, + namelen, name, hinfo->major_hash, hinfo->minor_hash, + (unsigned long long)phys); ret = ocfs2_read_dx_leaf(dir, phys, &dx_leaf_bh); if (ret) { @@ -959,9 +964,9 @@ static int ocfs2_dx_dir_search(const char *name, int namelen, dx_leaf = (struct ocfs2_dx_leaf *) dx_leaf_bh->b_data; - trace_ocfs2_dx_dir_search_leaf_info( - le16_to_cpu(dx_leaf->dl_list.de_num_used), - le16_to_cpu(dx_leaf->dl_list.de_count)); + mlog(0, "leaf info: num_used: %d, count: %d\n", + le16_to_cpu(dx_leaf->dl_list.de_num_used), + le16_to_cpu(dx_leaf->dl_list.de_count)); entry_list = &dx_leaf->dl_list; @@ -1161,6 +1166,8 @@ static int __ocfs2_delete_entry(handle_t *handle, struct inode *dir, int i, status = -ENOENT; ocfs2_journal_access_func access = ocfs2_journal_access_db; + mlog_entry("(0x%p, 0x%p, 0x%p, 0x%p)\n", handle, dir, de_del, bh); + if (OCFS2_I(dir)->ip_dyn_features & OCFS2_INLINE_DATA_FL) access = ocfs2_journal_access_di; @@ -1195,6 +1202,7 @@ static int __ocfs2_delete_entry(handle_t *handle, struct inode *dir, de = (struct ocfs2_dir_entry *)((char *)de + le16_to_cpu(de->rec_len)); } bail: + mlog_exit(status); return status; } @@ -1340,8 +1348,8 @@ static int ocfs2_delete_entry_dx(handle_t *handle, struct inode *dir, } } - trace_ocfs2_delete_entry_dx((unsigned long long)OCFS2_I(dir)->ip_blkno, - index); + mlog(0, "Dir %llu: delete entry at index: %d\n", + (unsigned long long)OCFS2_I(dir)->ip_blkno, index); ret = __ocfs2_delete_entry(handle, dir, lookup->dl_entry, leaf_bh, leaf_bh->b_data, leaf_bh->b_size); @@ -1624,6 +1632,8 @@ int __ocfs2_add_entry(handle_t *handle, struct buffer_head *insert_bh = lookup->dl_leaf_bh; char *data_start = insert_bh->b_data; + mlog_entry_void(); + if (!namelen) return -EINVAL; @@ -1755,9 +1765,8 @@ int __ocfs2_add_entry(handle_t *handle, * from ever getting here. */ retval = -ENOSPC; bail: - if (retval) - mlog_errno(retval); + mlog_exit(retval); return retval; } @@ -2019,7 +2028,8 @@ int ocfs2_readdir(struct file * filp, void * dirent, filldir_t filldir) struct inode *inode = filp->f_path.dentry->d_inode; int lock_level = 0; - trace_ocfs2_readdir((unsigned long long)OCFS2_I(inode)->ip_blkno); + mlog_entry("dirino=%llu\n", + (unsigned long long)OCFS2_I(inode)->ip_blkno); error = ocfs2_inode_lock_atime(inode, filp->f_vfsmnt, &lock_level); if (lock_level && error >= 0) { @@ -2041,10 +2051,9 @@ int ocfs2_readdir(struct file * filp, void * dirent, filldir_t filldir) dirent, filldir, NULL); ocfs2_inode_unlock(inode, lock_level); - if (error) - mlog_errno(error); bail_nolock: + mlog_exit(error); return error; } @@ -2060,8 +2069,8 @@ int ocfs2_find_files_on_disk(const char *name, { int status = -ENOENT; - trace_ocfs2_find_files_on_disk(namelen, name, blkno, - (unsigned long long)OCFS2_I(inode)->ip_blkno); + mlog(0, "name=%.*s, blkno=%p, inode=%llu\n", namelen, name, blkno, + (unsigned long long)OCFS2_I(inode)->ip_blkno); status = ocfs2_find_entry(name, namelen, inode, lookup); if (status) @@ -2105,8 +2114,8 @@ int ocfs2_check_dir_for_entry(struct inode *dir, int ret; struct ocfs2_dir_lookup_result lookup = { NULL, }; - trace_ocfs2_check_dir_for_entry( - (unsigned long long)OCFS2_I(dir)->ip_blkno, namelen, name); + mlog_entry("dir %llu, name '%.*s'\n", + (unsigned long long)OCFS2_I(dir)->ip_blkno, namelen, name); ret = -EEXIST; if (ocfs2_find_entry(name, namelen, dir, &lookup) == 0) @@ -2116,8 +2125,7 @@ int ocfs2_check_dir_for_entry(struct inode *dir, bail: ocfs2_free_dir_lookup_result(&lookup); - if (ret) - mlog_errno(ret); + mlog_exit(ret); return ret; } @@ -2316,6 +2324,8 @@ static int ocfs2_fill_new_dir_el(struct ocfs2_super *osb, struct buffer_head *new_bh = NULL; struct ocfs2_dir_entry *de; + mlog_entry_void(); + if (ocfs2_new_dir_wants_trailer(inode)) size = ocfs2_dir_trailer_blk_off(parent->i_sb); @@ -2370,6 +2380,7 @@ static int ocfs2_fill_new_dir_el(struct ocfs2_super *osb, bail: brelse(new_bh); + mlog_exit(status); return status; } @@ -2398,9 +2409,9 @@ static int ocfs2_dx_dir_attach_index(struct ocfs2_super *osb, goto out; } - trace_ocfs2_dx_dir_attach_index( - (unsigned long long)OCFS2_I(dir)->ip_blkno, - (unsigned long long)dr_blkno); + mlog(0, "Dir %llu, attach new index block: %llu\n", + (unsigned long long)OCFS2_I(dir)->ip_blkno, + (unsigned long long)dr_blkno); dx_root_bh = sb_getblk(osb->sb, dr_blkno); if (dx_root_bh == NULL) { @@ -2500,10 +2511,11 @@ static int ocfs2_dx_dir_format_cluster(struct ocfs2_super *osb, dx_leaf->dl_list.de_count = cpu_to_le16(ocfs2_dx_entries_per_leaf(osb->sb)); - trace_ocfs2_dx_dir_format_cluster( - (unsigned long long)OCFS2_I(dir)->ip_blkno, - (unsigned long long)bh->b_blocknr, - le16_to_cpu(dx_leaf->dl_list.de_count)); + mlog(0, + "Dir %llu, format dx_leaf: %llu, entry count: %u\n", + (unsigned long long)OCFS2_I(dir)->ip_blkno, + (unsigned long long)bh->b_blocknr, + le16_to_cpu(dx_leaf->dl_list.de_count)); ocfs2_journal_dirty(handle, bh); } @@ -2747,11 +2759,12 @@ static void ocfs2_dx_dir_index_root_block(struct inode *dir, ocfs2_dx_dir_name_hash(dir, de->name, de->name_len, &hinfo); - trace_ocfs2_dx_dir_index_root_block( - (unsigned long long)dir->i_ino, - hinfo.major_hash, hinfo.minor_hash, - de->name_len, de->name, - le16_to_cpu(dx_root->dr_entries.de_num_used)); + mlog(0, + "dir: %llu, major: 0x%x minor: 0x%x, index: %u, name: %.*s\n", + (unsigned long long)dir->i_ino, hinfo.major_hash, + hinfo.minor_hash, + le16_to_cpu(dx_root->dr_entries.de_num_used), + de->name_len, de->name); ocfs2_dx_entry_list_insert(&dx_root->dr_entries, &hinfo, dirent_blk); @@ -3222,6 +3235,7 @@ static int ocfs2_do_extend_dir(struct super_block *sb, bail: if (did_quota && status < 0) dquot_free_space_nodirty(dir, ocfs2_clusters_to_bytes(sb, 1)); + mlog_exit(status); return status; } @@ -3256,6 +3270,8 @@ static int ocfs2_extend_dir(struct ocfs2_super *osb, struct ocfs2_extent_tree et; struct buffer_head *dx_root_bh = lookup->dl_dx_root_bh; + mlog_entry_void(); + if (OCFS2_I(dir)->ip_dyn_features & OCFS2_INLINE_DATA_FL) { /* * This would be a code error as an inline directory should @@ -3304,8 +3320,8 @@ static int ocfs2_extend_dir(struct ocfs2_super *osb, down_write(&OCFS2_I(dir)->ip_alloc_sem); drop_alloc_sem = 1; dir_i_size = i_size_read(dir); - trace_ocfs2_extend_dir((unsigned long long)OCFS2_I(dir)->ip_blkno, - dir_i_size); + mlog(0, "extending dir %llu (i_size = %lld)\n", + (unsigned long long)OCFS2_I(dir)->ip_blkno, dir_i_size); /* dir->i_size is always block aligned. */ spin_lock(&OCFS2_I(dir)->ip_lock); @@ -3420,6 +3436,7 @@ static int ocfs2_extend_dir(struct ocfs2_super *osb, brelse(new_bh); + mlog_exit(status); return status; } @@ -3566,9 +3583,8 @@ static int ocfs2_find_dir_space_el(struct inode *dir, const char *name, status = 0; bail: brelse(bh); - if (status) - mlog_errno(status); + mlog_exit(status); return status; } @@ -3799,9 +3815,9 @@ static int ocfs2_dx_dir_rebalance(struct ocfs2_super *osb, struct inode *dir, struct ocfs2_dx_root_block *dx_root; struct ocfs2_dx_leaf *tmp_dx_leaf = NULL; - trace_ocfs2_dx_dir_rebalance((unsigned long long)OCFS2_I(dir)->ip_blkno, - (unsigned long long)leaf_blkno, - insert_hash); + mlog(0, "DX Dir: %llu, rebalance leaf leaf_blkno: %llu insert: %u\n", + (unsigned long long)OCFS2_I(dir)->ip_blkno, + (unsigned long long)leaf_blkno, insert_hash); ocfs2_init_dx_root_extent_tree(&et, INODE_CACHE(dir), dx_root_bh); @@ -3881,7 +3897,8 @@ static int ocfs2_dx_dir_rebalance(struct ocfs2_super *osb, struct inode *dir, goto out_commit; } - trace_ocfs2_dx_dir_rebalance_split(leaf_cpos, split_hash, insert_hash); + mlog(0, "Split leaf (%u) at %u, insert major hash is %u\n", + leaf_cpos, split_hash, insert_hash); /* * We have to carefully order operations here. There are items @@ -4338,8 +4355,8 @@ int ocfs2_prepare_dir_for_insert(struct ocfs2_super *osb, unsigned int blocks_wanted = 1; struct buffer_head *bh = NULL; - trace_ocfs2_prepare_dir_for_insert( - (unsigned long long)OCFS2_I(dir)->ip_blkno, namelen); + mlog(0, "getting ready to insert namelen %d into dir %llu\n", + namelen, (unsigned long long)OCFS2_I(dir)->ip_blkno); if (!namelen) { ret = -EINVAL; diff --git a/trunk/fs/ocfs2/dlm/dlmconvert.c b/trunk/fs/ocfs2/dlm/dlmconvert.c index 29a886d1e82c..9f30491e5e88 100644 --- a/trunk/fs/ocfs2/dlm/dlmconvert.c +++ b/trunk/fs/ocfs2/dlm/dlmconvert.c @@ -128,8 +128,8 @@ static enum dlm_status __dlmconvert_master(struct dlm_ctxt *dlm, assert_spin_locked(&res->spinlock); - mlog(0, "type=%d, convert_type=%d, new convert_type=%d\n", - lock->ml.type, lock->ml.convert_type, type); + mlog_entry("type=%d, convert_type=%d, new convert_type=%d\n", + lock->ml.type, lock->ml.convert_type, type); spin_lock(&lock->spinlock); @@ -353,7 +353,7 @@ static enum dlm_status dlm_send_remote_convert_request(struct dlm_ctxt *dlm, struct kvec vec[2]; size_t veclen = 1; - mlog(0, "%.*s\n", res->lockname.len, res->lockname.name); + mlog_entry("%.*s\n", res->lockname.len, res->lockname.name); memset(&convert, 0, sizeof(struct dlm_convert_lock)); convert.node_idx = dlm->node_num; diff --git a/trunk/fs/ocfs2/dlm/dlmdomain.c b/trunk/fs/ocfs2/dlm/dlmdomain.c index 7540a492eaba..7e38a072d720 100644 --- a/trunk/fs/ocfs2/dlm/dlmdomain.c +++ b/trunk/fs/ocfs2/dlm/dlmdomain.c @@ -188,7 +188,7 @@ struct dlm_lock_resource * __dlm_lookup_lockres_full(struct dlm_ctxt *dlm, struct hlist_head *bucket; struct hlist_node *list; - mlog(0, "%.*s\n", len, name); + mlog_entry("%.*s\n", len, name); assert_spin_locked(&dlm->spinlock); @@ -222,7 +222,7 @@ struct dlm_lock_resource * __dlm_lookup_lockres(struct dlm_ctxt *dlm, { struct dlm_lock_resource *res = NULL; - mlog(0, "%.*s\n", len, name); + mlog_entry("%.*s\n", len, name); assert_spin_locked(&dlm->spinlock); @@ -531,7 +531,7 @@ static int dlm_exit_domain_handler(struct o2net_msg *msg, u32 len, void *data, unsigned int node; struct dlm_exit_domain *exit_msg = (struct dlm_exit_domain *) msg->buf; - mlog(0, "%p %u %p", msg, len, data); + mlog_entry("%p %u %p", msg, len, data); if (!dlm_grab(dlm)) return 0; @@ -926,10 +926,9 @@ static int dlm_assert_joined_handler(struct o2net_msg *msg, u32 len, void *data, } static int dlm_match_regions(struct dlm_ctxt *dlm, - struct dlm_query_region *qr, - char *local, int locallen) + struct dlm_query_region *qr) { - char *remote = qr->qr_regions; + char *local = NULL, *remote = qr->qr_regions; char *l, *r; int localnr, i, j, foundit; int status = 0; @@ -958,8 +957,13 @@ static int dlm_match_regions(struct dlm_ctxt *dlm, r += O2HB_MAX_REGION_NAME_LEN; } - localnr = min(O2NM_MAX_REGIONS, locallen/O2HB_MAX_REGION_NAME_LEN); - localnr = o2hb_get_all_regions(local, (u8)localnr); + local = kmalloc(sizeof(qr->qr_regions), GFP_ATOMIC); + if (!local) { + status = -ENOMEM; + goto bail; + } + + localnr = o2hb_get_all_regions(local, O2NM_MAX_REGIONS); /* compare local regions with remote */ l = local; @@ -1008,6 +1012,8 @@ static int dlm_match_regions(struct dlm_ctxt *dlm, } bail: + kfree(local); + return status; } @@ -1069,7 +1075,6 @@ static int dlm_query_region_handler(struct o2net_msg *msg, u32 len, { struct dlm_query_region *qr; struct dlm_ctxt *dlm = NULL; - char *local = NULL; int status = 0; int locked = 0; @@ -1078,13 +1083,6 @@ static int dlm_query_region_handler(struct o2net_msg *msg, u32 len, mlog(0, "Node %u queries hb regions on domain %s\n", qr->qr_node, qr->qr_domain); - /* buffer used in dlm_mast_regions() */ - local = kmalloc(sizeof(qr->qr_regions), GFP_KERNEL); - if (!local) { - status = -ENOMEM; - goto bail; - } - status = -EINVAL; spin_lock(&dlm_domain_lock); @@ -1114,15 +1112,13 @@ static int dlm_query_region_handler(struct o2net_msg *msg, u32 len, goto bail; } - status = dlm_match_regions(dlm, qr, local, sizeof(qr->qr_regions)); + status = dlm_match_regions(dlm, qr); bail: if (locked) spin_unlock(&dlm->spinlock); spin_unlock(&dlm_domain_lock); - kfree(local); - return status; } @@ -1557,7 +1553,7 @@ static int dlm_try_to_join_domain(struct dlm_ctxt *dlm) struct domain_join_ctxt *ctxt; enum dlm_query_join_response_code response = JOIN_DISALLOW; - mlog(0, "%p", dlm); + mlog_entry("%p", dlm); ctxt = kzalloc(sizeof(*ctxt), GFP_KERNEL); if (!ctxt) { diff --git a/trunk/fs/ocfs2/dlm/dlmlock.c b/trunk/fs/ocfs2/dlm/dlmlock.c index 8d39e0fd66f7..7009292aac5a 100644 --- a/trunk/fs/ocfs2/dlm/dlmlock.c +++ b/trunk/fs/ocfs2/dlm/dlmlock.c @@ -128,7 +128,7 @@ static enum dlm_status dlmlock_master(struct dlm_ctxt *dlm, int call_ast = 0, kick_thread = 0; enum dlm_status status = DLM_NORMAL; - mlog(0, "type=%d\n", lock->ml.type); + mlog_entry("type=%d\n", lock->ml.type); spin_lock(&res->spinlock); /* if called from dlm_create_lock_handler, need to @@ -227,8 +227,8 @@ static enum dlm_status dlmlock_remote(struct dlm_ctxt *dlm, enum dlm_status status = DLM_DENIED; int lockres_changed = 1; - mlog(0, "type=%d, lockres %.*s, flags = 0x%x\n", - lock->ml.type, res->lockname.len, + mlog_entry("type=%d\n", lock->ml.type); + mlog(0, "lockres %.*s, flags = 0x%x\n", res->lockname.len, res->lockname.name, flags); spin_lock(&res->spinlock); @@ -308,6 +308,8 @@ static enum dlm_status dlm_send_remote_lock_request(struct dlm_ctxt *dlm, int tmpret, status = 0; enum dlm_status ret; + mlog_entry_void(); + memset(&create, 0, sizeof(create)); create.node_idx = dlm->node_num; create.requested_type = lock->ml.type; @@ -475,6 +477,8 @@ int dlm_create_lock_handler(struct o2net_msg *msg, u32 len, void *data, BUG_ON(!dlm); + mlog_entry_void(); + if (!dlm_grab(dlm)) return DLM_REJECTED; diff --git a/trunk/fs/ocfs2/dlm/dlmmaster.c b/trunk/fs/ocfs2/dlm/dlmmaster.c index 9d67610dfc74..59f0f6bdfc62 100644 --- a/trunk/fs/ocfs2/dlm/dlmmaster.c +++ b/trunk/fs/ocfs2/dlm/dlmmaster.c @@ -426,6 +426,8 @@ static void dlm_mle_release(struct kref *kref) struct dlm_master_list_entry *mle; struct dlm_ctxt *dlm; + mlog_entry_void(); + mle = container_of(kref, struct dlm_master_list_entry, mle_refs); dlm = mle->dlm; @@ -3118,6 +3120,8 @@ static int dlm_add_migration_mle(struct dlm_ctxt *dlm, *oldmle = NULL; + mlog_entry_void(); + assert_spin_locked(&dlm->spinlock); assert_spin_locked(&dlm->master_lock); @@ -3257,7 +3261,7 @@ void dlm_clean_master_list(struct dlm_ctxt *dlm, u8 dead_node) struct hlist_node *list; unsigned int i; - mlog(0, "dlm=%s, dead node=%u\n", dlm->name, dead_node); + mlog_entry("dlm=%s, dead node=%u\n", dlm->name, dead_node); top: assert_spin_locked(&dlm->spinlock); diff --git a/trunk/fs/ocfs2/dlm/dlmrecovery.c b/trunk/fs/ocfs2/dlm/dlmrecovery.c index f1beb6fc254d..aaaffbcbe916 100644 --- a/trunk/fs/ocfs2/dlm/dlmrecovery.c +++ b/trunk/fs/ocfs2/dlm/dlmrecovery.c @@ -727,6 +727,7 @@ static int dlm_remaster_locks(struct dlm_ctxt *dlm, u8 dead_node) if (destroy) dlm_destroy_recovery_area(dlm, dead_node); + mlog_exit(status); return status; } @@ -1495,9 +1496,9 @@ int dlm_mig_lockres_handler(struct o2net_msg *msg, u32 len, void *data, kfree(buf); if (item) kfree(item); - mlog_errno(ret); } + mlog_exit(ret); return ret; } @@ -1566,6 +1567,7 @@ static void dlm_mig_lockres_worker(struct dlm_work_item *item, void *data) dlm_lockres_put(res); } kfree(data); + mlog_exit(ret); } @@ -1984,6 +1986,7 @@ static int dlm_process_recovery_data(struct dlm_ctxt *dlm, dlm_lock_put(newlock); } + mlog_exit(ret); return ret; } @@ -2080,6 +2083,8 @@ static void dlm_finish_local_lockres_recovery(struct dlm_ctxt *dlm, struct hlist_head *bucket; struct dlm_lock_resource *res, *next; + mlog_entry_void(); + assert_spin_locked(&dlm->spinlock); list_for_each_entry_safe(res, next, &dlm->reco.resources, recovering) { @@ -2602,6 +2607,8 @@ static int dlm_send_begin_reco_message(struct dlm_ctxt *dlm, u8 dead_node) int nodenum; int status; + mlog_entry("%u\n", dead_node); + mlog(0, "%s: dead node is %u\n", dlm->name, dead_node); spin_lock(&dlm->spinlock); diff --git a/trunk/fs/ocfs2/dlm/dlmunlock.c b/trunk/fs/ocfs2/dlm/dlmunlock.c index 850aa7e87537..817287c6a6db 100644 --- a/trunk/fs/ocfs2/dlm/dlmunlock.c +++ b/trunk/fs/ocfs2/dlm/dlmunlock.c @@ -317,7 +317,7 @@ static enum dlm_status dlm_send_remote_unlock_request(struct dlm_ctxt *dlm, struct kvec vec[2]; size_t veclen = 1; - mlog(0, "%.*s\n", res->lockname.len, res->lockname.name); + mlog_entry("%.*s\n", res->lockname.len, res->lockname.name); if (owner == dlm->node_num) { /* ended up trying to contact ourself. this means @@ -588,6 +588,8 @@ enum dlm_status dlmunlock(struct dlm_ctxt *dlm, struct dlm_lockstatus *lksb, struct dlm_lock *lock = NULL; int call_ast, is_master; + mlog_entry_void(); + if (!lksb) { dlm_error(DLM_BADARGS); return DLM_BADARGS; diff --git a/trunk/fs/ocfs2/dlmglue.c b/trunk/fs/ocfs2/dlmglue.c index 7642d7ca73e5..e8d94d722ecb 100644 --- a/trunk/fs/ocfs2/dlmglue.c +++ b/trunk/fs/ocfs2/dlmglue.c @@ -64,7 +64,7 @@ struct ocfs2_mask_waiter { unsigned long mw_mask; unsigned long mw_goal; #ifdef CONFIG_OCFS2_FS_STATS - ktime_t mw_lock_start; + unsigned long long mw_lock_start; #endif }; @@ -397,6 +397,8 @@ static void ocfs2_build_lock_name(enum ocfs2_lock_type type, { int len; + mlog_entry_void(); + BUG_ON(type >= OCFS2_NUM_LOCK_TYPES); len = snprintf(name, OCFS2_LOCK_ID_MAX_LEN, "%c%s%016llx%08x", @@ -406,6 +408,8 @@ static void ocfs2_build_lock_name(enum ocfs2_lock_type type, BUG_ON(len != (OCFS2_LOCK_ID_MAX_LEN - 1)); mlog(0, "built lock resource with name: %s\n", name); + + mlog_exit_void(); } static DEFINE_SPINLOCK(ocfs2_dlm_tracking_lock); @@ -431,41 +435,44 @@ static void ocfs2_remove_lockres_tracking(struct ocfs2_lock_res *res) #ifdef CONFIG_OCFS2_FS_STATS static void ocfs2_init_lock_stats(struct ocfs2_lock_res *res) { + res->l_lock_num_prmode = 0; + res->l_lock_num_prmode_failed = 0; + res->l_lock_total_prmode = 0; + res->l_lock_max_prmode = 0; + res->l_lock_num_exmode = 0; + res->l_lock_num_exmode_failed = 0; + res->l_lock_total_exmode = 0; + res->l_lock_max_exmode = 0; res->l_lock_refresh = 0; - memset(&res->l_lock_prmode, 0, sizeof(struct ocfs2_lock_stats)); - memset(&res->l_lock_exmode, 0, sizeof(struct ocfs2_lock_stats)); } static void ocfs2_update_lock_stats(struct ocfs2_lock_res *res, int level, struct ocfs2_mask_waiter *mw, int ret) { - u32 usec; - ktime_t kt; - struct ocfs2_lock_stats *stats; - - if (level == LKM_PRMODE) - stats = &res->l_lock_prmode; - else if (level == LKM_EXMODE) - stats = &res->l_lock_exmode; - else + unsigned long long *num, *sum; + unsigned int *max, *failed; + struct timespec ts = current_kernel_time(); + unsigned long long time = timespec_to_ns(&ts) - mw->mw_lock_start; + + if (level == LKM_PRMODE) { + num = &res->l_lock_num_prmode; + sum = &res->l_lock_total_prmode; + max = &res->l_lock_max_prmode; + failed = &res->l_lock_num_prmode_failed; + } else if (level == LKM_EXMODE) { + num = &res->l_lock_num_exmode; + sum = &res->l_lock_total_exmode; + max = &res->l_lock_max_exmode; + failed = &res->l_lock_num_exmode_failed; + } else return; - kt = ktime_sub(ktime_get(), mw->mw_lock_start); - usec = ktime_to_us(kt); - - stats->ls_gets++; - stats->ls_total += ktime_to_ns(kt); - /* overflow */ - if (unlikely(stats->ls_gets) == 0) { - stats->ls_gets++; - stats->ls_total = ktime_to_ns(kt); - } - - if (stats->ls_max < usec) - stats->ls_max = usec; - + (*num)++; + (*sum) += time; + if (time > *max) + *max = time; if (ret) - stats->ls_fail++; + (*failed)++; } static inline void ocfs2_track_lock_refresh(struct ocfs2_lock_res *lockres) @@ -475,7 +482,8 @@ static inline void ocfs2_track_lock_refresh(struct ocfs2_lock_res *lockres) static inline void ocfs2_init_start_time(struct ocfs2_mask_waiter *mw) { - mw->mw_lock_start = ktime_get(); + struct timespec ts = current_kernel_time(); + mw->mw_lock_start = timespec_to_ns(&ts); } #else static inline void ocfs2_init_lock_stats(struct ocfs2_lock_res *res) @@ -721,6 +729,8 @@ void ocfs2_refcount_lock_res_init(struct ocfs2_lock_res *lockres, void ocfs2_lock_res_free(struct ocfs2_lock_res *res) { + mlog_entry_void(); + if (!(res->l_flags & OCFS2_LOCK_INITIALIZED)) return; @@ -746,11 +756,14 @@ void ocfs2_lock_res_free(struct ocfs2_lock_res *res) memset(&res->l_lksb, 0, sizeof(res->l_lksb)); res->l_flags = 0UL; + mlog_exit_void(); } static inline void ocfs2_inc_holders(struct ocfs2_lock_res *lockres, int level) { + mlog_entry_void(); + BUG_ON(!lockres); switch(level) { @@ -763,11 +776,15 @@ static inline void ocfs2_inc_holders(struct ocfs2_lock_res *lockres, default: BUG(); } + + mlog_exit_void(); } static inline void ocfs2_dec_holders(struct ocfs2_lock_res *lockres, int level) { + mlog_entry_void(); + BUG_ON(!lockres); switch(level) { @@ -782,6 +799,7 @@ static inline void ocfs2_dec_holders(struct ocfs2_lock_res *lockres, default: BUG(); } + mlog_exit_void(); } /* WARNING: This function lives in a world where the only three lock @@ -828,6 +846,8 @@ static void lockres_clear_flags(struct ocfs2_lock_res *lockres, static inline void ocfs2_generic_handle_downconvert_action(struct ocfs2_lock_res *lockres) { + mlog_entry_void(); + BUG_ON(!(lockres->l_flags & OCFS2_LOCK_BUSY)); BUG_ON(!(lockres->l_flags & OCFS2_LOCK_ATTACHED)); BUG_ON(!(lockres->l_flags & OCFS2_LOCK_BLOCKED)); @@ -840,10 +860,14 @@ static inline void ocfs2_generic_handle_downconvert_action(struct ocfs2_lock_res lockres_clear_flags(lockres, OCFS2_LOCK_BLOCKED); } lockres_clear_flags(lockres, OCFS2_LOCK_BUSY); + + mlog_exit_void(); } static inline void ocfs2_generic_handle_convert_action(struct ocfs2_lock_res *lockres) { + mlog_entry_void(); + BUG_ON(!(lockres->l_flags & OCFS2_LOCK_BUSY)); BUG_ON(!(lockres->l_flags & OCFS2_LOCK_ATTACHED)); @@ -865,10 +889,14 @@ static inline void ocfs2_generic_handle_convert_action(struct ocfs2_lock_res *lo lockres_or_flags(lockres, OCFS2_LOCK_UPCONVERT_FINISHING); lockres_clear_flags(lockres, OCFS2_LOCK_BUSY); + + mlog_exit_void(); } static inline void ocfs2_generic_handle_attach_action(struct ocfs2_lock_res *lockres) { + mlog_entry_void(); + BUG_ON((!(lockres->l_flags & OCFS2_LOCK_BUSY))); BUG_ON(lockres->l_flags & OCFS2_LOCK_ATTACHED); @@ -880,12 +908,15 @@ static inline void ocfs2_generic_handle_attach_action(struct ocfs2_lock_res *loc lockres->l_level = lockres->l_requested; lockres_or_flags(lockres, OCFS2_LOCK_ATTACHED); lockres_clear_flags(lockres, OCFS2_LOCK_BUSY); + + mlog_exit_void(); } static int ocfs2_generic_handle_bast(struct ocfs2_lock_res *lockres, int level) { int needs_downconvert = 0; + mlog_entry_void(); assert_spin_locked(&lockres->l_lock); @@ -907,7 +938,8 @@ static int ocfs2_generic_handle_bast(struct ocfs2_lock_res *lockres, if (needs_downconvert) lockres_or_flags(lockres, OCFS2_LOCK_BLOCKED); - mlog(0, "needs_downconvert = %d\n", needs_downconvert); + + mlog_exit(needs_downconvert); return needs_downconvert; } @@ -1119,6 +1151,8 @@ static void ocfs2_unlock_ast(struct ocfs2_dlm_lksb *lksb, int error) struct ocfs2_lock_res *lockres = ocfs2_lksb_to_lock_res(lksb); unsigned long flags; + mlog_entry_void(); + mlog(ML_BASTS, "UNLOCK AST fired for lockres %s, action = %d\n", lockres->l_name, lockres->l_unlock_action); @@ -1128,6 +1162,7 @@ static void ocfs2_unlock_ast(struct ocfs2_dlm_lksb *lksb, int error) "unlock_action %d\n", error, lockres->l_name, lockres->l_unlock_action); spin_unlock_irqrestore(&lockres->l_lock, flags); + mlog_exit_void(); return; } @@ -1151,6 +1186,8 @@ static void ocfs2_unlock_ast(struct ocfs2_dlm_lksb *lksb, int error) lockres->l_unlock_action = OCFS2_UNLOCK_INVALID; wake_up(&lockres->l_event); spin_unlock_irqrestore(&lockres->l_lock, flags); + + mlog_exit_void(); } /* @@ -1196,6 +1233,7 @@ static inline void ocfs2_recover_from_dlm_error(struct ocfs2_lock_res *lockres, { unsigned long flags; + mlog_entry_void(); spin_lock_irqsave(&lockres->l_lock, flags); lockres_clear_flags(lockres, OCFS2_LOCK_BUSY); lockres_clear_flags(lockres, OCFS2_LOCK_UPCONVERT_FINISHING); @@ -1206,6 +1244,7 @@ static inline void ocfs2_recover_from_dlm_error(struct ocfs2_lock_res *lockres, spin_unlock_irqrestore(&lockres->l_lock, flags); wake_up(&lockres->l_event); + mlog_exit_void(); } /* Note: If we detect another process working on the lock (i.e., @@ -1221,6 +1260,8 @@ static int ocfs2_lock_create(struct ocfs2_super *osb, unsigned long flags; unsigned int gen; + mlog_entry_void(); + mlog(0, "lock %s, level = %d, flags = %u\n", lockres->l_name, level, dlm_flags); @@ -1252,6 +1293,7 @@ static int ocfs2_lock_create(struct ocfs2_super *osb, mlog(0, "lock %s, return from ocfs2_dlm_lock\n", lockres->l_name); bail: + mlog_exit(ret); return ret; } @@ -1374,6 +1416,8 @@ static int __ocfs2_cluster_lock(struct ocfs2_super *osb, unsigned int gen; int noqueue_attempted = 0; + mlog_entry_void(); + ocfs2_init_mask_waiter(&mw); if (lockres->l_ops->flags & LOCK_TYPE_USES_LVB) @@ -1539,6 +1583,7 @@ static int __ocfs2_cluster_lock(struct ocfs2_super *osb, caller_ip); } #endif + mlog_exit(ret); return ret; } @@ -1560,6 +1605,7 @@ static void __ocfs2_cluster_unlock(struct ocfs2_super *osb, { unsigned long flags; + mlog_entry_void(); spin_lock_irqsave(&lockres->l_lock, flags); ocfs2_dec_holders(lockres, level); ocfs2_downconvert_on_unlock(osb, lockres); @@ -1568,6 +1614,7 @@ static void __ocfs2_cluster_unlock(struct ocfs2_super *osb, if (lockres->l_lockdep_map.key != NULL) rwsem_release(&lockres->l_lockdep_map, 1, caller_ip); #endif + mlog_exit_void(); } static int ocfs2_create_new_lock(struct ocfs2_super *osb, @@ -1601,6 +1648,8 @@ int ocfs2_create_new_inode_locks(struct inode *inode) BUG_ON(!inode); BUG_ON(!ocfs2_inode_is_new(inode)); + mlog_entry_void(); + mlog(0, "Inode %llu\n", (unsigned long long)OCFS2_I(inode)->ip_blkno); /* NOTE: That we don't increment any of the holder counts, nor @@ -1634,6 +1683,7 @@ int ocfs2_create_new_inode_locks(struct inode *inode) } bail: + mlog_exit(ret); return ret; } @@ -1645,12 +1695,16 @@ int ocfs2_rw_lock(struct inode *inode, int write) BUG_ON(!inode); + mlog_entry_void(); + mlog(0, "inode %llu take %s RW lock\n", (unsigned long long)OCFS2_I(inode)->ip_blkno, write ? "EXMODE" : "PRMODE"); - if (ocfs2_mount_local(osb)) + if (ocfs2_mount_local(osb)) { + mlog_exit(0); return 0; + } lockres = &OCFS2_I(inode)->ip_rw_lockres; @@ -1661,6 +1715,7 @@ int ocfs2_rw_lock(struct inode *inode, int write) if (status < 0) mlog_errno(status); + mlog_exit(status); return status; } @@ -1670,12 +1725,16 @@ void ocfs2_rw_unlock(struct inode *inode, int write) struct ocfs2_lock_res *lockres = &OCFS2_I(inode)->ip_rw_lockres; struct ocfs2_super *osb = OCFS2_SB(inode->i_sb); + mlog_entry_void(); + mlog(0, "inode %llu drop %s RW lock\n", (unsigned long long)OCFS2_I(inode)->ip_blkno, write ? "EXMODE" : "PRMODE"); if (!ocfs2_mount_local(osb)) ocfs2_cluster_unlock(OCFS2_SB(inode->i_sb), lockres, level); + + mlog_exit_void(); } /* @@ -1689,6 +1748,8 @@ int ocfs2_open_lock(struct inode *inode) BUG_ON(!inode); + mlog_entry_void(); + mlog(0, "inode %llu take PRMODE open lock\n", (unsigned long long)OCFS2_I(inode)->ip_blkno); @@ -1703,6 +1764,7 @@ int ocfs2_open_lock(struct inode *inode) mlog_errno(status); out: + mlog_exit(status); return status; } @@ -1714,6 +1776,8 @@ int ocfs2_try_open_lock(struct inode *inode, int write) BUG_ON(!inode); + mlog_entry_void(); + mlog(0, "inode %llu try to take %s open lock\n", (unsigned long long)OCFS2_I(inode)->ip_blkno, write ? "EXMODE" : "PRMODE"); @@ -1735,6 +1799,7 @@ int ocfs2_try_open_lock(struct inode *inode, int write) level, DLM_LKF_NOQUEUE, 0); out: + mlog_exit(status); return status; } @@ -1746,6 +1811,8 @@ void ocfs2_open_unlock(struct inode *inode) struct ocfs2_lock_res *lockres = &OCFS2_I(inode)->ip_open_lockres; struct ocfs2_super *osb = OCFS2_SB(inode->i_sb); + mlog_entry_void(); + mlog(0, "inode %llu drop open lock\n", (unsigned long long)OCFS2_I(inode)->ip_blkno); @@ -1760,7 +1827,7 @@ void ocfs2_open_unlock(struct inode *inode) DLM_LOCK_EX); out: - return; + mlog_exit_void(); } static int ocfs2_flock_handle_signal(struct ocfs2_lock_res *lockres, @@ -1976,6 +2043,8 @@ static void ocfs2_downconvert_on_unlock(struct ocfs2_super *osb, { int kick = 0; + mlog_entry_void(); + /* If we know that another node is waiting on our lock, kick * the downconvert thread * pre-emptively when we reach a release * condition. */ @@ -1996,6 +2065,8 @@ static void ocfs2_downconvert_on_unlock(struct ocfs2_super *osb, if (kick) ocfs2_wake_downconvert_thread(osb); + + mlog_exit_void(); } #define OCFS2_SEC_BITS 34 @@ -2024,6 +2095,8 @@ static void __ocfs2_stuff_meta_lvb(struct inode *inode) struct ocfs2_lock_res *lockres = &oi->ip_inode_lockres; struct ocfs2_meta_lvb *lvb; + mlog_entry_void(); + lvb = ocfs2_dlm_lvb(&lockres->l_lksb); /* @@ -2055,6 +2128,8 @@ static void __ocfs2_stuff_meta_lvb(struct inode *inode) out: mlog_meta_lvb(0, lockres); + + mlog_exit_void(); } static void ocfs2_unpack_timespec(struct timespec *spec, @@ -2070,6 +2145,8 @@ static void ocfs2_refresh_inode_from_lvb(struct inode *inode) struct ocfs2_lock_res *lockres = &oi->ip_inode_lockres; struct ocfs2_meta_lvb *lvb; + mlog_entry_void(); + mlog_meta_lvb(0, lockres); lvb = ocfs2_dlm_lvb(&lockres->l_lksb); @@ -2100,6 +2177,8 @@ static void ocfs2_refresh_inode_from_lvb(struct inode *inode) ocfs2_unpack_timespec(&inode->i_ctime, be64_to_cpu(lvb->lvb_ictime_packed)); spin_unlock(&oi->ip_lock); + + mlog_exit_void(); } static inline int ocfs2_meta_lvb_is_trustable(struct inode *inode, @@ -2126,6 +2205,8 @@ static int ocfs2_should_refresh_lock_res(struct ocfs2_lock_res *lockres) unsigned long flags; int status = 0; + mlog_entry_void(); + refresh_check: spin_lock_irqsave(&lockres->l_lock, flags); if (!(lockres->l_flags & OCFS2_LOCK_NEEDS_REFRESH)) { @@ -2146,7 +2227,7 @@ static int ocfs2_should_refresh_lock_res(struct ocfs2_lock_res *lockres) status = 1; bail: - mlog(0, "status %d\n", status); + mlog_exit(status); return status; } @@ -2156,6 +2237,7 @@ static inline void ocfs2_complete_lock_res_refresh(struct ocfs2_lock_res *lockre int status) { unsigned long flags; + mlog_entry_void(); spin_lock_irqsave(&lockres->l_lock, flags); lockres_clear_flags(lockres, OCFS2_LOCK_REFRESHING); @@ -2164,6 +2246,8 @@ static inline void ocfs2_complete_lock_res_refresh(struct ocfs2_lock_res *lockre spin_unlock_irqrestore(&lockres->l_lock, flags); wake_up(&lockres->l_event); + + mlog_exit_void(); } /* may or may not return a bh if it went to disk. */ @@ -2176,6 +2260,8 @@ static int ocfs2_inode_lock_update(struct inode *inode, struct ocfs2_dinode *fe; struct ocfs2_super *osb = OCFS2_SB(inode->i_sb); + mlog_entry_void(); + if (ocfs2_mount_local(osb)) goto bail; @@ -2244,6 +2330,7 @@ static int ocfs2_inode_lock_update(struct inode *inode, bail_refresh: ocfs2_complete_lock_res_refresh(lockres, status); bail: + mlog_exit(status); return status; } @@ -2287,6 +2374,8 @@ int ocfs2_inode_lock_full_nested(struct inode *inode, BUG_ON(!inode); + mlog_entry_void(); + mlog(0, "inode %llu, take %s META lock\n", (unsigned long long)OCFS2_I(inode)->ip_blkno, ex ? "EXMODE" : "PRMODE"); @@ -2378,6 +2467,7 @@ int ocfs2_inode_lock_full_nested(struct inode *inode, if (local_bh) brelse(local_bh); + mlog_exit(status); return status; } @@ -2427,6 +2517,7 @@ int ocfs2_inode_lock_atime(struct inode *inode, { int ret; + mlog_entry_void(); ret = ocfs2_inode_lock(inode, NULL, 0); if (ret < 0) { mlog_errno(ret); @@ -2454,6 +2545,7 @@ int ocfs2_inode_lock_atime(struct inode *inode, } else *level = 0; + mlog_exit(ret); return ret; } @@ -2464,6 +2556,8 @@ void ocfs2_inode_unlock(struct inode *inode, struct ocfs2_lock_res *lockres = &OCFS2_I(inode)->ip_inode_lockres; struct ocfs2_super *osb = OCFS2_SB(inode->i_sb); + mlog_entry_void(); + mlog(0, "inode %llu drop %s META lock\n", (unsigned long long)OCFS2_I(inode)->ip_blkno, ex ? "EXMODE" : "PRMODE"); @@ -2471,6 +2565,8 @@ void ocfs2_inode_unlock(struct inode *inode, if (!ocfs2_is_hard_readonly(OCFS2_SB(inode->i_sb)) && !ocfs2_mount_local(osb)) ocfs2_cluster_unlock(OCFS2_SB(inode->i_sb), lockres, level); + + mlog_exit_void(); } int ocfs2_orphan_scan_lock(struct ocfs2_super *osb, u32 *seqno) @@ -2521,6 +2617,8 @@ int ocfs2_super_lock(struct ocfs2_super *osb, int level = ex ? DLM_LOCK_EX : DLM_LOCK_PR; struct ocfs2_lock_res *lockres = &osb->osb_super_lockres; + mlog_entry_void(); + if (ocfs2_is_hard_readonly(osb)) return -EROFS; @@ -2552,6 +2650,7 @@ int ocfs2_super_lock(struct ocfs2_super *osb, ocfs2_track_lock_refresh(lockres); } bail: + mlog_exit(status); return status; } @@ -2770,15 +2869,8 @@ static void *ocfs2_dlm_seq_next(struct seq_file *m, void *v, loff_t *pos) return iter; } -/* - * Version is used by debugfs.ocfs2 to determine the format being used - * - * New in version 2 - * - Lock stats printed - * New in version 3 - * - Max time in lock stats is in usecs (instead of nsecs) - */ -#define OCFS2_DLM_DEBUG_STR_VERSION 3 +/* So that debugfs.ocfs2 can determine which format is being used */ +#define OCFS2_DLM_DEBUG_STR_VERSION 2 static int ocfs2_dlm_seq_show(struct seq_file *m, void *v) { int i; @@ -2820,18 +2912,18 @@ static int ocfs2_dlm_seq_show(struct seq_file *m, void *v) seq_printf(m, "0x%x\t", lvb[i]); #ifdef CONFIG_OCFS2_FS_STATS -# define lock_num_prmode(_l) ((_l)->l_lock_prmode.ls_gets) -# define lock_num_exmode(_l) ((_l)->l_lock_exmode.ls_gets) -# define lock_num_prmode_failed(_l) ((_l)->l_lock_prmode.ls_fail) -# define lock_num_exmode_failed(_l) ((_l)->l_lock_exmode.ls_fail) -# define lock_total_prmode(_l) ((_l)->l_lock_prmode.ls_total) -# define lock_total_exmode(_l) ((_l)->l_lock_exmode.ls_total) -# define lock_max_prmode(_l) ((_l)->l_lock_prmode.ls_max) -# define lock_max_exmode(_l) ((_l)->l_lock_exmode.ls_max) -# define lock_refresh(_l) ((_l)->l_lock_refresh) +# define lock_num_prmode(_l) (_l)->l_lock_num_prmode +# define lock_num_exmode(_l) (_l)->l_lock_num_exmode +# define lock_num_prmode_failed(_l) (_l)->l_lock_num_prmode_failed +# define lock_num_exmode_failed(_l) (_l)->l_lock_num_exmode_failed +# define lock_total_prmode(_l) (_l)->l_lock_total_prmode +# define lock_total_exmode(_l) (_l)->l_lock_total_exmode +# define lock_max_prmode(_l) (_l)->l_lock_max_prmode +# define lock_max_exmode(_l) (_l)->l_lock_max_exmode +# define lock_refresh(_l) (_l)->l_lock_refresh #else -# define lock_num_prmode(_l) (0) -# define lock_num_exmode(_l) (0) +# define lock_num_prmode(_l) (0ULL) +# define lock_num_exmode(_l) (0ULL) # define lock_num_prmode_failed(_l) (0) # define lock_num_exmode_failed(_l) (0) # define lock_total_prmode(_l) (0ULL) @@ -2841,8 +2933,8 @@ static int ocfs2_dlm_seq_show(struct seq_file *m, void *v) # define lock_refresh(_l) (0) #endif /* The following seq_print was added in version 2 of this output */ - seq_printf(m, "%u\t" - "%u\t" + seq_printf(m, "%llu\t" + "%llu\t" "%u\t" "%u\t" "%llu\t" @@ -2962,6 +3054,8 @@ int ocfs2_dlm_init(struct ocfs2_super *osb) int status = 0; struct ocfs2_cluster_connection *conn = NULL; + mlog_entry_void(); + if (ocfs2_mount_local(osb)) { osb->node_num = 0; goto local; @@ -3018,12 +3112,15 @@ int ocfs2_dlm_init(struct ocfs2_super *osb) kthread_stop(osb->dc_task); } + mlog_exit(status); return status; } void ocfs2_dlm_shutdown(struct ocfs2_super *osb, int hangup_pending) { + mlog_entry_void(); + ocfs2_drop_osb_locks(osb); /* @@ -3046,6 +3143,8 @@ void ocfs2_dlm_shutdown(struct ocfs2_super *osb, osb->cconn = NULL; ocfs2_dlm_shutdown_debug(osb); + + mlog_exit_void(); } static int ocfs2_drop_lock(struct ocfs2_super *osb, @@ -3127,6 +3226,7 @@ static int ocfs2_drop_lock(struct ocfs2_super *osb, ocfs2_wait_on_busy_lock(lockres); out: + mlog_exit(0); return 0; } @@ -3184,6 +3284,8 @@ int ocfs2_drop_inode_locks(struct inode *inode) { int status, err; + mlog_entry_void(); + /* No need to call ocfs2_mark_lockres_freeing here - * ocfs2_clear_inode has done it for us. */ @@ -3208,6 +3310,7 @@ int ocfs2_drop_inode_locks(struct inode *inode) if (err < 0 && !status) status = err; + mlog_exit(status); return status; } @@ -3249,6 +3352,8 @@ static int ocfs2_downconvert_lock(struct ocfs2_super *osb, int ret; u32 dlm_flags = DLM_LKF_CONVERT; + mlog_entry_void(); + mlog(ML_BASTS, "lockres %s, level %d => %d\n", lockres->l_name, lockres->l_level, new_level); @@ -3270,6 +3375,7 @@ static int ocfs2_downconvert_lock(struct ocfs2_super *osb, ret = 0; bail: + mlog_exit(ret); return ret; } @@ -3279,6 +3385,8 @@ static int ocfs2_prepare_cancel_convert(struct ocfs2_super *osb, { assert_spin_locked(&lockres->l_lock); + mlog_entry_void(); + if (lockres->l_unlock_action == OCFS2_UNLOCK_CANCEL_CONVERT) { /* If we're already trying to cancel a lock conversion * then just drop the spinlock and allow the caller to @@ -3308,6 +3416,8 @@ static int ocfs2_cancel_convert(struct ocfs2_super *osb, { int ret; + mlog_entry_void(); + ret = ocfs2_dlm_unlock(osb->cconn, &lockres->l_lksb, DLM_LKF_CANCEL); if (ret) { @@ -3317,6 +3427,7 @@ static int ocfs2_cancel_convert(struct ocfs2_super *osb, mlog(ML_BASTS, "lockres %s\n", lockres->l_name); + mlog_exit(ret); return ret; } @@ -3332,6 +3443,8 @@ static int ocfs2_unblock_lock(struct ocfs2_super *osb, int set_lvb = 0; unsigned int gen; + mlog_entry_void(); + spin_lock_irqsave(&lockres->l_lock, flags); recheck: @@ -3506,14 +3619,14 @@ static int ocfs2_unblock_lock(struct ocfs2_super *osb, gen); leave: - if (ret) - mlog_errno(ret); + mlog_exit(ret); return ret; leave_requeue: spin_unlock_irqrestore(&lockres->l_lock, flags); ctl->requeue = 1; + mlog_exit(0); return 0; } @@ -3746,6 +3859,8 @@ static void ocfs2_set_qinfo_lvb(struct ocfs2_lock_res *lockres) struct mem_dqinfo *info = sb_dqinfo(oinfo->dqi_gi.dqi_sb, oinfo->dqi_gi.dqi_type); + mlog_entry_void(); + lvb = ocfs2_dlm_lvb(&lockres->l_lksb); lvb->lvb_version = OCFS2_QINFO_LVB_VERSION; lvb->lvb_bgrace = cpu_to_be32(info->dqi_bgrace); @@ -3754,6 +3869,8 @@ static void ocfs2_set_qinfo_lvb(struct ocfs2_lock_res *lockres) lvb->lvb_blocks = cpu_to_be32(oinfo->dqi_gi.dqi_blocks); lvb->lvb_free_blk = cpu_to_be32(oinfo->dqi_gi.dqi_free_blk); lvb->lvb_free_entry = cpu_to_be32(oinfo->dqi_gi.dqi_free_entry); + + mlog_exit_void(); } void ocfs2_qinfo_unlock(struct ocfs2_mem_dqinfo *oinfo, int ex) @@ -3762,8 +3879,10 @@ void ocfs2_qinfo_unlock(struct ocfs2_mem_dqinfo *oinfo, int ex) struct ocfs2_super *osb = OCFS2_SB(oinfo->dqi_gi.dqi_sb); int level = ex ? DLM_LOCK_EX : DLM_LOCK_PR; + mlog_entry_void(); if (!ocfs2_is_hard_readonly(osb) && !ocfs2_mount_local(osb)) ocfs2_cluster_unlock(osb, lockres, level); + mlog_exit_void(); } static int ocfs2_refresh_qinfo(struct ocfs2_mem_dqinfo *oinfo) @@ -3818,6 +3937,8 @@ int ocfs2_qinfo_lock(struct ocfs2_mem_dqinfo *oinfo, int ex) int level = ex ? DLM_LOCK_EX : DLM_LOCK_PR; int status = 0; + mlog_entry_void(); + /* On RO devices, locking really isn't needed... */ if (ocfs2_is_hard_readonly(osb)) { if (ex) @@ -3840,6 +3961,7 @@ int ocfs2_qinfo_lock(struct ocfs2_mem_dqinfo *oinfo, int ex) ocfs2_qinfo_unlock(oinfo, ex); ocfs2_complete_lock_res_refresh(lockres, status); bail: + mlog_exit(status); return status; } @@ -3885,6 +4007,8 @@ static void ocfs2_process_blocked_lock(struct ocfs2_super *osb, * considered valid until we remove the OCFS2_LOCK_QUEUED * flag. */ + mlog_entry_void(); + BUG_ON(!lockres); BUG_ON(!lockres->l_ops); @@ -3918,11 +4042,15 @@ static void ocfs2_process_blocked_lock(struct ocfs2_super *osb, if (ctl.unblock_action != UNBLOCK_CONTINUE && lockres->l_ops->post_unlock) lockres->l_ops->post_unlock(osb, lockres); + + mlog_exit_void(); } static void ocfs2_schedule_blocked_lock(struct ocfs2_super *osb, struct ocfs2_lock_res *lockres) { + mlog_entry_void(); + assert_spin_locked(&lockres->l_lock); if (lockres->l_flags & OCFS2_LOCK_FREEING) { @@ -3943,6 +4071,8 @@ static void ocfs2_schedule_blocked_lock(struct ocfs2_super *osb, osb->blocked_lock_count++; } spin_unlock(&osb->dc_task_lock); + + mlog_exit_void(); } static void ocfs2_downconvert_thread_do_work(struct ocfs2_super *osb) @@ -3950,6 +4080,8 @@ static void ocfs2_downconvert_thread_do_work(struct ocfs2_super *osb) unsigned long processed; struct ocfs2_lock_res *lockres; + mlog_entry_void(); + spin_lock(&osb->dc_task_lock); /* grab this early so we know to try again if a state change and * wake happens part-way through our work */ @@ -3973,6 +4105,8 @@ static void ocfs2_downconvert_thread_do_work(struct ocfs2_super *osb) spin_lock(&osb->dc_task_lock); } spin_unlock(&osb->dc_task_lock); + + mlog_exit_void(); } static int ocfs2_downconvert_thread_lists_empty(struct ocfs2_super *osb) diff --git a/trunk/fs/ocfs2/export.c b/trunk/fs/ocfs2/export.c index 745db42528d5..254652a9b542 100644 --- a/trunk/fs/ocfs2/export.c +++ b/trunk/fs/ocfs2/export.c @@ -26,6 +26,7 @@ #include #include +#define MLOG_MASK_PREFIX ML_EXPORT #include #include "ocfs2.h" @@ -39,7 +40,6 @@ #include "buffer_head_io.h" #include "suballoc.h" -#include "ocfs2_trace.h" struct ocfs2_inode_handle { @@ -56,9 +56,10 @@ static struct dentry *ocfs2_get_dentry(struct super_block *sb, int status, set; struct dentry *result; - trace_ocfs2_get_dentry_begin(sb, handle, (unsigned long long)blkno); + mlog_entry("(0x%p, 0x%p)\n", sb, handle); if (blkno == 0) { + mlog(0, "nfs wants inode with blkno: 0\n"); result = ERR_PTR(-ESTALE); goto bail; } @@ -82,7 +83,6 @@ static struct dentry *ocfs2_get_dentry(struct super_block *sb, } status = ocfs2_test_inode_bit(osb, blkno, &set); - trace_ocfs2_get_dentry_test_bit(status, set); if (status < 0) { if (status == -EINVAL) { /* @@ -90,14 +90,18 @@ static struct dentry *ocfs2_get_dentry(struct super_block *sb, * as an inode, we return -ESTALE to be * nice */ + mlog(0, "test inode bit failed %d\n", status); status = -ESTALE; - } else + } else { mlog(ML_ERROR, "test inode bit failed %d\n", status); + } goto unlock_nfs_sync; } /* If the inode allocator bit is clear, this inode must be stale */ if (!set) { + mlog(0, "inode %llu suballoc bit is clear\n", + (unsigned long long)blkno); status = -ESTALE; goto unlock_nfs_sync; } @@ -110,8 +114,8 @@ static struct dentry *ocfs2_get_dentry(struct super_block *sb, check_err: if (status < 0) { if (status == -ESTALE) { - trace_ocfs2_get_dentry_stale((unsigned long long)blkno, - handle->ih_generation); + mlog(0, "stale inode ino: %llu generation: %u\n", + (unsigned long long)blkno, handle->ih_generation); } result = ERR_PTR(status); goto bail; @@ -126,9 +130,8 @@ static struct dentry *ocfs2_get_dentry(struct super_block *sb, check_gen: if (handle->ih_generation != inode->i_generation) { iput(inode); - trace_ocfs2_get_dentry_generation((unsigned long long)blkno, - handle->ih_generation, - inode->i_generation); + mlog(0, "stale inode ino: %llu generation: %u\n", + (unsigned long long)blkno, handle->ih_generation); result = ERR_PTR(-ESTALE); goto bail; } @@ -138,7 +141,7 @@ static struct dentry *ocfs2_get_dentry(struct super_block *sb, mlog_errno(PTR_ERR(result)); bail: - trace_ocfs2_get_dentry_end(result); + mlog_exit_ptr(result); return result; } @@ -149,8 +152,11 @@ static struct dentry *ocfs2_get_parent(struct dentry *child) struct dentry *parent; struct inode *dir = child->d_inode; - trace_ocfs2_get_parent(child, child->d_name.len, child->d_name.name, - (unsigned long long)OCFS2_I(dir)->ip_blkno); + mlog_entry("(0x%p, '%.*s')\n", child, + child->d_name.len, child->d_name.name); + + mlog(0, "find parent of directory %llu\n", + (unsigned long long)OCFS2_I(dir)->ip_blkno); status = ocfs2_inode_lock(dir, NULL, 0); if (status < 0) { @@ -172,7 +178,7 @@ static struct dentry *ocfs2_get_parent(struct dentry *child) ocfs2_inode_unlock(dir, 0); bail: - trace_ocfs2_get_parent_end(parent); + mlog_exit_ptr(parent); return parent; } @@ -187,9 +193,9 @@ static int ocfs2_encode_fh(struct dentry *dentry, u32 *fh_in, int *max_len, u32 generation; __le32 *fh = (__force __le32 *) fh_in; - trace_ocfs2_encode_fh_begin(dentry, dentry->d_name.len, - dentry->d_name.name, - fh, len, connectable); + mlog_entry("(0x%p, '%.*s', 0x%p, %d, %d)\n", dentry, + dentry->d_name.len, dentry->d_name.name, + fh, len, connectable); if (connectable && (len < 6)) { *max_len = 6; @@ -204,7 +210,8 @@ static int ocfs2_encode_fh(struct dentry *dentry, u32 *fh_in, int *max_len, blkno = OCFS2_I(inode)->ip_blkno; generation = inode->i_generation; - trace_ocfs2_encode_fh_self((unsigned long long)blkno, generation); + mlog(0, "Encoding fh: blkno: %llu, generation: %u\n", + (unsigned long long)blkno, generation); len = 3; fh[0] = cpu_to_le32((u32)(blkno >> 32)); @@ -229,14 +236,14 @@ static int ocfs2_encode_fh(struct dentry *dentry, u32 *fh_in, int *max_len, len = 6; type = 2; - trace_ocfs2_encode_fh_parent((unsigned long long)blkno, - generation); + mlog(0, "Encoding parent: blkno: %llu, generation: %u\n", + (unsigned long long)blkno, generation); } *max_len = len; bail: - trace_ocfs2_encode_fh_type(type); + mlog_exit(type); return type; } diff --git a/trunk/fs/ocfs2/extent_map.c b/trunk/fs/ocfs2/extent_map.c index 23457b491e8c..09e3fdfa6d33 100644 --- a/trunk/fs/ocfs2/extent_map.c +++ b/trunk/fs/ocfs2/extent_map.c @@ -28,6 +28,7 @@ #include #include +#define MLOG_MASK_PREFIX ML_EXTENT_MAP #include #include "ocfs2.h" @@ -38,7 +39,6 @@ #include "inode.h" #include "super.h" #include "symlink.h" -#include "ocfs2_trace.h" #include "buffer_head_io.h" @@ -841,9 +841,10 @@ int ocfs2_read_virt_blocks(struct inode *inode, u64 v_block, int nr, u64 p_block, p_count; int i, count, done = 0; - trace_ocfs2_read_virt_blocks( - inode, (unsigned long long)v_block, nr, bhs, flags, - validate); + mlog_entry("(inode = %p, v_block = %llu, nr = %d, bhs = %p, " + "flags = %x, validate = %p)\n", + inode, (unsigned long long)v_block, nr, bhs, flags, + validate); if (((v_block + nr - 1) << inode->i_sb->s_blocksize_bits) >= i_size_read(inode)) { @@ -896,6 +897,7 @@ int ocfs2_read_virt_blocks(struct inode *inode, u64 v_block, int nr, } out: + mlog_exit(rc); return rc; } diff --git a/trunk/fs/ocfs2/file.c b/trunk/fs/ocfs2/file.c index 41565ae52856..a6651956482e 100644 --- a/trunk/fs/ocfs2/file.c +++ b/trunk/fs/ocfs2/file.c @@ -38,6 +38,7 @@ #include #include +#define MLOG_MASK_PREFIX ML_INODE #include #include "ocfs2.h" @@ -60,7 +61,6 @@ #include "acl.h" #include "quota.h" #include "refcounttree.h" -#include "ocfs2_trace.h" #include "buffer_head_io.h" @@ -99,10 +99,8 @@ static int ocfs2_file_open(struct inode *inode, struct file *file) int mode = file->f_flags; struct ocfs2_inode_info *oi = OCFS2_I(inode); - trace_ocfs2_file_open(inode, file, file->f_path.dentry, - (unsigned long long)OCFS2_I(inode)->ip_blkno, - file->f_path.dentry->d_name.len, - file->f_path.dentry->d_name.name, mode); + mlog_entry("(0x%p, 0x%p, '%.*s')\n", inode, file, + file->f_path.dentry->d_name.len, file->f_path.dentry->d_name.name); if (file->f_mode & FMODE_WRITE) dquot_initialize(inode); @@ -137,6 +135,7 @@ static int ocfs2_file_open(struct inode *inode, struct file *file) } leave: + mlog_exit(status); return status; } @@ -144,19 +143,19 @@ 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); + spin_lock(&oi->ip_lock); if (!--oi->ip_open_count) oi->ip_flags &= ~OCFS2_INODE_OPEN_DIRECT; - - trace_ocfs2_file_release(inode, file, file->f_path.dentry, - oi->ip_blkno, - file->f_path.dentry->d_name.len, - file->f_path.dentry->d_name.name, - oi->ip_open_count); spin_unlock(&oi->ip_lock); ocfs2_free_file_private(inode, file); + mlog_exit(0); + return 0; } @@ -178,11 +177,9 @@ static int ocfs2_sync_file(struct file *file, int datasync) struct inode *inode = file->f_mapping->host; struct ocfs2_super *osb = OCFS2_SB(inode->i_sb); - trace_ocfs2_sync_file(inode, file, file->f_path.dentry, - OCFS2_I(inode)->ip_blkno, - file->f_path.dentry->d_name.len, - file->f_path.dentry->d_name.name, - (unsigned long long)datasync); + mlog_entry("(0x%p, %d, 0x%p, '%.*s')\n", file, datasync, + file->f_path.dentry, file->f_path.dentry->d_name.len, + file->f_path.dentry->d_name.name); if (datasync && !(inode->i_state & I_DIRTY_DATASYNC)) { /* @@ -198,8 +195,7 @@ static int ocfs2_sync_file(struct file *file, int datasync) err = jbd2_journal_force_commit(journal); bail: - if (err) - mlog_errno(err); + mlog_exit(err); return (err < 0) ? -EIO : 0; } @@ -255,6 +251,8 @@ int ocfs2_update_inode_atime(struct inode *inode, handle_t *handle; struct ocfs2_dinode *di = (struct ocfs2_dinode *) bh->b_data; + mlog_entry_void(); + handle = ocfs2_start_trans(osb, OCFS2_INODE_UPDATE_CREDITS); if (IS_ERR(handle)) { ret = PTR_ERR(handle); @@ -282,6 +280,7 @@ int ocfs2_update_inode_atime(struct inode *inode, out_commit: ocfs2_commit_trans(OCFS2_SB(inode->i_sb), handle); out: + mlog_exit(ret); return ret; } @@ -292,6 +291,7 @@ static int ocfs2_set_inode_size(handle_t *handle, { int status; + mlog_entry_void(); i_size_write(inode, new_i_size); inode->i_blocks = ocfs2_inode_sector_count(inode); inode->i_ctime = inode->i_mtime = CURRENT_TIME; @@ -303,6 +303,7 @@ static int ocfs2_set_inode_size(handle_t *handle, } bail: + mlog_exit(status); return status; } @@ -374,6 +375,8 @@ static int ocfs2_orphan_for_truncate(struct ocfs2_super *osb, struct ocfs2_dinode *di; u64 cluster_bytes; + mlog_entry_void(); + /* * We need to CoW the cluster contains the offset if it is reflinked * since we will call ocfs2_zero_range_for_truncate later which will @@ -426,6 +429,8 @@ static int ocfs2_orphan_for_truncate(struct ocfs2_super *osb, out_commit: ocfs2_commit_trans(osb, handle); out: + + mlog_exit(status); return status; } @@ -437,14 +442,14 @@ static int ocfs2_truncate_file(struct inode *inode, struct ocfs2_dinode *fe = NULL; struct ocfs2_super *osb = OCFS2_SB(inode->i_sb); + mlog_entry("(inode = %llu, new_i_size = %llu\n", + (unsigned long long)OCFS2_I(inode)->ip_blkno, + (unsigned long long)new_i_size); + /* We trust di_bh because it comes from ocfs2_inode_lock(), which * already validated it */ fe = (struct ocfs2_dinode *) di_bh->b_data; - trace_ocfs2_truncate_file((unsigned long long)OCFS2_I(inode)->ip_blkno, - (unsigned long long)le64_to_cpu(fe->i_size), - (unsigned long long)new_i_size); - mlog_bug_on_msg(le64_to_cpu(fe->i_size) != i_size_read(inode), "Inode %llu, inode i_size = %lld != di " "i_size = %llu, i_flags = 0x%x\n", @@ -454,14 +459,19 @@ static int ocfs2_truncate_file(struct inode *inode, le32_to_cpu(fe->i_flags)); if (new_i_size > le64_to_cpu(fe->i_size)) { - trace_ocfs2_truncate_file_error( - (unsigned long long)le64_to_cpu(fe->i_size), - (unsigned long long)new_i_size); + mlog(0, "asked to truncate file with size (%llu) to size (%llu)!\n", + (unsigned long long)le64_to_cpu(fe->i_size), + (unsigned long long)new_i_size); status = -EINVAL; mlog_errno(status); goto bail; } + mlog(0, "inode %llu, i_size = %llu, new_i_size = %llu\n", + (unsigned long long)le64_to_cpu(fe->i_blkno), + (unsigned long long)le64_to_cpu(fe->i_size), + (unsigned long long)new_i_size); + /* lets handle the simple truncate cases before doing any more * cluster locking. */ if (new_i_size == le64_to_cpu(fe->i_size)) @@ -515,6 +525,7 @@ static int ocfs2_truncate_file(struct inode *inode, if (!status && OCFS2_I(inode)->ip_clusters == 0) status = ocfs2_try_remove_refcount_tree(inode, di_bh); + mlog_exit(status); return status; } @@ -567,6 +578,8 @@ static int __ocfs2_extend_allocation(struct inode *inode, u32 logical_start, struct ocfs2_extent_tree et; int did_quota = 0; + mlog_entry("(clusters_to_add = %u)\n", clusters_to_add); + /* * This function only exists for file systems which don't * support holes. @@ -583,6 +596,11 @@ static int __ocfs2_extend_allocation(struct inode *inode, u32 logical_start, restart_all: BUG_ON(le32_to_cpu(fe->i_clusters) != OCFS2_I(inode)->ip_clusters); + mlog(0, "extend inode %llu, i_size = %lld, di->i_clusters = %u, " + "clusters_to_add = %u\n", + (unsigned long long)OCFS2_I(inode)->ip_blkno, + (long long)i_size_read(inode), le32_to_cpu(fe->i_clusters), + clusters_to_add); ocfs2_init_dinode_extent_tree(&et, INODE_CACHE(inode), bh); status = ocfs2_lock_allocators(inode, &et, clusters_to_add, 0, &data_ac, &meta_ac); @@ -602,12 +620,6 @@ static int __ocfs2_extend_allocation(struct inode *inode, u32 logical_start, } restarted_transaction: - trace_ocfs2_extend_allocation( - (unsigned long long)OCFS2_I(inode)->ip_blkno, - (unsigned long long)i_size_read(inode), - le32_to_cpu(fe->i_clusters), clusters_to_add, - why, restart_func); - status = dquot_alloc_space_nodirty(inode, ocfs2_clusters_to_bytes(osb->sb, clusters_to_add)); if (status) @@ -654,11 +666,13 @@ static int __ocfs2_extend_allocation(struct inode *inode, u32 logical_start, if (why != RESTART_NONE && clusters_to_add) { if (why == RESTART_META) { + mlog(0, "restarting function.\n"); restart_func = 1; status = 0; } else { BUG_ON(why != RESTART_TRANS); + mlog(0, "restarting transaction.\n"); /* TODO: This can be more intelligent. */ credits = ocfs2_calc_extend_credits(osb->sb, &fe->id2.i_list, @@ -675,11 +689,11 @@ static int __ocfs2_extend_allocation(struct inode *inode, u32 logical_start, } } - trace_ocfs2_extend_allocation_end(OCFS2_I(inode)->ip_blkno, + mlog(0, "fe: i_clusters = %u, i_size=%llu\n", le32_to_cpu(fe->i_clusters), - (unsigned long long)le64_to_cpu(fe->i_size), - OCFS2_I(inode)->ip_clusters, - (unsigned long long)i_size_read(inode)); + (unsigned long long)le64_to_cpu(fe->i_size)); + mlog(0, "inode: ip_clusters=%u, i_size=%lld\n", + OCFS2_I(inode)->ip_clusters, (long long)i_size_read(inode)); leave: if (status < 0 && did_quota) @@ -704,6 +718,7 @@ static int __ocfs2_extend_allocation(struct inode *inode, u32 logical_start, brelse(bh); bh = NULL; + mlog_exit(status); return status; } @@ -770,11 +785,10 @@ static int ocfs2_write_zero_page(struct inode *inode, u64 abs_from, if (!zero_to) zero_to = PAGE_CACHE_SIZE; - trace_ocfs2_write_zero_page( - (unsigned long long)OCFS2_I(inode)->ip_blkno, - (unsigned long long)abs_from, - (unsigned long long)abs_to, - index, zero_from, zero_to); + mlog(0, + "abs_from = %llu, abs_to = %llu, index = %lu, zero_from = %u, zero_to = %u\n", + (unsigned long long)abs_from, (unsigned long long)abs_to, + index, zero_from, zero_to); /* We know that zero_from is block aligned */ for (block_start = zero_from; block_start < zero_to; @@ -914,10 +928,9 @@ static int ocfs2_zero_extend_range(struct inode *inode, u64 range_start, u64 next_pos; u64 zero_pos = range_start; - trace_ocfs2_zero_extend_range( - (unsigned long long)OCFS2_I(inode)->ip_blkno, - (unsigned long long)range_start, - (unsigned long long)range_end); + mlog(0, "range_start = %llu, range_end = %llu\n", + (unsigned long long)range_start, + (unsigned long long)range_end); BUG_ON(range_start >= range_end); while (zero_pos < range_end) { @@ -949,9 +962,9 @@ int ocfs2_zero_extend(struct inode *inode, struct buffer_head *di_bh, struct super_block *sb = inode->i_sb; zero_start = ocfs2_align_bytes_to_blocks(sb, i_size_read(inode)); - trace_ocfs2_zero_extend((unsigned long long)OCFS2_I(inode)->ip_blkno, - (unsigned long long)zero_start, - (unsigned long long)i_size_read(inode)); + mlog(0, "zero_start %llu for i_size %llu\n", + (unsigned long long)zero_start, + (unsigned long long)i_size_read(inode)); while (zero_start < zero_to_size) { ret = ocfs2_zero_extend_get_range(inode, di_bh, zero_start, zero_to_size, @@ -1100,20 +1113,30 @@ int ocfs2_setattr(struct dentry *dentry, struct iattr *attr) struct dquot *transfer_to[MAXQUOTAS] = { }; int qtype; - trace_ocfs2_setattr(inode, dentry, - (unsigned long long)OCFS2_I(inode)->ip_blkno, - dentry->d_name.len, dentry->d_name.name, - attr->ia_valid, attr->ia_mode, - attr->ia_uid, attr->ia_gid); + mlog_entry("(0x%p, '%.*s')\n", dentry, + dentry->d_name.len, dentry->d_name.name); /* ensuring we don't even attempt to truncate a symlink */ if (S_ISLNK(inode->i_mode)) attr->ia_valid &= ~ATTR_SIZE; + if (attr->ia_valid & ATTR_MODE) + mlog(0, "mode change: %d\n", attr->ia_mode); + if (attr->ia_valid & ATTR_UID) + mlog(0, "uid change: %d\n", attr->ia_uid); + if (attr->ia_valid & ATTR_GID) + mlog(0, "gid change: %d\n", attr->ia_gid); + if (attr->ia_valid & ATTR_SIZE) + mlog(0, "size change...\n"); + if (attr->ia_valid & (ATTR_ATIME | ATTR_MTIME | ATTR_CTIME)) + mlog(0, "time change...\n"); + #define OCFS2_VALID_ATTRS (ATTR_ATIME | ATTR_MTIME | ATTR_CTIME | ATTR_SIZE \ | ATTR_GID | ATTR_UID | ATTR_MODE) - if (!(attr->ia_valid & OCFS2_VALID_ATTRS)) + if (!(attr->ia_valid & OCFS2_VALID_ATTRS)) { + mlog(0, "can't handle attrs: 0x%x\n", attr->ia_valid); return 0; + } status = inode_change_ok(inode, attr); if (status) @@ -1251,6 +1274,7 @@ int ocfs2_setattr(struct dentry *dentry, struct iattr *attr) mlog_errno(status); } + mlog_exit(status); return status; } @@ -1263,6 +1287,8 @@ int ocfs2_getattr(struct vfsmount *mnt, struct ocfs2_super *osb = sb->s_fs_info; int err; + mlog_entry_void(); + err = ocfs2_inode_revalidate(dentry); if (err) { if (err != -ENOENT) @@ -1276,6 +1302,8 @@ int ocfs2_getattr(struct vfsmount *mnt, stat->blksize = osb->s_clustersize; bail: + mlog_exit(err); + return err; } @@ -1286,6 +1314,8 @@ int ocfs2_permission(struct inode *inode, int mask, unsigned int flags) if (flags & IPERM_FLAG_RCU) return -ECHILD; + mlog_entry_void(); + ret = ocfs2_inode_lock(inode, NULL, 0); if (ret) { if (ret != -ENOENT) @@ -1297,6 +1327,7 @@ int ocfs2_permission(struct inode *inode, int mask, unsigned int flags) ocfs2_inode_unlock(inode, 0); out: + mlog_exit(ret); return ret; } @@ -1308,9 +1339,8 @@ static int __ocfs2_write_remove_suid(struct inode *inode, struct ocfs2_super *osb = OCFS2_SB(inode->i_sb); struct ocfs2_dinode *di; - trace_ocfs2_write_remove_suid( - (unsigned long long)OCFS2_I(inode)->ip_blkno, - inode->i_mode); + mlog_entry("(Inode %llu, mode 0%o)\n", + (unsigned long long)OCFS2_I(inode)->ip_blkno, inode->i_mode); handle = ocfs2_start_trans(osb, OCFS2_INODE_UPDATE_CREDITS); if (IS_ERR(handle)) { @@ -1338,6 +1368,7 @@ static int __ocfs2_write_remove_suid(struct inode *inode, out_trans: ocfs2_commit_trans(osb, handle); out: + mlog_exit(ret); return ret; } @@ -1516,9 +1547,8 @@ static int ocfs2_zero_partial_clusters(struct inode *inode, * partial clusters here. There's no need to worry about * physical allocation - the zeroing code knows to skip holes. */ - trace_ocfs2_zero_partial_clusters( - (unsigned long long)OCFS2_I(inode)->ip_blkno, - (unsigned long long)start, (unsigned long long)end); + mlog(0, "byte start: %llu, end: %llu\n", + (unsigned long long)start, (unsigned long long)end); /* * If both edges are on a cluster boundary then there's no @@ -1542,8 +1572,8 @@ static int ocfs2_zero_partial_clusters(struct inode *inode, if (tmpend > end) tmpend = end; - trace_ocfs2_zero_partial_clusters_range1((unsigned long long)start, - (unsigned long long)tmpend); + mlog(0, "1st range: start: %llu, tmpend: %llu\n", + (unsigned long long)start, (unsigned long long)tmpend); ret = ocfs2_zero_range_for_truncate(inode, handle, start, tmpend); if (ret) @@ -1557,8 +1587,8 @@ static int ocfs2_zero_partial_clusters(struct inode *inode, */ start = end & ~(osb->s_clustersize - 1); - trace_ocfs2_zero_partial_clusters_range2( - (unsigned long long)start, (unsigned long long)end); + mlog(0, "2nd range: start: %llu, end: %llu\n", + (unsigned long long)start, (unsigned long long)end); ret = ocfs2_zero_range_for_truncate(inode, handle, start, end); if (ret) @@ -1658,11 +1688,6 @@ static int ocfs2_remove_inode_range(struct inode *inode, ocfs2_init_dinode_extent_tree(&et, INODE_CACHE(inode), di_bh); ocfs2_init_dealloc_ctxt(&dealloc); - trace_ocfs2_remove_inode_range( - (unsigned long long)OCFS2_I(inode)->ip_blkno, - (unsigned long long)byte_start, - (unsigned long long)byte_len); - if (byte_len == 0) return 0; @@ -1709,6 +1734,11 @@ static int ocfs2_remove_inode_range(struct inode *inode, trunc_end = (byte_start + byte_len) >> osb->s_clustersize_bits; cluster_in_el = trunc_end; + mlog(0, "Inode: %llu, start: %llu, len: %llu, cstart: %u, cend: %u\n", + (unsigned long long)OCFS2_I(inode)->ip_blkno, + (unsigned long long)byte_start, + (unsigned long long)byte_len, trunc_start, trunc_end); + ret = ocfs2_zero_partial_clusters(inode, byte_start, byte_len); if (ret) { mlog_errno(ret); @@ -2063,7 +2093,7 @@ static int ocfs2_prepare_inode_for_write(struct file *file, int ret = 0, meta_level = 0; struct dentry *dentry = file->f_path.dentry; struct inode *inode = dentry->d_inode; - loff_t saved_pos = 0, end; + loff_t saved_pos, end; /* * We start with a read level meta lock and only jump to an ex @@ -2102,10 +2132,12 @@ static int ocfs2_prepare_inode_for_write(struct file *file, /* work on a copy of ppos until we're sure that we won't have * to recalculate it due to relocking. */ - if (appending) + if (appending) { saved_pos = i_size_read(inode); - else + mlog(0, "O_APPEND: inode->i_size=%llu\n", saved_pos); + } else { saved_pos = *ppos; + } end = saved_pos + count; @@ -2176,10 +2208,6 @@ static int ocfs2_prepare_inode_for_write(struct file *file, *ppos = saved_pos; out_unlock: - trace_ocfs2_prepare_inode_for_write(OCFS2_I(inode)->ip_blkno, - saved_pos, appending, count, - direct_io, has_refcount); - if (meta_level >= 0) ocfs2_inode_unlock(inode, meta_level); @@ -2205,11 +2233,10 @@ static ssize_t ocfs2_file_aio_write(struct kiocb *iocb, int full_coherency = !(osb->s_mount_opt & OCFS2_MOUNT_COHERENCY_BUFFERED); - trace_ocfs2_file_aio_write(inode, file, file->f_path.dentry, - (unsigned long long)OCFS2_I(inode)->ip_blkno, - file->f_path.dentry->d_name.len, - file->f_path.dentry->d_name.name, - (unsigned int)nr_segs); + 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); if (iocb->ki_left == 0) return 0; @@ -2375,6 +2402,7 @@ static ssize_t ocfs2_file_aio_write(struct kiocb *iocb, if (written) ret = written; + mlog_exit(ret); return ret; } @@ -2410,11 +2438,10 @@ static ssize_t ocfs2_file_splice_write(struct pipe_inode_info *pipe, .u.file = out, }; - - trace_ocfs2_file_splice_write(inode, out, out->f_path.dentry, - (unsigned long long)OCFS2_I(inode)->ip_blkno, - out->f_path.dentry->d_name.len, - out->f_path.dentry->d_name.name, len); + 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); if (pipe->inode) mutex_lock_nested(&pipe->inode->i_mutex, I_MUTEX_PARENT); @@ -2458,6 +2485,7 @@ static ssize_t ocfs2_file_splice_write(struct pipe_inode_info *pipe, balance_dirty_pages_ratelimited_nr(mapping, nr_pages); } + mlog_exit(ret); return ret; } @@ -2470,10 +2498,10 @@ static ssize_t ocfs2_file_splice_read(struct file *in, int ret = 0, lock_level = 0; struct inode *inode = in->f_path.dentry->d_inode; - trace_ocfs2_file_splice_read(inode, in, in->f_path.dentry, - (unsigned long long)OCFS2_I(inode)->ip_blkno, - in->f_path.dentry->d_name.len, - in->f_path.dentry->d_name.name, len); + 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); /* * See the comment in ocfs2_file_aio_read() @@ -2488,6 +2516,7 @@ static ssize_t ocfs2_file_splice_read(struct file *in, ret = generic_file_splice_read(in, ppos, pipe, len, flags); bail: + mlog_exit(ret); return ret; } @@ -2500,11 +2529,10 @@ static ssize_t ocfs2_file_aio_read(struct kiocb *iocb, struct file *filp = iocb->ki_filp; struct inode *inode = filp->f_path.dentry->d_inode; - trace_ocfs2_file_aio_read(inode, filp, filp->f_path.dentry, - (unsigned long long)OCFS2_I(inode)->ip_blkno, - filp->f_path.dentry->d_name.len, - filp->f_path.dentry->d_name.name, nr_segs); - + 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); if (!inode) { ret = -EINVAL; @@ -2550,7 +2578,8 @@ static ssize_t ocfs2_file_aio_read(struct kiocb *iocb, ocfs2_inode_unlock(inode, lock_level); ret = generic_file_aio_read(iocb, iov, nr_segs, iocb->ki_pos); - trace_generic_file_aio_read_ret(ret); + if (ret == -EINVAL) + mlog(0, "generic_file_aio_read returned -EINVAL\n"); /* buffered aio wouldn't have proper lock coverage today */ BUG_ON(ret == -EIOCBQUEUED && !(filp->f_flags & O_DIRECT)); @@ -2568,6 +2597,7 @@ static ssize_t ocfs2_file_aio_read(struct kiocb *iocb, } if (rw_level != -1) ocfs2_rw_unlock(inode, rw_level); + mlog_exit(ret); return ret; } diff --git a/trunk/fs/ocfs2/heartbeat.c b/trunk/fs/ocfs2/heartbeat.c index d8208b20dc53..1aa863dd901f 100644 --- a/trunk/fs/ocfs2/heartbeat.c +++ b/trunk/fs/ocfs2/heartbeat.c @@ -28,6 +28,7 @@ #include #include +#define MLOG_MASK_PREFIX ML_SUPER #include #include "ocfs2.h" @@ -36,7 +37,6 @@ #include "heartbeat.h" #include "inode.h" #include "journal.h" -#include "ocfs2_trace.h" #include "buffer_head_io.h" @@ -66,7 +66,7 @@ void ocfs2_do_node_down(int node_num, void *data) BUG_ON(osb->node_num == node_num); - trace_ocfs2_do_node_down(node_num); + mlog(0, "ocfs2: node down event for %d\n", node_num); if (!osb->cconn) { /* diff --git a/trunk/fs/ocfs2/inode.c b/trunk/fs/ocfs2/inode.c index 177d3a6c2a5f..4068c6c4c6f6 100644 --- a/trunk/fs/ocfs2/inode.c +++ b/trunk/fs/ocfs2/inode.c @@ -31,6 +31,7 @@ #include +#define MLOG_MASK_PREFIX ML_INODE #include #include "ocfs2.h" @@ -52,7 +53,6 @@ #include "uptodate.h" #include "xattr.h" #include "refcounttree.h" -#include "ocfs2_trace.h" #include "buffer_head_io.h" @@ -131,8 +131,7 @@ struct inode *ocfs2_iget(struct ocfs2_super *osb, u64 blkno, unsigned flags, struct super_block *sb = osb->sb; struct ocfs2_find_inode_args args; - trace_ocfs2_iget_begin((unsigned long long)blkno, flags, - sysfile_type); + mlog_entry("(blkno = %llu)\n", (unsigned long long)blkno); /* Ok. By now we've either got the offsets passed to us by the * caller, or we just pulled them off the bh. Lets do some @@ -153,16 +152,16 @@ struct inode *ocfs2_iget(struct ocfs2_super *osb, u64 blkno, unsigned flags, /* inode was *not* in the inode cache. 2.6.x requires * us to do our own read_inode call and unlock it * afterwards. */ + if (inode && inode->i_state & I_NEW) { + mlog(0, "Inode was not in inode cache, reading it.\n"); + ocfs2_read_locked_inode(inode, &args); + unlock_new_inode(inode); + } if (inode == NULL) { inode = ERR_PTR(-ENOMEM); mlog_errno(PTR_ERR(inode)); goto bail; } - trace_ocfs2_iget5_locked(inode->i_state); - if (inode->i_state & I_NEW) { - ocfs2_read_locked_inode(inode, &args); - unlock_new_inode(inode); - } if (is_bad_inode(inode)) { iput(inode); inode = ERR_PTR(-ESTALE); @@ -171,8 +170,9 @@ struct inode *ocfs2_iget(struct ocfs2_super *osb, u64 blkno, unsigned flags, bail: if (!IS_ERR(inode)) { - trace_ocfs2_iget_end(inode, - (unsigned long long)OCFS2_I(inode)->ip_blkno); + mlog(0, "returning inode with number %llu\n", + (unsigned long long)OCFS2_I(inode)->ip_blkno); + mlog_exit_ptr(inode); } return inode; @@ -192,17 +192,18 @@ static int ocfs2_find_actor(struct inode *inode, void *opaque) struct ocfs2_inode_info *oi = OCFS2_I(inode); int ret = 0; + mlog_entry("(0x%p, %lu, 0x%p)\n", inode, inode->i_ino, opaque); + args = opaque; mlog_bug_on_msg(!inode, "No inode in find actor!\n"); - trace_ocfs2_find_actor(inode, inode->i_ino, opaque, args->fi_blkno); - if (oi->ip_blkno != args->fi_blkno) goto bail; ret = 1; bail: + mlog_exit(ret); return ret; } @@ -217,6 +218,8 @@ static int ocfs2_init_locked_inode(struct inode *inode, void *opaque) static struct lock_class_key ocfs2_quota_ip_alloc_sem_key, ocfs2_file_ip_alloc_sem_key; + mlog_entry("inode = %p, opaque = %p\n", inode, opaque); + inode->i_ino = args->fi_ino; OCFS2_I(inode)->ip_blkno = args->fi_blkno; if (args->fi_sysfile_type != 0) @@ -232,6 +235,7 @@ static int ocfs2_init_locked_inode(struct inode *inode, void *opaque) lockdep_set_class(&OCFS2_I(inode)->ip_alloc_sem, &ocfs2_file_ip_alloc_sem_key); + mlog_exit(0); return 0; } @@ -242,6 +246,9 @@ void ocfs2_populate_inode(struct inode *inode, struct ocfs2_dinode *fe, struct ocfs2_super *osb; int use_plocks = 1; + mlog_entry("(0x%p, size:%llu)\n", inode, + (unsigned long long)le64_to_cpu(fe->i_size)); + sb = inode->i_sb; osb = OCFS2_SB(sb); @@ -293,20 +300,20 @@ void ocfs2_populate_inode(struct inode *inode, struct ocfs2_dinode *fe, inode->i_nlink = ocfs2_read_links_count(fe); - trace_ocfs2_populate_inode(OCFS2_I(inode)->ip_blkno, - le32_to_cpu(fe->i_flags)); if (fe->i_flags & cpu_to_le32(OCFS2_SYSTEM_FL)) { OCFS2_I(inode)->ip_flags |= OCFS2_INODE_SYSTEM_FILE; inode->i_flags |= S_NOQUOTA; } - + if (fe->i_flags & cpu_to_le32(OCFS2_LOCAL_ALLOC_FL)) { OCFS2_I(inode)->ip_flags |= OCFS2_INODE_BITMAP; + mlog(0, "local alloc inode: i_ino=%lu\n", inode->i_ino); } else if (fe->i_flags & cpu_to_le32(OCFS2_BITMAP_FL)) { OCFS2_I(inode)->ip_flags |= OCFS2_INODE_BITMAP; } else if (fe->i_flags & cpu_to_le32(OCFS2_QUOTA_FL)) { inode->i_flags |= S_NOQUOTA; } else if (fe->i_flags & cpu_to_le32(OCFS2_SUPER_BLOCK_FL)) { + mlog(0, "superblock inode: i_ino=%lu\n", inode->i_ino); /* we can't actually hit this as read_inode can't * handle superblocks today ;-) */ BUG(); @@ -374,6 +381,7 @@ void ocfs2_populate_inode(struct inode *inode, struct ocfs2_dinode *fe, if (S_ISDIR(inode->i_mode)) ocfs2_resv_set_type(&OCFS2_I(inode)->ip_la_data_resv, OCFS2_RESV_FLAG_DIR); + mlog_exit_void(); } static int ocfs2_read_locked_inode(struct inode *inode, @@ -386,6 +394,8 @@ static int ocfs2_read_locked_inode(struct inode *inode, int status, can_lock; u32 generation = 0; + mlog_entry("(0x%p, 0x%p)\n", inode, args); + status = -EINVAL; if (inode == NULL || inode->i_sb == NULL) { mlog(ML_ERROR, "bad inode\n"); @@ -433,9 +443,6 @@ static int ocfs2_read_locked_inode(struct inode *inode, && !(args->fi_flags & OCFS2_FI_FLAG_ORPHAN_RECOVERY) && !ocfs2_mount_local(osb); - trace_ocfs2_read_locked_inode( - (unsigned long long)OCFS2_I(inode)->ip_blkno, can_lock); - /* * To maintain backwards compatibility with older versions of * ocfs2-tools, we still store the generation value for system @@ -527,6 +534,7 @@ static int ocfs2_read_locked_inode(struct inode *inode, if (args && bh) brelse(bh); + mlog_exit(status); return status; } @@ -543,6 +551,8 @@ static int ocfs2_truncate_for_delete(struct ocfs2_super *osb, struct ocfs2_dinode *fe; handle_t *handle = NULL; + mlog_entry_void(); + fe = (struct ocfs2_dinode *) fe_bh->b_data; /* @@ -590,6 +600,7 @@ static int ocfs2_truncate_for_delete(struct ocfs2_super *osb, out: if (handle) ocfs2_commit_trans(osb, handle); + mlog_exit(status); return status; } @@ -685,6 +696,8 @@ static int ocfs2_check_orphan_recovery_state(struct ocfs2_super *osb, spin_lock(&osb->osb_lock); if (ocfs2_node_map_test_bit(osb, &osb->osb_recovering_orphan_dirs, slot)) { + mlog(0, "Recovery is happening on orphan dir %d, will skip " + "this inode\n", slot); ret = -EDEADLK; goto out; } @@ -693,7 +706,6 @@ static int ocfs2_check_orphan_recovery_state(struct ocfs2_super *osb, osb->osb_orphan_wipes[slot]++; out: spin_unlock(&osb->osb_lock); - trace_ocfs2_check_orphan_recovery_state(slot, ret); return ret; } @@ -804,10 +816,6 @@ static int ocfs2_inode_is_valid_to_delete(struct inode *inode) struct ocfs2_inode_info *oi = OCFS2_I(inode); struct ocfs2_super *osb = OCFS2_SB(inode->i_sb); - trace_ocfs2_inode_is_valid_to_delete(current, osb->dc_task, - (unsigned long long)oi->ip_blkno, - oi->ip_flags); - /* We shouldn't be getting here for the root directory * inode.. */ if (inode == osb->root_inode) { @@ -820,8 +828,11 @@ static int ocfs2_inode_is_valid_to_delete(struct inode *inode) * have to skip deleting this guy. That's OK though because * the node who's doing the actual deleting should handle it * anyway. */ - if (current == osb->dc_task) + if (current == osb->dc_task) { + mlog(0, "Skipping delete of %lu because we're currently " + "in downconvert\n", inode->i_ino); goto bail; + } spin_lock(&oi->ip_lock); /* OCFS2 *never* deletes system files. This should technically @@ -836,8 +847,11 @@ static int ocfs2_inode_is_valid_to_delete(struct inode *inode) /* If we have allowd wipe of this inode for another node, it * will be marked here so we can safely skip it. Recovery will * cleanup any inodes we might inadvertantly skip here. */ - if (oi->ip_flags & OCFS2_INODE_SKIP_DELETE) + if (oi->ip_flags & OCFS2_INODE_SKIP_DELETE) { + mlog(0, "Skipping delete of %lu because another node " + "has done this for us.\n", inode->i_ino); goto bail_unlock; + } ret = 1; bail_unlock: @@ -854,27 +868,28 @@ static int ocfs2_query_inode_wipe(struct inode *inode, struct buffer_head *di_bh, int *wipe) { - int status = 0, reason = 0; + int status = 0; struct ocfs2_inode_info *oi = OCFS2_I(inode); struct ocfs2_dinode *di; *wipe = 0; - trace_ocfs2_query_inode_wipe_begin((unsigned long long)oi->ip_blkno, - inode->i_nlink); - /* While we were waiting for the cluster lock in * ocfs2_delete_inode, another node might have asked to delete * the inode. Recheck our flags to catch this. */ if (!ocfs2_inode_is_valid_to_delete(inode)) { - reason = 1; + mlog(0, "Skipping delete of %llu because flags changed\n", + (unsigned long long)oi->ip_blkno); goto bail; } /* Now that we have an up to date inode, we can double check * the link count. */ - if (inode->i_nlink) + if (inode->i_nlink) { + mlog(0, "Skipping delete of %llu because nlink = %u\n", + (unsigned long long)oi->ip_blkno, inode->i_nlink); goto bail; + } /* Do some basic inode verification... */ di = (struct ocfs2_dinode *) di_bh->b_data; @@ -889,7 +904,9 @@ static int ocfs2_query_inode_wipe(struct inode *inode, * ORPHANED_FL not. */ if (di->i_dyn_features & cpu_to_le16(OCFS2_HAS_REFCOUNT_FL)) { - reason = 2; + mlog(0, "Reflinked inode %llu is no longer orphaned. " + "it shouldn't be deleted\n", + (unsigned long long)oi->ip_blkno); goto bail; } @@ -926,7 +943,8 @@ static int ocfs2_query_inode_wipe(struct inode *inode, status = ocfs2_try_open_lock(inode, 1); if (status == -EAGAIN) { status = 0; - reason = 3; + mlog(0, "Skipping delete of %llu because it is in use on " + "other nodes\n", (unsigned long long)oi->ip_blkno); goto bail; } if (status < 0) { @@ -935,10 +953,11 @@ static int ocfs2_query_inode_wipe(struct inode *inode, } *wipe = 1; - trace_ocfs2_query_inode_wipe_succ(le16_to_cpu(di->i_orphaned_slot)); + mlog(0, "Inode %llu is ok to wipe from orphan dir %u\n", + (unsigned long long)oi->ip_blkno, + le16_to_cpu(di->i_orphaned_slot)); bail: - trace_ocfs2_query_inode_wipe_end(status, reason); return status; } @@ -948,8 +967,8 @@ static int ocfs2_query_inode_wipe(struct inode *inode, static void ocfs2_cleanup_delete_inode(struct inode *inode, int sync_data) { - trace_ocfs2_cleanup_delete_inode( - (unsigned long long)OCFS2_I(inode)->ip_blkno, sync_data); + mlog(0, "Cleanup inode %llu, sync = %d\n", + (unsigned long long)OCFS2_I(inode)->ip_blkno, sync_data); if (sync_data) write_inode_now(inode, 1); truncate_inode_pages(&inode->i_data, 0); @@ -961,15 +980,15 @@ static void ocfs2_delete_inode(struct inode *inode) sigset_t oldset; struct buffer_head *di_bh = NULL; - trace_ocfs2_delete_inode(inode->i_ino, - (unsigned long long)OCFS2_I(inode)->ip_blkno, - is_bad_inode(inode)); + mlog_entry("(inode->i_ino = %lu)\n", inode->i_ino); /* When we fail in read_inode() we mark inode as bad. The second test * catches the case when inode allocation fails before allocating * a block for inode. */ - if (is_bad_inode(inode) || !OCFS2_I(inode)->ip_blkno) + if (is_bad_inode(inode) || !OCFS2_I(inode)->ip_blkno) { + mlog(0, "Skipping delete of bad inode\n"); goto bail; + } dquot_initialize(inode); @@ -1061,7 +1080,7 @@ static void ocfs2_delete_inode(struct inode *inode) bail_unblock: ocfs2_unblock_signals(&oldset); bail: - return; + mlog_exit_void(); } static void ocfs2_clear_inode(struct inode *inode) @@ -1069,9 +1088,11 @@ static void ocfs2_clear_inode(struct inode *inode) int status; struct ocfs2_inode_info *oi = OCFS2_I(inode); + mlog_entry_void(); + end_writeback(inode); - trace_ocfs2_clear_inode((unsigned long long)oi->ip_blkno, - inode->i_nlink); + mlog(0, "Clearing inode: %llu, nlink = %u\n", + (unsigned long long)OCFS2_I(inode)->ip_blkno, inode->i_nlink); mlog_bug_on_msg(OCFS2_SB(inode->i_sb) == NULL, "Inode=%lu\n", inode->i_ino); @@ -1160,6 +1181,8 @@ static void ocfs2_clear_inode(struct inode *inode) */ jbd2_journal_release_jbd_inode(OCFS2_SB(inode->i_sb)->journal->j_journal, &oi->ip_jinode); + + mlog_exit_void(); } void ocfs2_evict_inode(struct inode *inode) @@ -1181,14 +1204,17 @@ int ocfs2_drop_inode(struct inode *inode) struct ocfs2_inode_info *oi = OCFS2_I(inode); int res; - trace_ocfs2_drop_inode((unsigned long long)oi->ip_blkno, - inode->i_nlink, oi->ip_flags); + mlog_entry_void(); + + mlog(0, "Drop inode %llu, nlink = %u, ip_flags = 0x%x\n", + (unsigned long long)oi->ip_blkno, inode->i_nlink, oi->ip_flags); if (oi->ip_flags & OCFS2_INODE_MAYBE_ORPHANED) res = 1; else res = generic_drop_inode(inode); + mlog_exit_void(); return res; } @@ -1200,11 +1226,11 @@ int ocfs2_inode_revalidate(struct dentry *dentry) struct inode *inode = dentry->d_inode; int status = 0; - trace_ocfs2_inode_revalidate(inode, - inode ? (unsigned long long)OCFS2_I(inode)->ip_blkno : 0ULL, - inode ? (unsigned long long)OCFS2_I(inode)->ip_flags : 0); + mlog_entry("(inode = 0x%p, ino = %llu)\n", inode, + inode ? (unsigned long long)OCFS2_I(inode)->ip_blkno : 0ULL); if (!inode) { + mlog(0, "eep, no inode!\n"); status = -ENOENT; goto bail; } @@ -1212,6 +1238,7 @@ int ocfs2_inode_revalidate(struct dentry *dentry) spin_lock(&OCFS2_I(inode)->ip_lock); if (OCFS2_I(inode)->ip_flags & OCFS2_INODE_DELETED) { spin_unlock(&OCFS2_I(inode)->ip_lock); + mlog(0, "inode deleted!\n"); status = -ENOENT; goto bail; } @@ -1227,6 +1254,8 @@ int ocfs2_inode_revalidate(struct dentry *dentry) } ocfs2_inode_unlock(inode, 0); bail: + mlog_exit(status); + return status; } @@ -1242,7 +1271,8 @@ int ocfs2_mark_inode_dirty(handle_t *handle, int status; struct ocfs2_dinode *fe = (struct ocfs2_dinode *) bh->b_data; - trace_ocfs2_mark_inode_dirty((unsigned long long)OCFS2_I(inode)->ip_blkno); + mlog_entry("(inode %llu)\n", + (unsigned long long)OCFS2_I(inode)->ip_blkno); status = ocfs2_journal_access_di(handle, INODE_CACHE(inode), bh, OCFS2_JOURNAL_ACCESS_WRITE); @@ -1272,6 +1302,7 @@ int ocfs2_mark_inode_dirty(handle_t *handle, ocfs2_journal_dirty(handle, bh); leave: + mlog_exit(status); return status; } @@ -1314,7 +1345,8 @@ int ocfs2_validate_inode_block(struct super_block *sb, int rc; struct ocfs2_dinode *di = (struct ocfs2_dinode *)bh->b_data; - trace_ocfs2_validate_inode_block((unsigned long long)bh->b_blocknr); + mlog(0, "Validating dinode %llu\n", + (unsigned long long)bh->b_blocknr); BUG_ON(!buffer_uptodate(bh)); diff --git a/trunk/fs/ocfs2/ioctl.c b/trunk/fs/ocfs2/ioctl.c index 8f13c5989eae..09de77ce002a 100644 --- a/trunk/fs/ocfs2/ioctl.c +++ b/trunk/fs/ocfs2/ioctl.c @@ -9,6 +9,7 @@ #include #include +#define MLOG_MASK_PREFIX ML_INODE #include #include "ocfs2.h" @@ -45,22 +46,6 @@ static inline void __o2info_set_request_error(struct ocfs2_info_request *kreq, #define o2info_set_request_error(a, b) \ __o2info_set_request_error((struct ocfs2_info_request *)&(a), b) -static inline void __o2info_set_request_filled(struct ocfs2_info_request *req) -{ - req->ir_flags |= OCFS2_INFO_FL_FILLED; -} - -#define o2info_set_request_filled(a) \ - __o2info_set_request_filled((struct ocfs2_info_request *)&(a)) - -static inline void __o2info_clear_request_filled(struct ocfs2_info_request *req) -{ - req->ir_flags &= ~OCFS2_INFO_FL_FILLED; -} - -#define o2info_clear_request_filled(a) \ - __o2info_clear_request_filled((struct ocfs2_info_request *)&(a)) - static int ocfs2_get_inode_attr(struct inode *inode, unsigned *flags) { int status; @@ -74,6 +59,7 @@ static int ocfs2_get_inode_attr(struct inode *inode, unsigned *flags) *flags = OCFS2_I(inode)->ip_attr; ocfs2_inode_unlock(inode, 0); + mlog_exit(status); return status; } @@ -139,6 +125,7 @@ static int ocfs2_set_inode_attr(struct inode *inode, unsigned flags, brelse(bh); + mlog_exit(status); return status; } @@ -152,8 +139,7 @@ int ocfs2_info_handle_blocksize(struct inode *inode, goto bail; oib.ib_blocksize = inode->i_sb->s_blocksize; - - o2info_set_request_filled(oib); + oib.ib_req.ir_flags |= OCFS2_INFO_FL_FILLED; if (o2info_to_user(oib, req)) goto bail; @@ -177,8 +163,7 @@ int ocfs2_info_handle_clustersize(struct inode *inode, goto bail; oic.ic_clustersize = osb->s_clustersize; - - o2info_set_request_filled(oic); + oic.ic_req.ir_flags |= OCFS2_INFO_FL_FILLED; if (o2info_to_user(oic, req)) goto bail; @@ -202,8 +187,7 @@ int ocfs2_info_handle_maxslots(struct inode *inode, goto bail; oim.im_max_slots = osb->max_slots; - - o2info_set_request_filled(oim); + oim.im_req.ir_flags |= OCFS2_INFO_FL_FILLED; if (o2info_to_user(oim, req)) goto bail; @@ -227,8 +211,7 @@ int ocfs2_info_handle_label(struct inode *inode, goto bail; memcpy(oil.il_label, osb->vol_label, OCFS2_MAX_VOL_LABEL_LEN); - - o2info_set_request_filled(oil); + oil.il_req.ir_flags |= OCFS2_INFO_FL_FILLED; if (o2info_to_user(oil, req)) goto bail; @@ -252,8 +235,7 @@ int ocfs2_info_handle_uuid(struct inode *inode, goto bail; memcpy(oiu.iu_uuid_str, osb->uuid_str, OCFS2_TEXT_UUID_LEN + 1); - - o2info_set_request_filled(oiu); + oiu.iu_req.ir_flags |= OCFS2_INFO_FL_FILLED; if (o2info_to_user(oiu, req)) goto bail; @@ -279,8 +261,7 @@ int ocfs2_info_handle_fs_features(struct inode *inode, oif.if_compat_features = osb->s_feature_compat; oif.if_incompat_features = osb->s_feature_incompat; oif.if_ro_compat_features = osb->s_feature_ro_compat; - - o2info_set_request_filled(oif); + oif.if_req.ir_flags |= OCFS2_INFO_FL_FILLED; if (o2info_to_user(oif, req)) goto bail; @@ -305,7 +286,7 @@ int ocfs2_info_handle_journal_size(struct inode *inode, oij.ij_journal_size = osb->journal->j_inode->i_size; - o2info_set_request_filled(oij); + oij.ij_req.ir_flags |= OCFS2_INFO_FL_FILLED; if (o2info_to_user(oij, req)) goto bail; @@ -327,7 +308,7 @@ int ocfs2_info_handle_unknown(struct inode *inode, if (o2info_from_user(oir, req)) goto bail; - o2info_clear_request_filled(oir); + oir.ir_flags &= ~OCFS2_INFO_FL_FILLED; if (o2info_to_user(oir, req)) goto bail; diff --git a/trunk/fs/ocfs2/journal.c b/trunk/fs/ocfs2/journal.c index dcc2d9327150..faa2303dbf0a 100644 --- a/trunk/fs/ocfs2/journal.c +++ b/trunk/fs/ocfs2/journal.c @@ -31,6 +31,7 @@ #include #include +#define MLOG_MASK_PREFIX ML_JOURNAL #include #include "ocfs2.h" @@ -51,7 +52,6 @@ #include "quota.h" #include "buffer_head_io.h" -#include "ocfs2_trace.h" DEFINE_SPINLOCK(trans_inc_lock); @@ -303,15 +303,16 @@ static int ocfs2_commit_cache(struct ocfs2_super *osb) unsigned int flushed; struct ocfs2_journal *journal = NULL; + mlog_entry_void(); + journal = osb->journal; /* Flush all pending commits and checkpoint the journal. */ down_write(&journal->j_trans_barrier); - flushed = atomic_read(&journal->j_num_trans); - trace_ocfs2_commit_cache_begin(flushed); - if (flushed == 0) { + if (atomic_read(&journal->j_num_trans) == 0) { up_write(&journal->j_trans_barrier); + mlog(0, "No transactions for me to flush!\n"); goto finally; } @@ -330,11 +331,13 @@ static int ocfs2_commit_cache(struct ocfs2_super *osb) atomic_set(&journal->j_num_trans, 0); up_write(&journal->j_trans_barrier); - trace_ocfs2_commit_cache_end(journal->j_trans_id, flushed); + mlog(0, "commit_thread: flushed transaction %lu (%u handles)\n", + journal->j_trans_id, flushed); ocfs2_wake_downconvert_thread(osb); wake_up(&journal->j_checkpointed); finally: + mlog_exit(status); return status; } @@ -422,8 +425,9 @@ int ocfs2_extend_trans(handle_t *handle, int nblocks) return 0; old_nblocks = handle->h_buffer_credits; + mlog_entry_void(); - trace_ocfs2_extend_trans(old_nblocks, nblocks); + mlog(0, "Trying to extend transaction by %d blocks\n", nblocks); #ifdef CONFIG_OCFS2_DEBUG_FS status = 1; @@ -436,7 +440,9 @@ int ocfs2_extend_trans(handle_t *handle, int nblocks) #endif if (status > 0) { - trace_ocfs2_extend_trans_restart(old_nblocks + nblocks); + mlog(0, + "jbd2_journal_extend failed, trying " + "jbd2_journal_restart\n"); status = jbd2_journal_restart(handle, old_nblocks + nblocks); if (status < 0) { @@ -447,6 +453,8 @@ int ocfs2_extend_trans(handle_t *handle, int nblocks) status = 0; bail: + + mlog_exit(status); return status; } @@ -614,9 +622,12 @@ static int __ocfs2_journal_access(handle_t *handle, BUG_ON(!handle); BUG_ON(!bh); - trace_ocfs2_journal_access( - (unsigned long long)ocfs2_metadata_cache_owner(ci), - (unsigned long long)bh->b_blocknr, type, bh->b_size); + mlog_entry("bh->b_blocknr=%llu, type=%d (\"%s\"), bh->b_size = %zu\n", + (unsigned long long)bh->b_blocknr, type, + (type == OCFS2_JOURNAL_ACCESS_CREATE) ? + "OCFS2_JOURNAL_ACCESS_CREATE" : + "OCFS2_JOURNAL_ACCESS_WRITE", + bh->b_size); /* we can safely remove this assertion after testing. */ if (!buffer_uptodate(bh)) { @@ -657,6 +668,7 @@ static int __ocfs2_journal_access(handle_t *handle, mlog(ML_ERROR, "Error %d getting %d access to buffer!\n", status, type); + mlog_exit(status); return status; } @@ -725,10 +737,13 @@ void ocfs2_journal_dirty(handle_t *handle, struct buffer_head *bh) { int status; - trace_ocfs2_journal_dirty((unsigned long long)bh->b_blocknr); + mlog_entry("(bh->b_blocknr=%llu)\n", + (unsigned long long)bh->b_blocknr); status = jbd2_journal_dirty_metadata(handle, bh); BUG_ON(status); + + mlog_exit_void(); } #define OCFS2_DEFAULT_COMMIT_INTERVAL (HZ * JBD2_DEFAULT_MAX_COMMIT_AGE) @@ -760,6 +775,8 @@ int ocfs2_journal_init(struct ocfs2_journal *journal, int *dirty) struct ocfs2_super *osb; int inode_lock = 0; + mlog_entry_void(); + BUG_ON(!journal); osb = journal->j_osb; @@ -803,9 +820,10 @@ int ocfs2_journal_init(struct ocfs2_journal *journal, int *dirty) goto done; } - trace_ocfs2_journal_init(inode->i_size, - (unsigned long long)inode->i_blocks, - OCFS2_I(inode)->ip_clusters); + mlog(0, "inode->i_size = %lld\n", inode->i_size); + mlog(0, "inode->i_blocks = %llu\n", + (unsigned long long)inode->i_blocks); + mlog(0, "inode->ip_clusters = %u\n", OCFS2_I(inode)->ip_clusters); /* call the kernels journal init function now */ j_journal = jbd2_journal_init_inode(inode); @@ -815,7 +833,8 @@ int ocfs2_journal_init(struct ocfs2_journal *journal, int *dirty) goto done; } - trace_ocfs2_journal_init_maxlen(j_journal->j_maxlen); + mlog(0, "Returned from jbd2_journal_init_inode\n"); + mlog(0, "j_journal->j_maxlen = %u\n", j_journal->j_maxlen); *dirty = (le32_to_cpu(di->id1.journal1.ij_flags) & OCFS2_JOURNAL_DIRTY_FL); @@ -840,6 +859,7 @@ int ocfs2_journal_init(struct ocfs2_journal *journal, int *dirty) } } + mlog_exit(status); return status; } @@ -862,6 +882,8 @@ static int ocfs2_journal_toggle_dirty(struct ocfs2_super *osb, struct buffer_head *bh = journal->j_bh; struct ocfs2_dinode *fe; + mlog_entry_void(); + fe = (struct ocfs2_dinode *)bh->b_data; /* The journal bh on the osb always comes from ocfs2_journal_init() @@ -884,6 +906,7 @@ static int ocfs2_journal_toggle_dirty(struct ocfs2_super *osb, if (status < 0) mlog_errno(status); + mlog_exit(status); return status; } @@ -898,6 +921,8 @@ void ocfs2_journal_shutdown(struct ocfs2_super *osb) struct inode *inode = NULL; int num_running_trans = 0; + mlog_entry_void(); + BUG_ON(!osb); journal = osb->journal; @@ -914,7 +939,10 @@ void ocfs2_journal_shutdown(struct ocfs2_super *osb) BUG(); num_running_trans = atomic_read(&(osb->journal->j_num_trans)); - trace_ocfs2_journal_shutdown(num_running_trans); + if (num_running_trans > 0) + mlog(0, "Shutting down journal: must wait on %d " + "running transactions!\n", + num_running_trans); /* Do a commit_cache here. It will flush our journal, *and* * release any locks that are still held. @@ -927,7 +955,7 @@ void ocfs2_journal_shutdown(struct ocfs2_super *osb) * completely destroy the journal. */ if (osb->commit_task) { /* Wait for the commit thread */ - trace_ocfs2_journal_shutdown_wait(osb->commit_task); + mlog(0, "Waiting for ocfs2commit to exit....\n"); kthread_stop(osb->commit_task); osb->commit_task = NULL; } @@ -970,6 +998,7 @@ void ocfs2_journal_shutdown(struct ocfs2_super *osb) done: if (inode) iput(inode); + mlog_exit_void(); } static void ocfs2_clear_journal_error(struct super_block *sb, @@ -995,6 +1024,8 @@ int ocfs2_journal_load(struct ocfs2_journal *journal, int local, int replayed) int status = 0; struct ocfs2_super *osb; + mlog_entry_void(); + BUG_ON(!journal); osb = journal->j_osb; @@ -1028,6 +1059,7 @@ int ocfs2_journal_load(struct ocfs2_journal *journal, int local, int replayed) osb->commit_task = NULL; done: + mlog_exit(status); return status; } @@ -1038,6 +1070,8 @@ int ocfs2_journal_wipe(struct ocfs2_journal *journal, int full) { int status; + mlog_entry_void(); + BUG_ON(!journal); status = jbd2_journal_wipe(journal->j_journal, full); @@ -1051,6 +1085,7 @@ int ocfs2_journal_wipe(struct ocfs2_journal *journal, int full) mlog_errno(status); bail: + mlog_exit(status); return status; } @@ -1089,6 +1124,8 @@ static int ocfs2_force_read_journal(struct inode *inode) #define CONCURRENT_JOURNAL_FILL 32ULL struct buffer_head *bhs[CONCURRENT_JOURNAL_FILL]; + mlog_entry_void(); + memset(bhs, 0, sizeof(struct buffer_head *) * CONCURRENT_JOURNAL_FILL); num_blocks = ocfs2_blocks_for_bytes(inode->i_sb, inode->i_size); @@ -1124,6 +1161,7 @@ static int ocfs2_force_read_journal(struct inode *inode) bail: for(i = 0; i < CONCURRENT_JOURNAL_FILL; i++) brelse(bhs[i]); + mlog_exit(status); return status; } @@ -1147,7 +1185,7 @@ struct ocfs2_la_recovery_item { */ void ocfs2_complete_recovery(struct work_struct *work) { - int ret = 0; + int ret; struct ocfs2_journal *journal = container_of(work, struct ocfs2_journal, j_recovery_work); struct ocfs2_super *osb = journal->j_osb; @@ -1156,8 +1194,9 @@ void ocfs2_complete_recovery(struct work_struct *work) struct ocfs2_quota_recovery *qrec; LIST_HEAD(tmp_la_list); - trace_ocfs2_complete_recovery( - (unsigned long long)OCFS2_I(journal->j_inode)->ip_blkno); + mlog_entry_void(); + + mlog(0, "completing recovery from keventd\n"); spin_lock(&journal->j_lock); list_splice_init(&journal->j_la_cleanups, &tmp_la_list); @@ -1166,18 +1205,15 @@ void ocfs2_complete_recovery(struct work_struct *work) list_for_each_entry_safe(item, n, &tmp_la_list, lri_list) { list_del_init(&item->lri_list); + mlog(0, "Complete recovery for slot %d\n", item->lri_slot); + ocfs2_wait_on_quotas(osb); la_dinode = item->lri_la_dinode; - tl_dinode = item->lri_tl_dinode; - qrec = item->lri_qrec; - - trace_ocfs2_complete_recovery_slot(item->lri_slot, - la_dinode ? le64_to_cpu(la_dinode->i_blkno) : 0, - tl_dinode ? le64_to_cpu(tl_dinode->i_blkno) : 0, - qrec); - if (la_dinode) { + mlog(0, "Clean up local alloc %llu\n", + (unsigned long long)le64_to_cpu(la_dinode->i_blkno)); + ret = ocfs2_complete_local_alloc_recovery(osb, la_dinode); if (ret < 0) @@ -1186,7 +1222,11 @@ void ocfs2_complete_recovery(struct work_struct *work) kfree(la_dinode); } + tl_dinode = item->lri_tl_dinode; if (tl_dinode) { + mlog(0, "Clean up truncate log %llu\n", + (unsigned long long)le64_to_cpu(tl_dinode->i_blkno)); + ret = ocfs2_complete_truncate_log_recovery(osb, tl_dinode); if (ret < 0) @@ -1199,7 +1239,9 @@ void ocfs2_complete_recovery(struct work_struct *work) if (ret < 0) mlog_errno(ret); + qrec = item->lri_qrec; if (qrec) { + mlog(0, "Recovering quota files"); ret = ocfs2_finish_quota_recovery(osb, qrec, item->lri_slot); if (ret < 0) @@ -1210,7 +1252,8 @@ void ocfs2_complete_recovery(struct work_struct *work) kfree(item); } - trace_ocfs2_complete_recovery_end(ret); + mlog(0, "Recovery completion\n"); + mlog_exit_void(); } /* NOTE: This function always eats your references to la_dinode and @@ -1296,6 +1339,8 @@ static int __ocfs2_recovery_thread(void *arg) int rm_quota_used = 0, i; struct ocfs2_quota_recovery *qrec; + mlog_entry_void(); + status = ocfs2_wait_on_mount(osb); if (status < 0) { goto bail; @@ -1327,12 +1372,15 @@ static int __ocfs2_recovery_thread(void *arg) * clear it until ocfs2_recover_node() has succeeded. */ node_num = rm->rm_entries[0]; spin_unlock(&osb->osb_lock); + mlog(0, "checking node %d\n", node_num); slot_num = ocfs2_node_num_to_slot(osb, node_num); - trace_ocfs2_recovery_thread_node(node_num, slot_num); if (slot_num == -ENOENT) { status = 0; + mlog(0, "no slot for this node, so no recovery" + "required.\n"); goto skip_recovery; } + mlog(0, "node %d was using slot %d\n", node_num, slot_num); /* It is a bit subtle with quota recovery. We cannot do it * immediately because we have to obtain cluster locks from @@ -1359,7 +1407,7 @@ static int __ocfs2_recovery_thread(void *arg) spin_lock(&osb->osb_lock); } spin_unlock(&osb->osb_lock); - trace_ocfs2_recovery_thread_end(status); + mlog(0, "All nodes recovered\n"); /* Refresh all journal recovery generations from disk */ status = ocfs2_check_journals_nolocks(osb); @@ -1403,6 +1451,7 @@ static int __ocfs2_recovery_thread(void *arg) if (rm_quota) kfree(rm_quota); + mlog_exit(status); /* no one is callint kthread_stop() for us so the kthread() api * requires that we call do_exit(). And it isn't exported, but * complete_and_exit() seems to be a minimal wrapper around it. */ @@ -1412,16 +1461,20 @@ static int __ocfs2_recovery_thread(void *arg) void ocfs2_recovery_thread(struct ocfs2_super *osb, int node_num) { - mutex_lock(&osb->recovery_lock); - - trace_ocfs2_recovery_thread(node_num, osb->node_num, - osb->disable_recovery, osb->recovery_thread_task, - osb->disable_recovery ? - -1 : ocfs2_recovery_map_set(osb, node_num)); + mlog_entry("(node_num=%d, osb->node_num = %d)\n", + node_num, osb->node_num); + mutex_lock(&osb->recovery_lock); if (osb->disable_recovery) goto out; + /* People waiting on recovery will wait on + * the recovery map to empty. */ + if (ocfs2_recovery_map_set(osb, node_num)) + mlog(0, "node %d already in recovery map.\n", node_num); + + mlog(0, "starting recovery thread...\n"); + if (osb->recovery_thread_task) goto out; @@ -1435,6 +1488,8 @@ void ocfs2_recovery_thread(struct ocfs2_super *osb, int node_num) out: mutex_unlock(&osb->recovery_lock); wake_up(&osb->recovery_event); + + mlog_exit_void(); } static int ocfs2_read_journal_inode(struct ocfs2_super *osb, @@ -1508,7 +1563,7 @@ static int ocfs2_replay_journal(struct ocfs2_super *osb, * If not, it needs recovery. */ if (osb->slot_recovery_generations[slot_num] != slot_reco_gen) { - trace_ocfs2_replay_journal_recovered(slot_num, + mlog(0, "Slot %u already recovered (old/new=%u/%u)\n", slot_num, osb->slot_recovery_generations[slot_num], slot_reco_gen); osb->slot_recovery_generations[slot_num] = slot_reco_gen; status = -EBUSY; @@ -1519,7 +1574,7 @@ static int ocfs2_replay_journal(struct ocfs2_super *osb, status = ocfs2_inode_lock_full(inode, &bh, 1, OCFS2_META_LOCK_RECOVERY); if (status < 0) { - trace_ocfs2_replay_journal_lock_err(status); + mlog(0, "status returned from ocfs2_inode_lock=%d\n", status); if (status != -ERESTARTSYS) mlog(ML_ERROR, "Could not lock journal!\n"); goto done; @@ -1532,7 +1587,7 @@ static int ocfs2_replay_journal(struct ocfs2_super *osb, slot_reco_gen = ocfs2_get_recovery_generation(fe); if (!(flags & OCFS2_JOURNAL_DIRTY_FL)) { - trace_ocfs2_replay_journal_skip(node_num); + mlog(0, "No recovery required for node %d\n", node_num); /* Refresh recovery generation for the slot */ osb->slot_recovery_generations[slot_num] = slot_reco_gen; goto done; @@ -1553,6 +1608,7 @@ static int ocfs2_replay_journal(struct ocfs2_super *osb, goto done; } + mlog(0, "calling journal_init_inode\n"); journal = jbd2_journal_init_inode(inode); if (journal == NULL) { mlog(ML_ERROR, "Linux journal layer error\n"); @@ -1572,6 +1628,7 @@ static int ocfs2_replay_journal(struct ocfs2_super *osb, ocfs2_clear_journal_error(osb->sb, journal, slot_num); /* wipe the journal */ + mlog(0, "flushing the journal.\n"); jbd2_journal_lock_updates(journal); status = jbd2_journal_flush(journal); jbd2_journal_unlock_updates(journal); @@ -1608,6 +1665,7 @@ static int ocfs2_replay_journal(struct ocfs2_super *osb, brelse(bh); + mlog_exit(status); return status; } @@ -1630,7 +1688,8 @@ static int ocfs2_recover_node(struct ocfs2_super *osb, struct ocfs2_dinode *la_copy = NULL; struct ocfs2_dinode *tl_copy = NULL; - trace_ocfs2_recover_node(node_num, slot_num, osb->node_num); + mlog_entry("(node_num=%d, slot_num=%d, osb->node_num = %d)\n", + node_num, slot_num, osb->node_num); /* Should not ever be called to recover ourselves -- in that * case we should've called ocfs2_journal_load instead. */ @@ -1639,7 +1698,9 @@ static int ocfs2_recover_node(struct ocfs2_super *osb, status = ocfs2_replay_journal(osb, node_num, slot_num); if (status < 0) { if (status == -EBUSY) { - trace_ocfs2_recover_node_skip(slot_num, node_num); + mlog(0, "Skipping recovery for slot %u (node %u) " + "as another node has recovered it\n", slot_num, + node_num); status = 0; goto done; } @@ -1674,6 +1735,7 @@ static int ocfs2_recover_node(struct ocfs2_super *osb, status = 0; done: + mlog_exit(status); return status; } @@ -1746,8 +1808,8 @@ int ocfs2_mark_dead_nodes(struct ocfs2_super *osb) spin_lock(&osb->osb_lock); osb->slot_recovery_generations[i] = gen; - trace_ocfs2_mark_dead_nodes(i, - osb->slot_recovery_generations[i]); + mlog(0, "Slot %u recovery generation is %u\n", i, + osb->slot_recovery_generations[i]); if (i == osb->slot_num) { spin_unlock(&osb->osb_lock); @@ -1783,6 +1845,7 @@ int ocfs2_mark_dead_nodes(struct ocfs2_super *osb) status = 0; bail: + mlog_exit(status); return status; } @@ -1821,12 +1884,11 @@ void ocfs2_queue_orphan_scan(struct ocfs2_super *osb) os = &osb->osb_orphan_scan; + mlog(0, "Begin orphan scan\n"); + if (atomic_read(&os->os_state) == ORPHAN_SCAN_INACTIVE) goto out; - trace_ocfs2_queue_orphan_scan_begin(os->os_count, os->os_seqno, - atomic_read(&os->os_state)); - status = ocfs2_orphan_scan_lock(osb, &seqno); if (status < 0) { if (status != -EAGAIN) @@ -1856,8 +1918,7 @@ void ocfs2_queue_orphan_scan(struct ocfs2_super *osb) unlock: ocfs2_orphan_scan_unlock(osb, seqno); out: - trace_ocfs2_queue_orphan_scan_end(os->os_count, os->os_seqno, - atomic_read(&os->os_state)); + mlog(0, "Orphan scan completed\n"); return; } @@ -1941,7 +2002,8 @@ static int ocfs2_orphan_filldir(void *priv, const char *name, int name_len, if (IS_ERR(iter)) return 0; - trace_ocfs2_orphan_filldir((unsigned long long)OCFS2_I(iter)->ip_blkno); + mlog(0, "queue orphan %llu\n", + (unsigned long long)OCFS2_I(iter)->ip_blkno); /* No locking is required for the next_orphan queue as there * is only ever a single process doing orphan recovery. */ OCFS2_I(iter)->ip_next_orphan = p->head; @@ -2057,7 +2119,7 @@ static int ocfs2_recover_orphans(struct ocfs2_super *osb, struct inode *iter; struct ocfs2_inode_info *oi; - trace_ocfs2_recover_orphans(slot); + mlog(0, "Recover inodes from orphan dir in slot %d\n", slot); ocfs2_mark_recovering_orphan_dir(osb, slot); ret = ocfs2_queue_orphans(osb, slot, &inode); @@ -2070,8 +2132,7 @@ static int ocfs2_recover_orphans(struct ocfs2_super *osb, while (inode) { oi = OCFS2_I(inode); - trace_ocfs2_recover_orphans_iput( - (unsigned long long)oi->ip_blkno); + mlog(0, "iput orphan %llu\n", (unsigned long long)oi->ip_blkno); iter = oi->ip_next_orphan; @@ -2109,7 +2170,6 @@ static int __ocfs2_wait_on_mount(struct ocfs2_super *osb, int quota) * MOUNTED flag, but this is set right before * dismount_volume() so we can trust it. */ if (atomic_read(&osb->vol_state) == VOLUME_DISABLED) { - trace_ocfs2_wait_on_mount(VOLUME_DISABLED); mlog(0, "mount error, exiting!\n"); return -EBUSY; } diff --git a/trunk/fs/ocfs2/localalloc.c b/trunk/fs/ocfs2/localalloc.c index 210c35237548..ec6adbf8f551 100644 --- a/trunk/fs/ocfs2/localalloc.c +++ b/trunk/fs/ocfs2/localalloc.c @@ -29,6 +29,7 @@ #include #include +#define MLOG_MASK_PREFIX ML_DISK_ALLOC #include #include "ocfs2.h" @@ -42,7 +43,6 @@ #include "suballoc.h" #include "super.h" #include "sysfile.h" -#include "ocfs2_trace.h" #include "buffer_head_io.h" @@ -201,7 +201,8 @@ void ocfs2_la_set_sizes(struct ocfs2_super *osb, int requested_mb) la_max_mb = ocfs2_clusters_to_megabytes(sb, ocfs2_local_alloc_size(sb) * 8); - trace_ocfs2_la_set_sizes(requested_mb, la_max_mb, la_default_mb); + mlog(0, "requested: %dM, max: %uM, default: %uM\n", + requested_mb, la_max_mb, la_default_mb); if (requested_mb == -1) { /* No user request - use defaults */ @@ -275,8 +276,8 @@ int ocfs2_alloc_should_use_local(struct ocfs2_super *osb, u64 bits) ret = 1; bail: - trace_ocfs2_alloc_should_use_local( - (unsigned long long)bits, osb->local_alloc_state, la_bits, ret); + mlog(0, "state=%d, bits=%llu, la_bits=%d, ret=%d\n", + osb->local_alloc_state, (unsigned long long)bits, la_bits, ret); spin_unlock(&osb->osb_lock); return ret; } @@ -290,6 +291,8 @@ int ocfs2_load_local_alloc(struct ocfs2_super *osb) struct inode *inode = NULL; struct ocfs2_local_alloc *la; + mlog_entry_void(); + if (osb->local_alloc_bits == 0) goto bail; @@ -361,10 +364,9 @@ int ocfs2_load_local_alloc(struct ocfs2_super *osb) if (inode) iput(inode); - trace_ocfs2_load_local_alloc(osb->local_alloc_bits); + mlog(0, "Local alloc window bits = %d\n", osb->local_alloc_bits); - if (status) - mlog_errno(status); + mlog_exit(status); return status; } @@ -386,6 +388,8 @@ void ocfs2_shutdown_local_alloc(struct ocfs2_super *osb) struct ocfs2_dinode *alloc_copy = NULL; struct ocfs2_dinode *alloc = NULL; + mlog_entry_void(); + cancel_delayed_work(&osb->la_enable_wq); flush_workqueue(ocfs2_wq); @@ -478,6 +482,8 @@ void ocfs2_shutdown_local_alloc(struct ocfs2_super *osb) if (alloc_copy) kfree(alloc_copy); + + mlog_exit_void(); } /* @@ -496,7 +502,7 @@ int ocfs2_begin_local_alloc_recovery(struct ocfs2_super *osb, struct inode *inode = NULL; struct ocfs2_dinode *alloc; - trace_ocfs2_begin_local_alloc_recovery(slot_num); + mlog_entry("(slot_num = %d)\n", slot_num); *alloc_copy = NULL; @@ -546,8 +552,7 @@ int ocfs2_begin_local_alloc_recovery(struct ocfs2_super *osb, iput(inode); } - if (status) - mlog_errno(status); + mlog_exit(status); return status; } @@ -565,6 +570,8 @@ int ocfs2_complete_local_alloc_recovery(struct ocfs2_super *osb, struct buffer_head *main_bm_bh = NULL; struct inode *main_bm_inode; + mlog_entry_void(); + main_bm_inode = ocfs2_get_system_file_inode(osb, GLOBAL_BITMAP_SYSTEM_INODE, OCFS2_INVALID_SLOT); @@ -613,8 +620,7 @@ int ocfs2_complete_local_alloc_recovery(struct ocfs2_super *osb, out: if (!status) ocfs2_init_steal_slots(osb); - if (status) - mlog_errno(status); + mlog_exit(status); return status; } @@ -634,6 +640,8 @@ int ocfs2_reserve_local_alloc_bits(struct ocfs2_super *osb, struct inode *local_alloc_inode; unsigned int free_bits; + mlog_entry_void(); + BUG_ON(!ac); local_alloc_inode = @@ -704,6 +712,10 @@ int ocfs2_reserve_local_alloc_bits(struct ocfs2_super *osb, goto bail; } + if (ac->ac_max_block) + mlog(0, "Calling in_range for max block %llu\n", + (unsigned long long)ac->ac_max_block); + ac->ac_inode = local_alloc_inode; /* We should never use localalloc from another slot */ ac->ac_alloc_slot = osb->slot_num; @@ -717,12 +729,10 @@ int ocfs2_reserve_local_alloc_bits(struct ocfs2_super *osb, iput(local_alloc_inode); } - trace_ocfs2_reserve_local_alloc_bits( - (unsigned long long)ac->ac_max_block, - bits_wanted, osb->slot_num, status); + mlog(0, "bits=%d, slot=%d, ret=%d\n", bits_wanted, osb->slot_num, + status); - if (status) - mlog_errno(status); + mlog_exit(status); return status; } @@ -739,6 +749,7 @@ int ocfs2_claim_local_alloc_bits(struct ocfs2_super *osb, struct ocfs2_dinode *alloc; struct ocfs2_local_alloc *la; + mlog_entry_void(); BUG_ON(ac->ac_which != OCFS2_AC_USE_LOCAL); local_alloc_inode = ac->ac_inode; @@ -777,8 +788,7 @@ int ocfs2_claim_local_alloc_bits(struct ocfs2_super *osb, ocfs2_journal_dirty(handle, osb->local_alloc_bh); bail: - if (status) - mlog_errno(status); + mlog_exit(status); return status; } @@ -789,11 +799,13 @@ static u32 ocfs2_local_alloc_count_bits(struct ocfs2_dinode *alloc) u32 count = 0; struct ocfs2_local_alloc *la = OCFS2_LOCAL_ALLOC(alloc); + mlog_entry_void(); + buffer = la->la_bitmap; for (i = 0; i < le16_to_cpu(la->la_size); i++) count += hweight8(buffer[i]); - trace_ocfs2_local_alloc_count_bits(count); + mlog_exit(count); return count; } @@ -808,7 +820,10 @@ static int ocfs2_local_alloc_find_clear_bits(struct ocfs2_super *osb, void *bitmap = NULL; struct ocfs2_reservation_map *resmap = &osb->osb_la_resmap; + mlog_entry("(numbits wanted = %u)\n", *numbits); + if (!alloc->id1.bitmap1.i_total) { + mlog(0, "No bits in my window!\n"); bitoff = -1; goto bail; } @@ -868,7 +883,8 @@ static int ocfs2_local_alloc_find_clear_bits(struct ocfs2_super *osb, } } - trace_ocfs2_local_alloc_find_clear_bits_search_bitmap(bitoff, numfound); + mlog(0, "Exiting loop, bitoff = %d, numfound = %d\n", bitoff, + numfound); if (numfound == *numbits) bitoff = startoff - numfound; @@ -879,10 +895,7 @@ static int ocfs2_local_alloc_find_clear_bits(struct ocfs2_super *osb, if (local_resv) ocfs2_resv_discard(resmap, resv); - trace_ocfs2_local_alloc_find_clear_bits(*numbits, - le32_to_cpu(alloc->id1.bitmap1.i_total), - bitoff, numfound); - + mlog_exit(bitoff); return bitoff; } @@ -890,12 +903,15 @@ static void ocfs2_clear_local_alloc(struct ocfs2_dinode *alloc) { struct ocfs2_local_alloc *la = OCFS2_LOCAL_ALLOC(alloc); int i; + mlog_entry_void(); alloc->id1.bitmap1.i_total = 0; alloc->id1.bitmap1.i_used = 0; la->la_bm_off = 0; for(i = 0; i < le16_to_cpu(la->la_size); i++) la->la_bitmap[i] = 0; + + mlog_exit_void(); } #if 0 @@ -936,16 +952,18 @@ static int ocfs2_sync_local_to_main(struct ocfs2_super *osb, void *bitmap; struct ocfs2_local_alloc *la = OCFS2_LOCAL_ALLOC(alloc); - trace_ocfs2_sync_local_to_main( - le32_to_cpu(alloc->id1.bitmap1.i_total), - le32_to_cpu(alloc->id1.bitmap1.i_used)); + mlog_entry("total = %u, used = %u\n", + le32_to_cpu(alloc->id1.bitmap1.i_total), + le32_to_cpu(alloc->id1.bitmap1.i_used)); if (!alloc->id1.bitmap1.i_total) { + mlog(0, "nothing to sync!\n"); goto bail; } if (le32_to_cpu(alloc->id1.bitmap1.i_used) == le32_to_cpu(alloc->id1.bitmap1.i_total)) { + mlog(0, "all bits were taken!\n"); goto bail; } @@ -967,7 +985,8 @@ static int ocfs2_sync_local_to_main(struct ocfs2_super *osb, ocfs2_clusters_to_blocks(osb->sb, start - count); - trace_ocfs2_sync_local_to_main_free( + mlog(0, "freeing %u bits starting at local alloc bit " + "%u (la_start_blk = %llu, blkno = %llu)\n", count, start - count, (unsigned long long)la_start_blk, (unsigned long long)blkno); @@ -988,8 +1007,7 @@ static int ocfs2_sync_local_to_main(struct ocfs2_super *osb, } bail: - if (status) - mlog_errno(status); + mlog_exit(status); return status; } @@ -1114,8 +1132,7 @@ static int ocfs2_local_alloc_reserve_for_window(struct ocfs2_super *osb, *ac = NULL; } - if (status) - mlog_errno(status); + mlog_exit(status); return status; } @@ -1131,12 +1148,17 @@ static int ocfs2_local_alloc_new_window(struct ocfs2_super *osb, struct ocfs2_dinode *alloc = NULL; struct ocfs2_local_alloc *la; + mlog_entry_void(); + alloc = (struct ocfs2_dinode *) osb->local_alloc_bh->b_data; la = OCFS2_LOCAL_ALLOC(alloc); - trace_ocfs2_local_alloc_new_window( - le32_to_cpu(alloc->id1.bitmap1.i_total), - osb->local_alloc_bits); + if (alloc->id1.bitmap1.i_total) + mlog(0, "asking me to alloc a new window over a non-empty " + "one\n"); + + mlog(0, "Allocating %u clusters for a new window.\n", + osb->local_alloc_bits); /* Instruct the allocation code to try the most recently used * cluster group. We'll re-record the group used this pass @@ -1198,13 +1220,13 @@ static int ocfs2_local_alloc_new_window(struct ocfs2_super *osb, ocfs2_resmap_restart(&osb->osb_la_resmap, cluster_count, OCFS2_LOCAL_ALLOC(alloc)->la_bitmap); - trace_ocfs2_local_alloc_new_window_result( - OCFS2_LOCAL_ALLOC(alloc)->la_bm_off, - le32_to_cpu(alloc->id1.bitmap1.i_total)); + mlog(0, "New window allocated:\n"); + mlog(0, "window la_bm_off = %u\n", + OCFS2_LOCAL_ALLOC(alloc)->la_bm_off); + mlog(0, "window bits = %u\n", le32_to_cpu(alloc->id1.bitmap1.i_total)); bail: - if (status) - mlog_errno(status); + mlog_exit(status); return status; } @@ -1221,6 +1243,8 @@ static int ocfs2_local_alloc_slide_window(struct ocfs2_super *osb, struct ocfs2_dinode *alloc_copy = NULL; struct ocfs2_alloc_context *ac = NULL; + mlog_entry_void(); + ocfs2_recalc_la_window(osb, OCFS2_LA_EVENT_SLIDE); /* This will lock the main bitmap for us. */ @@ -1300,8 +1324,7 @@ static int ocfs2_local_alloc_slide_window(struct ocfs2_super *osb, if (ac) ocfs2_free_alloc_context(ac); - if (status) - mlog_errno(status); + mlog_exit(status); return status; } diff --git a/trunk/fs/ocfs2/locks.c b/trunk/fs/ocfs2/locks.c index e57c804069ea..b5cb3ede9408 100644 --- a/trunk/fs/ocfs2/locks.c +++ b/trunk/fs/ocfs2/locks.c @@ -26,6 +26,7 @@ #include #include +#define MLOG_MASK_PREFIX ML_INODE #include #include "ocfs2.h" diff --git a/trunk/fs/ocfs2/mmap.c b/trunk/fs/ocfs2/mmap.c index 3e9393ca39eb..7e32db9c2c99 100644 --- a/trunk/fs/ocfs2/mmap.c +++ b/trunk/fs/ocfs2/mmap.c @@ -31,6 +31,7 @@ #include #include +#define MLOG_MASK_PREFIX ML_FILE_IO #include #include "ocfs2.h" @@ -41,7 +42,6 @@ #include "inode.h" #include "mmap.h" #include "super.h" -#include "ocfs2_trace.h" static int ocfs2_fault(struct vm_area_struct *area, struct vm_fault *vmf) @@ -49,12 +49,13 @@ static int ocfs2_fault(struct vm_area_struct *area, struct vm_fault *vmf) sigset_t oldset; int ret; + mlog_entry("(area=%p, page offset=%lu)\n", area, vmf->pgoff); + ocfs2_block_signals(&oldset); ret = filemap_fault(area, vmf); ocfs2_unblock_signals(&oldset); - trace_ocfs2_fault(OCFS2_I(area->vm_file->f_mapping->host)->ip_blkno, - area, vmf->page, vmf->pgoff); + mlog_exit_ptr(vmf->page); return ret; } diff --git a/trunk/fs/ocfs2/namei.c b/trunk/fs/ocfs2/namei.c index 28f2cc1080d8..d6c25d76b537 100644 --- a/trunk/fs/ocfs2/namei.c +++ b/trunk/fs/ocfs2/namei.c @@ -42,6 +42,7 @@ #include #include +#define MLOG_MASK_PREFIX ML_NAMEI #include #include "ocfs2.h" @@ -62,7 +63,6 @@ #include "uptodate.h" #include "xattr.h" #include "acl.h" -#include "ocfs2_trace.h" #include "buffer_head_io.h" @@ -106,15 +106,17 @@ static struct dentry *ocfs2_lookup(struct inode *dir, struct dentry *dentry, struct dentry *ret; struct ocfs2_inode_info *oi; - trace_ocfs2_lookup(dir, dentry, dentry->d_name.len, - dentry->d_name.name, - (unsigned long long)OCFS2_I(dir)->ip_blkno, 0); + mlog_entry("(0x%p, 0x%p, '%.*s')\n", dir, dentry, + dentry->d_name.len, dentry->d_name.name); if (dentry->d_name.len > OCFS2_MAX_FILENAME_LEN) { ret = ERR_PTR(-ENAMETOOLONG); goto bail; } + mlog(0, "find name %.*s in directory %llu\n", dentry->d_name.len, + dentry->d_name.name, (unsigned long long)OCFS2_I(dir)->ip_blkno); + status = ocfs2_inode_lock_nested(dir, NULL, 0, OI_LS_PARENT); if (status < 0) { if (status != -ENOENT) @@ -180,7 +182,7 @@ static struct dentry *ocfs2_lookup(struct inode *dir, struct dentry *dentry, bail: - trace_ocfs2_lookup_ret(ret); + mlog_exit_ptr(ret); return ret; } @@ -233,9 +235,9 @@ static int ocfs2_mknod(struct inode *dir, sigset_t oldset; int did_block_signals = 0; - trace_ocfs2_mknod(dir, dentry, dentry->d_name.len, dentry->d_name.name, - (unsigned long long)OCFS2_I(dir)->ip_blkno, - (unsigned long)dev, mode); + mlog_entry("(0x%p, 0x%p, %d, %lu, '%.*s')\n", dir, dentry, mode, + (unsigned long)dev, dentry->d_name.len, + dentry->d_name.name); dquot_initialize(dir); @@ -352,6 +354,10 @@ static int ocfs2_mknod(struct inode *dir, goto leave; did_quota_inode = 1; + mlog_entry("(0x%p, 0x%p, %d, %lu, '%.*s')\n", dir, dentry, + inode->i_mode, (unsigned long)dev, dentry->d_name.len, + dentry->d_name.name); + /* do the real work now. */ status = ocfs2_mknod_locked(osb, dir, inode, dev, &new_fe_bh, parent_fe_bh, handle, @@ -430,6 +436,9 @@ static int ocfs2_mknod(struct inode *dir, if (did_block_signals) ocfs2_unblock_signals(&oldset); + if (status == -ENOSPC) + mlog(0, "Disk is full\n"); + brelse(new_fe_bh); brelse(parent_fe_bh); kfree(si.name); @@ -457,8 +466,7 @@ static int ocfs2_mknod(struct inode *dir, iput(inode); } - if (status) - mlog_errno(status); + mlog_exit(status); return status; } @@ -569,8 +577,7 @@ static int __ocfs2_mknod_locked(struct inode *dir, } } - if (status) - mlog_errno(status); + mlog_exit(status); return status; } @@ -608,11 +615,10 @@ static int ocfs2_mkdir(struct inode *dir, { int ret; - trace_ocfs2_mkdir(dir, dentry, dentry->d_name.len, dentry->d_name.name, - OCFS2_I(dir)->ip_blkno, mode); + mlog_entry("(0x%p, 0x%p, %d, '%.*s')\n", dir, dentry, mode, + dentry->d_name.len, dentry->d_name.name); ret = ocfs2_mknod(dir, dentry, mode | S_IFDIR, 0); - if (ret) - mlog_errno(ret); + mlog_exit(ret); return ret; } @@ -624,11 +630,10 @@ static int ocfs2_create(struct inode *dir, { int ret; - trace_ocfs2_create(dir, dentry, dentry->d_name.len, dentry->d_name.name, - (unsigned long long)OCFS2_I(dir)->ip_blkno, mode); + mlog_entry("(0x%p, 0x%p, %d, '%.*s')\n", dir, dentry, mode, + dentry->d_name.len, dentry->d_name.name); ret = ocfs2_mknod(dir, dentry, mode | S_IFREG, 0); - if (ret) - mlog_errno(ret); + mlog_exit(ret); return ret; } @@ -647,9 +652,9 @@ static int ocfs2_link(struct dentry *old_dentry, struct ocfs2_dir_lookup_result lookup = { NULL, }; sigset_t oldset; - trace_ocfs2_link((unsigned long long)OCFS2_I(inode)->ip_blkno, - old_dentry->d_name.len, old_dentry->d_name.name, - dentry->d_name.len, dentry->d_name.name); + mlog_entry("(inode=%lu, old='%.*s' new='%.*s')\n", inode->i_ino, + old_dentry->d_name.len, old_dentry->d_name.name, + dentry->d_name.len, dentry->d_name.name); if (S_ISDIR(inode->i_mode)) return -EPERM; @@ -752,8 +757,7 @@ static int ocfs2_link(struct dentry *old_dentry, ocfs2_free_dir_lookup_result(&lookup); - if (err) - mlog_errno(err); + mlog_exit(err); return err; } @@ -805,17 +809,19 @@ static int ocfs2_unlink(struct inode *dir, struct ocfs2_dir_lookup_result lookup = { NULL, }; struct ocfs2_dir_lookup_result orphan_insert = { NULL, }; - trace_ocfs2_unlink(dir, dentry, dentry->d_name.len, - dentry->d_name.name, - (unsigned long long)OCFS2_I(dir)->ip_blkno, - (unsigned long long)OCFS2_I(inode)->ip_blkno); + mlog_entry("(0x%p, 0x%p, '%.*s')\n", dir, dentry, + dentry->d_name.len, dentry->d_name.name); dquot_initialize(dir); BUG_ON(dentry->d_parent->d_inode != dir); - if (inode == osb->root_inode) + mlog(0, "ino = %llu\n", (unsigned long long)OCFS2_I(inode)->ip_blkno); + + if (inode == osb->root_inode) { + mlog(0, "Cannot delete the root directory\n"); return -EPERM; + } status = ocfs2_inode_lock_nested(dir, &parent_node_bh, 1, OI_LS_PARENT); @@ -837,10 +843,9 @@ static int ocfs2_unlink(struct inode *dir, if (OCFS2_I(inode)->ip_blkno != blkno) { status = -ENOENT; - trace_ocfs2_unlink_noent( - (unsigned long long)OCFS2_I(inode)->ip_blkno, - (unsigned long long)blkno, - OCFS2_I(inode)->ip_flags); + mlog(0, "ip_blkno %llu != dirent blkno %llu ip_flags = %x\n", + (unsigned long long)OCFS2_I(inode)->ip_blkno, + (unsigned long long)blkno, OCFS2_I(inode)->ip_flags); goto leave; } @@ -949,8 +954,7 @@ static int ocfs2_unlink(struct inode *dir, ocfs2_free_dir_lookup_result(&orphan_insert); ocfs2_free_dir_lookup_result(&lookup); - if (status) - mlog_errno(status); + mlog_exit(status); return status; } @@ -971,8 +975,9 @@ static int ocfs2_double_lock(struct ocfs2_super *osb, struct buffer_head **tmpbh; struct inode *tmpinode; - trace_ocfs2_double_lock((unsigned long long)oi1->ip_blkno, - (unsigned long long)oi2->ip_blkno); + mlog_entry("(inode1 = %llu, inode2 = %llu)\n", + (unsigned long long)oi1->ip_blkno, + (unsigned long long)oi2->ip_blkno); if (*bh1) *bh1 = NULL; @@ -983,6 +988,7 @@ static int ocfs2_double_lock(struct ocfs2_super *osb, if (oi1->ip_blkno != oi2->ip_blkno) { if (oi1->ip_blkno < oi2->ip_blkno) { /* switch id1 and id2 around */ + mlog(0, "switching them around...\n"); tmpbh = bh2; bh2 = bh1; bh1 = tmpbh; @@ -1018,13 +1024,8 @@ static int ocfs2_double_lock(struct ocfs2_super *osb, mlog_errno(status); } - trace_ocfs2_double_lock_end( - (unsigned long long)OCFS2_I(inode1)->ip_blkno, - (unsigned long long)OCFS2_I(inode2)->ip_blkno); - bail: - if (status) - mlog_errno(status); + mlog_exit(status); return status; } @@ -1066,9 +1067,10 @@ static int ocfs2_rename(struct inode *old_dir, /* At some point it might be nice to break this function up a * bit. */ - trace_ocfs2_rename(old_dir, old_dentry, new_dir, new_dentry, - old_dentry->d_name.len, old_dentry->d_name.name, - new_dentry->d_name.len, new_dentry->d_name.name); + mlog_entry("(0x%p, 0x%p, 0x%p, 0x%p, from='%.*s' to='%.*s')\n", + old_dir, old_dentry, new_dir, new_dentry, + old_dentry->d_name.len, old_dentry->d_name.name, + new_dentry->d_name.len, new_dentry->d_name.name); dquot_initialize(old_dir); dquot_initialize(new_dir); @@ -1225,15 +1227,16 @@ static int ocfs2_rename(struct inode *old_dir, if (!new_inode) { status = -EACCES; - trace_ocfs2_rename_target_exists(new_dentry->d_name.len, - new_dentry->d_name.name); + mlog(0, "We found an inode for name %.*s but VFS " + "didn't give us one.\n", new_dentry->d_name.len, + new_dentry->d_name.name); goto bail; } if (OCFS2_I(new_inode)->ip_blkno != newfe_blkno) { status = -EACCES; - trace_ocfs2_rename_disagree( + mlog(0, "Inode %llu and dir %llu disagree. flags = %x\n", (unsigned long long)OCFS2_I(new_inode)->ip_blkno, (unsigned long long)newfe_blkno, OCFS2_I(new_inode)->ip_flags); @@ -1256,7 +1259,8 @@ static int ocfs2_rename(struct inode *old_dir, newfe = (struct ocfs2_dinode *) newfe_bh->b_data; - trace_ocfs2_rename_over_existing( + mlog(0, "aha rename over existing... new_blkno=%llu " + "newfebh=%p bhblocknr=%llu\n", (unsigned long long)newfe_blkno, newfe_bh, newfe_bh ? (unsigned long long)newfe_bh->b_blocknr : 0ULL); @@ -1472,8 +1476,7 @@ static int ocfs2_rename(struct inode *old_dir, brelse(old_dir_bh); brelse(new_dir_bh); - if (status) - mlog_errno(status); + mlog_exit(status); return status; } @@ -1498,8 +1501,9 @@ static int ocfs2_create_symlink_data(struct ocfs2_super *osb, * write i_size + 1 bytes. */ blocks = (bytes_left + sb->s_blocksize - 1) >> sb->s_blocksize_bits; - trace_ocfs2_create_symlink_data((unsigned long long)inode->i_blocks, - i_size_read(inode), blocks); + mlog_entry("i_blocks = %llu, i_size = %llu, blocks = %d\n", + (unsigned long long)inode->i_blocks, + i_size_read(inode), blocks); /* Sanity check -- make sure we're going to fit. */ if (bytes_left > @@ -1575,8 +1579,7 @@ static int ocfs2_create_symlink_data(struct ocfs2_super *osb, kfree(bhs); } - if (status) - mlog_errno(status); + mlog_exit(status); return status; } @@ -1607,8 +1610,8 @@ static int ocfs2_symlink(struct inode *dir, sigset_t oldset; int did_block_signals = 0; - trace_ocfs2_symlink_begin(dir, dentry, symname, - dentry->d_name.len, dentry->d_name.name); + mlog_entry("(0x%p, 0x%p, symname='%s' actual='%.*s')\n", dir, + dentry, symname, dentry->d_name.len, dentry->d_name.name); dquot_initialize(dir); @@ -1710,10 +1713,9 @@ static int ocfs2_symlink(struct inode *dir, goto bail; did_quota_inode = 1; - trace_ocfs2_symlink_create(dir, dentry, dentry->d_name.len, - dentry->d_name.name, - (unsigned long long)OCFS2_I(dir)->ip_blkno, - inode->i_mode); + mlog_entry("(0x%p, 0x%p, %d, '%.*s')\n", dir, dentry, + inode->i_mode, dentry->d_name.len, + dentry->d_name.name); status = ocfs2_mknod_locked(osb, dir, inode, 0, &new_fe_bh, parent_fe_bh, handle, @@ -1833,8 +1835,7 @@ static int ocfs2_symlink(struct inode *dir, iput(inode); } - if (status) - mlog_errno(status); + mlog_exit(status); return status; } @@ -1843,6 +1844,8 @@ static int ocfs2_blkno_stringify(u64 blkno, char *name) { int status, namelen; + mlog_entry_void(); + namelen = snprintf(name, OCFS2_ORPHAN_NAMELEN + 1, "%016llx", (long long)blkno); if (namelen <= 0) { @@ -1859,12 +1862,12 @@ static int ocfs2_blkno_stringify(u64 blkno, char *name) goto bail; } - trace_ocfs2_blkno_stringify(blkno, name, namelen); + mlog(0, "built filename '%s' for orphan dir (len=%d)\n", name, + namelen); status = 0; bail: - if (status < 0) - mlog_errno(status); + mlog_exit(status); return status; } @@ -1977,8 +1980,7 @@ static int ocfs2_prepare_orphan_dir(struct ocfs2_super *osb, iput(orphan_dir_inode); } - if (ret) - mlog_errno(ret); + mlog_exit(ret); return ret; } @@ -1995,8 +1997,7 @@ static int ocfs2_orphan_add(struct ocfs2_super *osb, struct ocfs2_dinode *orphan_fe; struct ocfs2_dinode *fe = (struct ocfs2_dinode *) fe_bh->b_data; - trace_ocfs2_orphan_add_begin( - (unsigned long long)OCFS2_I(inode)->ip_blkno); + mlog_entry("(inode->i_ino = %lu)\n", inode->i_ino); status = ocfs2_read_inode_block(orphan_dir_inode, &orphan_dir_bh); if (status < 0) { @@ -2055,14 +2056,13 @@ static int ocfs2_orphan_add(struct ocfs2_super *osb, ocfs2_journal_dirty(handle, fe_bh); - trace_ocfs2_orphan_add_end((unsigned long long)OCFS2_I(inode)->ip_blkno, - osb->slot_num); + mlog(0, "Inode %llu orphaned in slot %d\n", + (unsigned long long)OCFS2_I(inode)->ip_blkno, osb->slot_num); leave: brelse(orphan_dir_bh); - if (status) - mlog_errno(status); + mlog_exit(status); return status; } @@ -2078,15 +2078,17 @@ int ocfs2_orphan_del(struct ocfs2_super *osb, int status = 0; struct ocfs2_dir_lookup_result lookup = { NULL, }; + mlog_entry_void(); + status = ocfs2_blkno_stringify(OCFS2_I(inode)->ip_blkno, name); if (status < 0) { mlog_errno(status); goto leave; } - trace_ocfs2_orphan_del( - (unsigned long long)OCFS2_I(orphan_dir_inode)->ip_blkno, - name, OCFS2_ORPHAN_NAMELEN); + mlog(0, "removing '%s' from orphan dir %llu (namelen=%d)\n", + name, (unsigned long long)OCFS2_I(orphan_dir_inode)->ip_blkno, + OCFS2_ORPHAN_NAMELEN); /* find it's spot in the orphan directory */ status = ocfs2_find_entry(name, OCFS2_ORPHAN_NAMELEN, orphan_dir_inode, @@ -2122,8 +2124,7 @@ int ocfs2_orphan_del(struct ocfs2_super *osb, leave: ocfs2_free_dir_lookup_result(&lookup); - if (status) - mlog_errno(status); + mlog_exit(status); return status; } @@ -2320,6 +2321,9 @@ int ocfs2_create_inode_in_orphan(struct inode *dir, iput(orphan_dir); } + if (status == -ENOSPC) + mlog(0, "Disk is full\n"); + if ((status < 0) && inode) { clear_nlink(inode); iput(inode); @@ -2354,10 +2358,8 @@ int ocfs2_mv_orphaned_inode_to_new(struct inode *dir, struct buffer_head *di_bh = NULL; struct ocfs2_dir_lookup_result lookup = { NULL, }; - trace_ocfs2_mv_orphaned_inode_to_new(dir, dentry, - dentry->d_name.len, dentry->d_name.name, - (unsigned long long)OCFS2_I(dir)->ip_blkno, - (unsigned long long)OCFS2_I(inode)->ip_blkno); + mlog_entry("(0x%p, 0x%p, %.*s')\n", dir, dentry, + dentry->d_name.len, dentry->d_name.name); status = ocfs2_inode_lock(dir, &parent_di_bh, 1); if (status < 0) { @@ -2474,8 +2476,7 @@ int ocfs2_mv_orphaned_inode_to_new(struct inode *dir, ocfs2_free_dir_lookup_result(&lookup); - if (status) - mlog_errno(status); + mlog_exit(status); return status; } diff --git a/trunk/fs/ocfs2/ocfs2.h b/trunk/fs/ocfs2/ocfs2.h index 409285854f64..1a97ba1ec3fc 100644 --- a/trunk/fs/ocfs2/ocfs2.h +++ b/trunk/fs/ocfs2/ocfs2.h @@ -147,17 +147,6 @@ struct ocfs2_lock_res_ops; typedef void (*ocfs2_lock_callback)(int status, unsigned long data); -#ifdef CONFIG_OCFS2_FS_STATS -struct ocfs2_lock_stats { - u64 ls_total; /* Total wait in NSEC */ - u32 ls_gets; /* Num acquires */ - u32 ls_fail; /* Num failed acquires */ - - /* Storing max wait in usecs saves 24 bytes per inode */ - u32 ls_max; /* Max wait in USEC */ -}; -#endif - struct ocfs2_lock_res { void *l_priv; struct ocfs2_lock_res_ops *l_ops; @@ -193,9 +182,15 @@ struct ocfs2_lock_res { struct list_head l_debug_list; #ifdef CONFIG_OCFS2_FS_STATS - struct ocfs2_lock_stats l_lock_prmode; /* PR mode stats */ - u32 l_lock_refresh; /* Disk refreshes */ - struct ocfs2_lock_stats l_lock_exmode; /* EX mode stats */ + unsigned long long l_lock_num_prmode; /* PR acquires */ + unsigned long long l_lock_num_exmode; /* EX acquires */ + unsigned int l_lock_num_prmode_failed; /* Failed PR gets */ + unsigned int l_lock_num_exmode_failed; /* Failed EX gets */ + unsigned long long l_lock_total_prmode; /* Tot wait for PR */ + unsigned long long l_lock_total_exmode; /* Tot wait for EX */ + unsigned int l_lock_max_prmode; /* Max wait for PR */ + unsigned int l_lock_max_exmode; /* Max wait for EX */ + unsigned int l_lock_refresh; /* Disk refreshes */ #endif #ifdef CONFIG_DEBUG_LOCK_ALLOC struct lockdep_map l_lockdep_map; diff --git a/trunk/fs/ocfs2/ocfs2_trace.h b/trunk/fs/ocfs2/ocfs2_trace.h deleted file mode 100644 index a1dae5bb54ac..000000000000 --- a/trunk/fs/ocfs2/ocfs2_trace.h +++ /dev/null @@ -1,2739 +0,0 @@ -#undef TRACE_SYSTEM -#define TRACE_SYSTEM ocfs2 - -#if !defined(_TRACE_OCFS2_H) || defined(TRACE_HEADER_MULTI_READ) -#define _TRACE_OCFS2_H - -#include - -DECLARE_EVENT_CLASS(ocfs2__int, - TP_PROTO(int num), - TP_ARGS(num), - TP_STRUCT__entry( - __field(int, num) - ), - TP_fast_assign( - __entry->num = num; - ), - TP_printk("%d", __entry->num) -); - -#define DEFINE_OCFS2_INT_EVENT(name) \ -DEFINE_EVENT(ocfs2__int, name, \ - TP_PROTO(int num), \ - TP_ARGS(num)) - -DECLARE_EVENT_CLASS(ocfs2__uint, - TP_PROTO(unsigned int num), - TP_ARGS(num), - TP_STRUCT__entry( - __field( unsigned int, num ) - ), - TP_fast_assign( - __entry->num = num; - ), - TP_printk("%u", __entry->num) -); - -#define DEFINE_OCFS2_UINT_EVENT(name) \ -DEFINE_EVENT(ocfs2__uint, name, \ - TP_PROTO(unsigned int num), \ - TP_ARGS(num)) - -DECLARE_EVENT_CLASS(ocfs2__ull, - TP_PROTO(unsigned long long blkno), - TP_ARGS(blkno), - TP_STRUCT__entry( - __field(unsigned long long, blkno) - ), - TP_fast_assign( - __entry->blkno = blkno; - ), - TP_printk("%llu", __entry->blkno) -); - -#define DEFINE_OCFS2_ULL_EVENT(name) \ -DEFINE_EVENT(ocfs2__ull, name, \ - TP_PROTO(unsigned long long num), \ - TP_ARGS(num)) - -DECLARE_EVENT_CLASS(ocfs2__pointer, - TP_PROTO(void *pointer), - TP_ARGS(pointer), - TP_STRUCT__entry( - __field(void *, pointer) - ), - TP_fast_assign( - __entry->pointer = pointer; - ), - TP_printk("%p", __entry->pointer) -); - -#define DEFINE_OCFS2_POINTER_EVENT(name) \ -DEFINE_EVENT(ocfs2__pointer, name, \ - TP_PROTO(void *pointer), \ - TP_ARGS(pointer)) - -DECLARE_EVENT_CLASS(ocfs2__string, - TP_PROTO(const char *name), - TP_ARGS(name), - TP_STRUCT__entry( - __string(name,name) - ), - TP_fast_assign( - __assign_str(name, name); - ), - TP_printk("%s", __get_str(name)) -); - -#define DEFINE_OCFS2_STRING_EVENT(name) \ -DEFINE_EVENT(ocfs2__string, name, \ - TP_PROTO(const char *name), \ - TP_ARGS(name)) - -DECLARE_EVENT_CLASS(ocfs2__int_int, - TP_PROTO(int value1, int value2), - TP_ARGS(value1, value2), - TP_STRUCT__entry( - __field(int, value1) - __field(int, value2) - ), - TP_fast_assign( - __entry->value1 = value1; - __entry->value2 = value2; - ), - TP_printk("%d %d", __entry->value1, __entry->value2) -); - -#define DEFINE_OCFS2_INT_INT_EVENT(name) \ -DEFINE_EVENT(ocfs2__int_int, name, \ - TP_PROTO(int val1, int val2), \ - TP_ARGS(val1, val2)) - -DECLARE_EVENT_CLASS(ocfs2__uint_int, - TP_PROTO(unsigned int value1, int value2), - TP_ARGS(value1, value2), - TP_STRUCT__entry( - __field(unsigned int, value1) - __field(int, value2) - ), - TP_fast_assign( - __entry->value1 = value1; - __entry->value2 = value2; - ), - TP_printk("%u %d", __entry->value1, __entry->value2) -); - -#define DEFINE_OCFS2_UINT_INT_EVENT(name) \ -DEFINE_EVENT(ocfs2__uint_int, name, \ - TP_PROTO(unsigned int val1, int val2), \ - TP_ARGS(val1, val2)) - -DECLARE_EVENT_CLASS(ocfs2__uint_uint, - TP_PROTO(unsigned int value1, unsigned int value2), - TP_ARGS(value1, value2), - TP_STRUCT__entry( - __field(unsigned int, value1) - __field(unsigned int, value2) - ), - TP_fast_assign( - __entry->value1 = value1; - __entry->value2 = value2; - ), - TP_printk("%u %u", __entry->value1, __entry->value2) -); - -#define DEFINE_OCFS2_UINT_UINT_EVENT(name) \ -DEFINE_EVENT(ocfs2__uint_uint, name, \ - TP_PROTO(unsigned int val1, unsigned int val2), \ - TP_ARGS(val1, val2)) - -DECLARE_EVENT_CLASS(ocfs2__ull_uint, - TP_PROTO(unsigned long long value1, unsigned int value2), - TP_ARGS(value1, value2), - TP_STRUCT__entry( - __field(unsigned long long, value1) - __field(unsigned int, value2) - ), - TP_fast_assign( - __entry->value1 = value1; - __entry->value2 = value2; - ), - TP_printk("%llu %u", __entry->value1, __entry->value2) -); - -#define DEFINE_OCFS2_ULL_UINT_EVENT(name) \ -DEFINE_EVENT(ocfs2__ull_uint, name, \ - TP_PROTO(unsigned long long val1, unsigned int val2), \ - TP_ARGS(val1, val2)) - -DECLARE_EVENT_CLASS(ocfs2__ull_int, - TP_PROTO(unsigned long long value1, int value2), - TP_ARGS(value1, value2), - TP_STRUCT__entry( - __field(unsigned long long, value1) - __field(int, value2) - ), - TP_fast_assign( - __entry->value1 = value1; - __entry->value2 = value2; - ), - TP_printk("%llu %d", __entry->value1, __entry->value2) -); - -#define DEFINE_OCFS2_ULL_INT_EVENT(name) \ -DEFINE_EVENT(ocfs2__ull_int, name, \ - TP_PROTO(unsigned long long val1, int val2), \ - TP_ARGS(val1, val2)) - -DECLARE_EVENT_CLASS(ocfs2__ull_ull, - TP_PROTO(unsigned long long value1, unsigned long long value2), - TP_ARGS(value1, value2), - TP_STRUCT__entry( - __field(unsigned long long, value1) - __field(unsigned long long, value2) - ), - TP_fast_assign( - __entry->value1 = value1; - __entry->value2 = value2; - ), - TP_printk("%llu %llu", __entry->value1, __entry->value2) -); - -#define DEFINE_OCFS2_ULL_ULL_EVENT(name) \ -DEFINE_EVENT(ocfs2__ull_ull, name, \ - TP_PROTO(unsigned long long val1, unsigned long long val2), \ - TP_ARGS(val1, val2)) - -DECLARE_EVENT_CLASS(ocfs2__ull_ull_uint, - TP_PROTO(unsigned long long value1, - unsigned long long value2, unsigned int value3), - TP_ARGS(value1, value2, value3), - TP_STRUCT__entry( - __field(unsigned long long, value1) - __field(unsigned long long, value2) - __field(unsigned int, value3) - ), - TP_fast_assign( - __entry->value1 = value1; - __entry->value2 = value2; - __entry->value3 = value3; - ), - TP_printk("%llu %llu %u", - __entry->value1, __entry->value2, __entry->value3) -); - -#define DEFINE_OCFS2_ULL_ULL_UINT_EVENT(name) \ -DEFINE_EVENT(ocfs2__ull_ull_uint, name, \ - TP_PROTO(unsigned long long val1, \ - unsigned long long val2, unsigned int val3), \ - TP_ARGS(val1, val2, val3)) - -DECLARE_EVENT_CLASS(ocfs2__ull_uint_uint, - TP_PROTO(unsigned long long value1, - unsigned int value2, unsigned int value3), - TP_ARGS(value1, value2, value3), - TP_STRUCT__entry( - __field(unsigned long long, value1) - __field(unsigned int, value2) - __field(unsigned int, value3) - ), - TP_fast_assign( - __entry->value1 = value1; - __entry->value2 = value2; - __entry->value3 = value3; - ), - TP_printk("%llu %u %u", __entry->value1, - __entry->value2, __entry->value3) -); - -#define DEFINE_OCFS2_ULL_UINT_UINT_EVENT(name) \ -DEFINE_EVENT(ocfs2__ull_uint_uint, name, \ - TP_PROTO(unsigned long long val1, \ - unsigned int val2, unsigned int val3), \ - TP_ARGS(val1, val2, val3)) - -DECLARE_EVENT_CLASS(ocfs2__uint_uint_uint, - TP_PROTO(unsigned int value1, unsigned int value2, - unsigned int value3), - TP_ARGS(value1, value2, value3), - TP_STRUCT__entry( - __field( unsigned int, value1 ) - __field( unsigned int, value2 ) - __field( unsigned int, value3 ) - ), - TP_fast_assign( - __entry->value1 = value1; - __entry->value2 = value2; - __entry->value3 = value3; - ), - TP_printk("%u %u %u", __entry->value1, __entry->value2, __entry->value3) -); - -#define DEFINE_OCFS2_UINT_UINT_UINT_EVENT(name) \ -DEFINE_EVENT(ocfs2__uint_uint_uint, name, \ - TP_PROTO(unsigned int value1, unsigned int value2, \ - unsigned int value3), \ - TP_ARGS(value1, value2, value3)) - -DECLARE_EVENT_CLASS(ocfs2__ull_ull_ull, - TP_PROTO(unsigned long long value1, - unsigned long long value2, unsigned long long value3), - TP_ARGS(value1, value2, value3), - TP_STRUCT__entry( - __field(unsigned long long, value1) - __field(unsigned long long, value2) - __field(unsigned long long, value3) - ), - TP_fast_assign( - __entry->value1 = value1; - __entry->value2 = value2; - __entry->value3 = value3; - ), - TP_printk("%llu %llu %llu", - __entry->value1, __entry->value2, __entry->value3) -); - -#define DEFINE_OCFS2_ULL_ULL_ULL_EVENT(name) \ -DEFINE_EVENT(ocfs2__ull_ull_ull, name, \ - TP_PROTO(unsigned long long value1, unsigned long long value2, \ - unsigned long long value3), \ - TP_ARGS(value1, value2, value3)) - -DECLARE_EVENT_CLASS(ocfs2__ull_int_int_int, - TP_PROTO(unsigned long long ull, int value1, int value2, int value3), - TP_ARGS(ull, value1, value2, value3), - TP_STRUCT__entry( - __field( unsigned long long, ull ) - __field( int, value1 ) - __field( int, value2 ) - __field( int, value3 ) - ), - TP_fast_assign( - __entry->ull = ull; - __entry->value1 = value1; - __entry->value2 = value2; - __entry->value3 = value3; - ), - TP_printk("%llu %d %d %d", - __entry->ull, __entry->value1, - __entry->value2, __entry->value3) -); - -#define DEFINE_OCFS2_ULL_INT_INT_INT_EVENT(name) \ -DEFINE_EVENT(ocfs2__ull_int_int_int, name, \ - TP_PROTO(unsigned long long ull, int value1, \ - int value2, int value3), \ - TP_ARGS(ull, value1, value2, value3)) - -DECLARE_EVENT_CLASS(ocfs2__ull_uint_uint_uint, - TP_PROTO(unsigned long long ull, unsigned int value1, - unsigned int value2, unsigned int value3), - TP_ARGS(ull, value1, value2, value3), - TP_STRUCT__entry( - __field(unsigned long long, ull) - __field(unsigned int, value1) - __field(unsigned int, value2) - __field(unsigned int, value3) - ), - TP_fast_assign( - __entry->ull = ull; - __entry->value1 = value1; - __entry->value2 = value2; - __entry->value3 = value3; - ), - TP_printk("%llu %u %u %u", - __entry->ull, __entry->value1, - __entry->value2, __entry->value3) -); - -#define DEFINE_OCFS2_ULL_UINT_UINT_UINT_EVENT(name) \ -DEFINE_EVENT(ocfs2__ull_uint_uint_uint, name, \ - TP_PROTO(unsigned long long ull, unsigned int value1, \ - unsigned int value2, unsigned int value3), \ - TP_ARGS(ull, value1, value2, value3)) - -DECLARE_EVENT_CLASS(ocfs2__ull_ull_uint_uint, - TP_PROTO(unsigned long long value1, unsigned long long value2, - unsigned int value3, unsigned int value4), - TP_ARGS(value1, value2, value3, value4), - TP_STRUCT__entry( - __field(unsigned long long, value1) - __field(unsigned long long, value2) - __field(unsigned int, value3) - __field(unsigned int, value4) - ), - TP_fast_assign( - __entry->value1 = value1; - __entry->value2 = value2; - __entry->value3 = value3; - __entry->value4 = value4; - ), - TP_printk("%llu %llu %u %u", - __entry->value1, __entry->value2, - __entry->value3, __entry->value4) -); - -#define DEFINE_OCFS2_ULL_ULL_UINT_UINT_EVENT(name) \ -DEFINE_EVENT(ocfs2__ull_ull_uint_uint, name, \ - TP_PROTO(unsigned long long ull, unsigned long long ull1, \ - unsigned int value2, unsigned int value3), \ - TP_ARGS(ull, ull1, value2, value3)) - -/* Trace events for fs/ocfs2/alloc.c. */ -DECLARE_EVENT_CLASS(ocfs2__btree_ops, - TP_PROTO(unsigned long long owner,\ - unsigned int value1, unsigned int value2), - TP_ARGS(owner, value1, value2), - TP_STRUCT__entry( - __field(unsigned long long, owner) - __field(unsigned int, value1) - __field(unsigned int, value2) - ), - TP_fast_assign( - __entry->owner = owner; - __entry->value1 = value1; - __entry->value2 = value2; - ), - TP_printk("%llu %u %u", - __entry->owner, __entry->value1, __entry->value2) -); - -#define DEFINE_OCFS2_BTREE_EVENT(name) \ -DEFINE_EVENT(ocfs2__btree_ops, name, \ - TP_PROTO(unsigned long long owner, \ - unsigned int value1, unsigned int value2), \ - TP_ARGS(owner, value1, value2)) - -DEFINE_OCFS2_BTREE_EVENT(ocfs2_adjust_rightmost_branch); - -DEFINE_OCFS2_BTREE_EVENT(ocfs2_rotate_tree_right); - -DEFINE_OCFS2_BTREE_EVENT(ocfs2_append_rec_to_path); - -DEFINE_OCFS2_BTREE_EVENT(ocfs2_insert_extent_start); - -DEFINE_OCFS2_BTREE_EVENT(ocfs2_add_clusters_in_btree); - -DEFINE_OCFS2_INT_EVENT(ocfs2_num_free_extents); - -DEFINE_OCFS2_INT_EVENT(ocfs2_complete_edge_insert); - -TRACE_EVENT(ocfs2_grow_tree, - TP_PROTO(unsigned long long owner, int depth), - TP_ARGS(owner, depth), - TP_STRUCT__entry( - __field(unsigned long long, owner) - __field(int, depth) - ), - TP_fast_assign( - __entry->owner = owner; - __entry->depth = depth; - ), - TP_printk("%llu %d", __entry->owner, __entry->depth) -); - -TRACE_EVENT(ocfs2_rotate_subtree, - TP_PROTO(int subtree_root, unsigned long long blkno, - int depth), - TP_ARGS(subtree_root, blkno, depth), - TP_STRUCT__entry( - __field(int, subtree_root) - __field(unsigned long long, blkno) - __field(int, depth) - ), - TP_fast_assign( - __entry->subtree_root = subtree_root; - __entry->blkno = blkno; - __entry->depth = depth; - ), - TP_printk("%d %llu %d", __entry->subtree_root, - __entry->blkno, __entry->depth) -); - -TRACE_EVENT(ocfs2_insert_extent, - TP_PROTO(unsigned int ins_appending, unsigned int ins_contig, - int ins_contig_index, int free_records, int ins_tree_depth), - TP_ARGS(ins_appending, ins_contig, ins_contig_index, free_records, - ins_tree_depth), - TP_STRUCT__entry( - __field(unsigned int, ins_appending) - __field(unsigned int, ins_contig) - __field(int, ins_contig_index) - __field(int, free_records) - __field(int, ins_tree_depth) - ), - TP_fast_assign( - __entry->ins_appending = ins_appending; - __entry->ins_contig = ins_contig; - __entry->ins_contig_index = ins_contig_index; - __entry->free_records = free_records; - __entry->ins_tree_depth = ins_tree_depth; - ), - TP_printk("%u %u %d %d %d", - __entry->ins_appending, __entry->ins_contig, - __entry->ins_contig_index, __entry->free_records, - __entry->ins_tree_depth) -); - -TRACE_EVENT(ocfs2_split_extent, - TP_PROTO(int split_index, unsigned int c_contig_type, - unsigned int c_has_empty_extent, - unsigned int c_split_covers_rec), - TP_ARGS(split_index, c_contig_type, - c_has_empty_extent, c_split_covers_rec), - TP_STRUCT__entry( - __field(int, split_index) - __field(unsigned int, c_contig_type) - __field(unsigned int, c_has_empty_extent) - __field(unsigned int, c_split_covers_rec) - ), - TP_fast_assign( - __entry->split_index = split_index; - __entry->c_contig_type = c_contig_type; - __entry->c_has_empty_extent = c_has_empty_extent; - __entry->c_split_covers_rec = c_split_covers_rec; - ), - TP_printk("%d %u %u %u", __entry->split_index, __entry->c_contig_type, - __entry->c_has_empty_extent, __entry->c_split_covers_rec) -); - -TRACE_EVENT(ocfs2_remove_extent, - TP_PROTO(unsigned long long owner, unsigned int cpos, - unsigned int len, int index, - unsigned int e_cpos, unsigned int clusters), - TP_ARGS(owner, cpos, len, index, e_cpos, clusters), - TP_STRUCT__entry( - __field(unsigned long long, owner) - __field(unsigned int, cpos) - __field(unsigned int, len) - __field(int, index) - __field(unsigned int, e_cpos) - __field(unsigned int, clusters) - ), - TP_fast_assign( - __entry->owner = owner; - __entry->cpos = cpos; - __entry->len = len; - __entry->index = index; - __entry->e_cpos = e_cpos; - __entry->clusters = clusters; - ), - TP_printk("%llu %u %u %d %u %u", - __entry->owner, __entry->cpos, __entry->len, __entry->index, - __entry->e_cpos, __entry->clusters) -); - -TRACE_EVENT(ocfs2_commit_truncate, - TP_PROTO(unsigned long long ino, unsigned int new_cpos, - unsigned int clusters, unsigned int depth), - TP_ARGS(ino, new_cpos, clusters, depth), - TP_STRUCT__entry( - __field(unsigned long long, ino) - __field(unsigned int, new_cpos) - __field(unsigned int, clusters) - __field(unsigned int, depth) - ), - TP_fast_assign( - __entry->ino = ino; - __entry->new_cpos = new_cpos; - __entry->clusters = clusters; - __entry->depth = depth; - ), - TP_printk("%llu %u %u %u", - __entry->ino, __entry->new_cpos, - __entry->clusters, __entry->depth) -); - -TRACE_EVENT(ocfs2_validate_extent_block, - TP_PROTO(unsigned long long blkno), - TP_ARGS(blkno), - TP_STRUCT__entry( - __field(unsigned long long, blkno) - ), - TP_fast_assign( - __entry->blkno = blkno; - ), - TP_printk("%llu ", __entry->blkno) -); - -TRACE_EVENT(ocfs2_rotate_leaf, - TP_PROTO(unsigned int insert_cpos, int insert_index, - int has_empty, int next_free, - unsigned int l_count), - TP_ARGS(insert_cpos, insert_index, has_empty, - next_free, l_count), - TP_STRUCT__entry( - __field(unsigned int, insert_cpos) - __field(int, insert_index) - __field(int, has_empty) - __field(int, next_free) - __field(unsigned int, l_count) - ), - TP_fast_assign( - __entry->insert_cpos = insert_cpos; - __entry->insert_index = insert_index; - __entry->has_empty = has_empty; - __entry->next_free = next_free; - __entry->l_count = l_count; - ), - TP_printk("%u %d %d %d %u", __entry->insert_cpos, - __entry->insert_index, __entry->has_empty, - __entry->next_free, __entry->l_count) -); - -TRACE_EVENT(ocfs2_add_clusters_in_btree_ret, - TP_PROTO(int status, int reason, int err), - TP_ARGS(status, reason, err), - TP_STRUCT__entry( - __field(int, status) - __field(int, reason) - __field(int, err) - ), - TP_fast_assign( - __entry->status = status; - __entry->reason = reason; - __entry->err = err; - ), - TP_printk("%d %d %d", __entry->status, - __entry->reason, __entry->err) -); - -TRACE_EVENT(ocfs2_mark_extent_written, - TP_PROTO(unsigned long long owner, unsigned int cpos, - unsigned int len, unsigned int phys), - TP_ARGS(owner, cpos, len, phys), - TP_STRUCT__entry( - __field(unsigned long long, owner) - __field(unsigned int, cpos) - __field(unsigned int, len) - __field(unsigned int, phys) - ), - TP_fast_assign( - __entry->owner = owner; - __entry->cpos = cpos; - __entry->len = len; - __entry->phys = phys; - ), - TP_printk("%llu %u %u %u", - __entry->owner, __entry->cpos, - __entry->len, __entry->phys) -); - -DECLARE_EVENT_CLASS(ocfs2__truncate_log_ops, - TP_PROTO(unsigned long long blkno, int index, - unsigned int start, unsigned int num), - TP_ARGS(blkno, index, start, num), - TP_STRUCT__entry( - __field(unsigned long long, blkno) - __field(int, index) - __field(unsigned int, start) - __field(unsigned int, num) - ), - TP_fast_assign( - __entry->blkno = blkno; - __entry->index = index; - __entry->start = start; - __entry->num = num; - ), - TP_printk("%llu %d %u %u", - __entry->blkno, __entry->index, - __entry->start, __entry->num) -); - -#define DEFINE_OCFS2_TRUNCATE_LOG_OPS_EVENT(name) \ -DEFINE_EVENT(ocfs2__truncate_log_ops, name, \ - TP_PROTO(unsigned long long blkno, int index, \ - unsigned int start, unsigned int num), \ - TP_ARGS(blkno, index, start, num)) - -DEFINE_OCFS2_TRUNCATE_LOG_OPS_EVENT(ocfs2_truncate_log_append); - -DEFINE_OCFS2_TRUNCATE_LOG_OPS_EVENT(ocfs2_replay_truncate_records); - -DEFINE_OCFS2_ULL_UINT_EVENT(ocfs2_flush_truncate_log); - -DEFINE_OCFS2_INT_EVENT(ocfs2_begin_truncate_log_recovery); - -DEFINE_OCFS2_INT_EVENT(ocfs2_truncate_log_recovery_num); - -DEFINE_OCFS2_ULL_UINT_EVENT(ocfs2_complete_truncate_log_recovery); - -DEFINE_OCFS2_ULL_UINT_EVENT(ocfs2_free_cached_blocks); - -DEFINE_OCFS2_ULL_UINT_EVENT(ocfs2_cache_cluster_dealloc); - -DEFINE_OCFS2_INT_INT_EVENT(ocfs2_run_deallocs); - -TRACE_EVENT(ocfs2_cache_block_dealloc, - TP_PROTO(int type, int slot, unsigned long long suballoc, - unsigned long long blkno, unsigned int bit), - TP_ARGS(type, slot, suballoc, blkno, bit), - TP_STRUCT__entry( - __field(int, type) - __field(int, slot) - __field(unsigned long long, suballoc) - __field(unsigned long long, blkno) - __field(unsigned int, bit) - ), - TP_fast_assign( - __entry->type = type; - __entry->slot = slot; - __entry->suballoc = suballoc; - __entry->blkno = blkno; - __entry->bit = bit; - ), - TP_printk("%d %d %llu %llu %u", - __entry->type, __entry->slot, __entry->suballoc, - __entry->blkno, __entry->bit) -); - -/* End of trace events for fs/ocfs2/alloc.c. */ - -/* Trace events for fs/ocfs2/localalloc.c. */ - -DEFINE_OCFS2_UINT_UINT_UINT_EVENT(ocfs2_la_set_sizes); - -DEFINE_OCFS2_ULL_INT_INT_INT_EVENT(ocfs2_alloc_should_use_local); - -DEFINE_OCFS2_INT_EVENT(ocfs2_load_local_alloc); - -DEFINE_OCFS2_INT_EVENT(ocfs2_begin_local_alloc_recovery); - -DEFINE_OCFS2_ULL_INT_INT_INT_EVENT(ocfs2_reserve_local_alloc_bits); - -DEFINE_OCFS2_UINT_EVENT(ocfs2_local_alloc_count_bits); - -DEFINE_OCFS2_INT_INT_EVENT(ocfs2_local_alloc_find_clear_bits_search_bitmap); - -DEFINE_OCFS2_ULL_INT_INT_INT_EVENT(ocfs2_local_alloc_find_clear_bits); - -DEFINE_OCFS2_INT_INT_EVENT(ocfs2_sync_local_to_main); - -TRACE_EVENT(ocfs2_sync_local_to_main_free, - TP_PROTO(int count, int bit, unsigned long long start_blk, - unsigned long long blkno), - TP_ARGS(count, bit, start_blk, blkno), - TP_STRUCT__entry( - __field(int, count) - __field(int, bit) - __field(unsigned long long, start_blk) - __field(unsigned long long, blkno) - ), - TP_fast_assign( - __entry->count = count; - __entry->bit = bit; - __entry->start_blk = start_blk; - __entry->blkno = blkno; - ), - TP_printk("%d %d %llu %llu", - __entry->count, __entry->bit, __entry->start_blk, - __entry->blkno) -); - -DEFINE_OCFS2_INT_INT_EVENT(ocfs2_local_alloc_new_window); - -DEFINE_OCFS2_ULL_UINT_EVENT(ocfs2_local_alloc_new_window_result); - -/* End of trace events for fs/ocfs2/localalloc.c. */ - -/* Trace events for fs/ocfs2/resize.c. */ - -DEFINE_OCFS2_UINT_UINT_EVENT(ocfs2_update_last_group_and_inode); - -DEFINE_OCFS2_ULL_UINT_EVENT(ocfs2_group_extend); - -DEFINE_OCFS2_ULL_UINT_UINT_UINT_EVENT(ocfs2_group_add); - -/* End of trace events for fs/ocfs2/resize.c. */ - -/* Trace events for fs/ocfs2/suballoc.c. */ - -DEFINE_OCFS2_ULL_EVENT(ocfs2_validate_group_descriptor); - -DEFINE_OCFS2_ULL_UINT_EVENT(ocfs2_block_group_alloc_contig); - -DEFINE_OCFS2_ULL_UINT_EVENT(ocfs2_block_group_alloc_discontig); - -DEFINE_OCFS2_ULL_EVENT(ocfs2_block_group_alloc); - -DEFINE_OCFS2_UINT_UINT_EVENT(ocfs2_reserve_suballoc_bits_nospc); - -DEFINE_OCFS2_UINT_UINT_UINT_EVENT(ocfs2_reserve_suballoc_bits_no_new_group); - -DEFINE_OCFS2_ULL_EVENT(ocfs2_reserve_new_inode_new_group); - -DEFINE_OCFS2_UINT_UINT_EVENT(ocfs2_block_group_set_bits); - -TRACE_EVENT(ocfs2_relink_block_group, - TP_PROTO(unsigned long long i_blkno, unsigned int chain, - unsigned long long bg_blkno, - unsigned long long prev_blkno), - TP_ARGS(i_blkno, chain, bg_blkno, prev_blkno), - TP_STRUCT__entry( - __field(unsigned long long, i_blkno) - __field(unsigned int, chain) - __field(unsigned long long, bg_blkno) - __field(unsigned long long, prev_blkno) - ), - TP_fast_assign( - __entry->i_blkno = i_blkno; - __entry->chain = chain; - __entry->bg_blkno = bg_blkno; - __entry->prev_blkno = prev_blkno; - ), - TP_printk("%llu %u %llu %llu", - __entry->i_blkno, __entry->chain, __entry->bg_blkno, - __entry->prev_blkno) -); - -DEFINE_OCFS2_ULL_UINT_UINT_UINT_EVENT(ocfs2_cluster_group_search_wrong_max_bits); - -DEFINE_OCFS2_ULL_ULL_EVENT(ocfs2_cluster_group_search_max_block); - -DEFINE_OCFS2_ULL_ULL_EVENT(ocfs2_block_group_search_max_block); - -DEFINE_OCFS2_ULL_UINT_UINT_EVENT(ocfs2_search_chain_begin); - -DEFINE_OCFS2_ULL_UINT_EVENT(ocfs2_search_chain_succ); - -DEFINE_OCFS2_ULL_UINT_EVENT(ocfs2_search_chain_end); - -DEFINE_OCFS2_UINT_EVENT(ocfs2_claim_suballoc_bits); - -DEFINE_OCFS2_ULL_UINT_EVENT(ocfs2_claim_new_inode_at_loc); - -DEFINE_OCFS2_UINT_UINT_EVENT(ocfs2_block_group_clear_bits); - -TRACE_EVENT(ocfs2_free_suballoc_bits, - TP_PROTO(unsigned long long inode, unsigned long long group, - unsigned int start_bit, unsigned int count), - TP_ARGS(inode, group, start_bit, count), - TP_STRUCT__entry( - __field(unsigned long long, inode) - __field(unsigned long long, group) - __field(unsigned int, start_bit) - __field(unsigned int, count) - ), - TP_fast_assign( - __entry->inode = inode; - __entry->group = group; - __entry->start_bit = start_bit; - __entry->count = count; - ), - TP_printk("%llu %llu %u %u", __entry->inode, __entry->group, - __entry->start_bit, __entry->count) -); - -TRACE_EVENT(ocfs2_free_clusters, - TP_PROTO(unsigned long long bg_blkno, unsigned long long start_blk, - unsigned int start_bit, unsigned int count), - TP_ARGS(bg_blkno, start_blk, start_bit, count), - TP_STRUCT__entry( - __field(unsigned long long, bg_blkno) - __field(unsigned long long, start_blk) - __field(unsigned int, start_bit) - __field(unsigned int, count) - ), - TP_fast_assign( - __entry->bg_blkno = bg_blkno; - __entry->start_blk = start_blk; - __entry->start_bit = start_bit; - __entry->count = count; - ), - TP_printk("%llu %llu %u %u", __entry->bg_blkno, __entry->start_blk, - __entry->start_bit, __entry->count) -); - -DEFINE_OCFS2_ULL_EVENT(ocfs2_get_suballoc_slot_bit); - -DEFINE_OCFS2_ULL_UINT_EVENT(ocfs2_test_suballoc_bit); - -DEFINE_OCFS2_ULL_EVENT(ocfs2_test_inode_bit); - -/* End of trace events for fs/ocfs2/suballoc.c. */ - -/* Trace events for fs/ocfs2/refcounttree.c. */ - -DEFINE_OCFS2_ULL_EVENT(ocfs2_validate_refcount_block); - -DEFINE_OCFS2_ULL_EVENT(ocfs2_purge_refcount_trees); - -DEFINE_OCFS2_ULL_EVENT(ocfs2_create_refcount_tree); - -DEFINE_OCFS2_ULL_EVENT(ocfs2_create_refcount_tree_blkno); - -DEFINE_OCFS2_ULL_INT_INT_INT_EVENT(ocfs2_change_refcount_rec); - -DEFINE_OCFS2_ULL_UINT_EVENT(ocfs2_expand_inline_ref_root); - -DEFINE_OCFS2_ULL_UINT_UINT_EVENT(ocfs2_divide_leaf_refcount_block); - -DEFINE_OCFS2_ULL_UINT_EVENT(ocfs2_new_leaf_refcount_block); - -DECLARE_EVENT_CLASS(ocfs2__refcount_tree_ops, - TP_PROTO(unsigned long long blkno, int index, - unsigned long long cpos, - unsigned int clusters, unsigned int refcount), - TP_ARGS(blkno, index, cpos, clusters, refcount), - TP_STRUCT__entry( - __field(unsigned long long, blkno) - __field(int, index) - __field(unsigned long long, cpos) - __field(unsigned int, clusters) - __field(unsigned int, refcount) - ), - TP_fast_assign( - __entry->blkno = blkno; - __entry->index = index; - __entry->cpos = cpos; - __entry->clusters = clusters; - __entry->refcount = refcount; - ), - TP_printk("%llu %d %llu %u %u", __entry->blkno, __entry->index, - __entry->cpos, __entry->clusters, __entry->refcount) -); - -#define DEFINE_OCFS2_REFCOUNT_TREE_OPS_EVENT(name) \ -DEFINE_EVENT(ocfs2__refcount_tree_ops, name, \ - TP_PROTO(unsigned long long blkno, int index, \ - unsigned long long cpos, \ - unsigned int count, unsigned int refcount), \ - TP_ARGS(blkno, index, cpos, count, refcount)) - -DEFINE_OCFS2_REFCOUNT_TREE_OPS_EVENT(ocfs2_insert_refcount_rec); - -TRACE_EVENT(ocfs2_split_refcount_rec, - TP_PROTO(unsigned long long cpos, - unsigned int clusters, unsigned int refcount, - unsigned long long split_cpos, - unsigned int split_clusters, unsigned int split_refcount), - TP_ARGS(cpos, clusters, refcount, - split_cpos, split_clusters, split_refcount), - TP_STRUCT__entry( - __field(unsigned long long, cpos) - __field(unsigned int, clusters) - __field(unsigned int, refcount) - __field(unsigned long long, split_cpos) - __field(unsigned int, split_clusters) - __field(unsigned int, split_refcount) - ), - TP_fast_assign( - __entry->cpos = cpos; - __entry->clusters = clusters; - __entry->refcount = refcount; - __entry->split_cpos = split_cpos; - __entry->split_clusters = split_clusters; - __entry->split_refcount = split_refcount; - ), - TP_printk("%llu %u %u %llu %u %u", - __entry->cpos, __entry->clusters, __entry->refcount, - __entry->split_cpos, __entry->split_clusters, - __entry->split_refcount) -); - -DEFINE_OCFS2_REFCOUNT_TREE_OPS_EVENT(ocfs2_split_refcount_rec_insert); - -DEFINE_OCFS2_ULL_ULL_UINT_EVENT(ocfs2_increase_refcount_begin); - -DEFINE_OCFS2_ULL_UINT_UINT_EVENT(ocfs2_increase_refcount_change); - -DEFINE_OCFS2_ULL_UINT_EVENT(ocfs2_increase_refcount_insert); - -DEFINE_OCFS2_ULL_UINT_UINT_EVENT(ocfs2_increase_refcount_split); - -DEFINE_OCFS2_ULL_ULL_UINT_EVENT(ocfs2_remove_refcount_extent); - -DEFINE_OCFS2_ULL_EVENT(ocfs2_restore_refcount_block); - -DEFINE_OCFS2_ULL_ULL_UINT_EVENT(ocfs2_decrease_refcount_rec); - -TRACE_EVENT(ocfs2_decrease_refcount, - TP_PROTO(unsigned long long owner, - unsigned long long cpos, - unsigned int len, int delete), - TP_ARGS(owner, cpos, len, delete), - TP_STRUCT__entry( - __field(unsigned long long, owner) - __field(unsigned long long, cpos) - __field(unsigned int, len) - __field(int, delete) - ), - TP_fast_assign( - __entry->owner = owner; - __entry->cpos = cpos; - __entry->len = len; - __entry->delete = delete; - ), - TP_printk("%llu %llu %u %d", - __entry->owner, __entry->cpos, __entry->len, __entry->delete) -); - -DEFINE_OCFS2_ULL_UINT_UINT_UINT_EVENT(ocfs2_mark_extent_refcounted); - -DEFINE_OCFS2_ULL_UINT_UINT_UINT_EVENT(ocfs2_calc_refcount_meta_credits); - -TRACE_EVENT(ocfs2_calc_refcount_meta_credits_iterate, - TP_PROTO(int recs_add, unsigned long long cpos, - unsigned int clusters, unsigned long long r_cpos, - unsigned int r_clusters, unsigned int refcount, int index), - TP_ARGS(recs_add, cpos, clusters, r_cpos, r_clusters, refcount, index), - TP_STRUCT__entry( - __field(int, recs_add) - __field(unsigned long long, cpos) - __field(unsigned int, clusters) - __field(unsigned long long, r_cpos) - __field(unsigned int, r_clusters) - __field(unsigned int, refcount) - __field(int, index) - ), - TP_fast_assign( - __entry->recs_add = recs_add; - __entry->cpos = cpos; - __entry->clusters = clusters; - __entry->r_cpos = r_cpos; - __entry->r_clusters = r_clusters; - __entry->refcount = refcount; - __entry->index = index; - ), - TP_printk("%d %llu %u %llu %u %u %d", - __entry->recs_add, __entry->cpos, __entry->clusters, - __entry->r_cpos, __entry->r_clusters, - __entry->refcount, __entry->index) -); - -DEFINE_OCFS2_INT_INT_EVENT(ocfs2_add_refcount_flag); - -DEFINE_OCFS2_INT_INT_EVENT(ocfs2_prepare_refcount_change_for_del); - -DEFINE_OCFS2_INT_INT_EVENT(ocfs2_lock_refcount_allocators); - -DEFINE_OCFS2_ULL_UINT_UINT_UINT_EVENT(ocfs2_duplicate_clusters_by_page); - -DEFINE_OCFS2_ULL_UINT_UINT_UINT_EVENT(ocfs2_duplicate_clusters_by_jbd); - -TRACE_EVENT(ocfs2_clear_ext_refcount, - TP_PROTO(unsigned long long ino, unsigned int cpos, - unsigned int len, unsigned int p_cluster, - unsigned int ext_flags), - TP_ARGS(ino, cpos, len, p_cluster, ext_flags), - TP_STRUCT__entry( - __field(unsigned long long, ino) - __field(unsigned int, cpos) - __field(unsigned int, len) - __field(unsigned int, p_cluster) - __field(unsigned int, ext_flags) - ), - TP_fast_assign( - __entry->ino = ino; - __entry->cpos = cpos; - __entry->len = len; - __entry->p_cluster = p_cluster; - __entry->ext_flags = ext_flags; - ), - TP_printk("%llu %u %u %u %u", - __entry->ino, __entry->cpos, __entry->len, - __entry->p_cluster, __entry->ext_flags) -); - -TRACE_EVENT(ocfs2_replace_clusters, - TP_PROTO(unsigned long long ino, unsigned int cpos, - unsigned int old, unsigned int new, unsigned int len, - unsigned int ext_flags), - TP_ARGS(ino, cpos, old, new, len, ext_flags), - TP_STRUCT__entry( - __field(unsigned long long, ino) - __field(unsigned int, cpos) - __field(unsigned int, old) - __field(unsigned int, new) - __field(unsigned int, len) - __field(unsigned int, ext_flags) - ), - TP_fast_assign( - __entry->ino = ino; - __entry->cpos = cpos; - __entry->old = old; - __entry->new = new; - __entry->len = len; - __entry->ext_flags = ext_flags; - ), - TP_printk("%llu %u %u %u %u %u", - __entry->ino, __entry->cpos, __entry->old, __entry->new, - __entry->len, __entry->ext_flags) -); - -DEFINE_OCFS2_ULL_UINT_UINT_UINT_EVENT(ocfs2_make_clusters_writable); - -TRACE_EVENT(ocfs2_refcount_cow_hunk, - TP_PROTO(unsigned long long ino, unsigned int cpos, - unsigned int write_len, unsigned int max_cpos, - unsigned int cow_start, unsigned int cow_len), - TP_ARGS(ino, cpos, write_len, max_cpos, cow_start, cow_len), - TP_STRUCT__entry( - __field(unsigned long long, ino) - __field(unsigned int, cpos) - __field(unsigned int, write_len) - __field(unsigned int, max_cpos) - __field(unsigned int, cow_start) - __field(unsigned int, cow_len) - ), - TP_fast_assign( - __entry->ino = ino; - __entry->cpos = cpos; - __entry->write_len = write_len; - __entry->max_cpos = max_cpos; - __entry->cow_start = cow_start; - __entry->cow_len = cow_len; - ), - TP_printk("%llu %u %u %u %u %u", - __entry->ino, __entry->cpos, __entry->write_len, - __entry->max_cpos, __entry->cow_start, __entry->cow_len) -); - -/* End of trace events for fs/ocfs2/refcounttree.c. */ - -/* Trace events for fs/ocfs2/aops.c. */ - -DECLARE_EVENT_CLASS(ocfs2__get_block, - TP_PROTO(unsigned long long ino, unsigned long long iblock, - void *bh_result, int create), - TP_ARGS(ino, iblock, bh_result, create), - TP_STRUCT__entry( - __field(unsigned long long, ino) - __field(unsigned long long, iblock) - __field(void *, bh_result) - __field(int, create) - ), - TP_fast_assign( - __entry->ino = ino; - __entry->iblock = iblock; - __entry->bh_result = bh_result; - __entry->create = create; - ), - TP_printk("%llu %llu %p %d", - __entry->ino, __entry->iblock, - __entry->bh_result, __entry->create) -); - -#define DEFINE_OCFS2_GET_BLOCK_EVENT(name) \ -DEFINE_EVENT(ocfs2__get_block, name, \ - TP_PROTO(unsigned long long ino, unsigned long long iblock, \ - void *bh_result, int create), \ - TP_ARGS(ino, iblock, bh_result, create)) - -DEFINE_OCFS2_GET_BLOCK_EVENT(ocfs2_symlink_get_block); - -DEFINE_OCFS2_GET_BLOCK_EVENT(ocfs2_get_block); - -DEFINE_OCFS2_ULL_ULL_EVENT(ocfs2_get_block_end); - -DEFINE_OCFS2_ULL_ULL_EVENT(ocfs2_readpage); - -DEFINE_OCFS2_ULL_ULL_EVENT(ocfs2_writepage); - -DEFINE_OCFS2_ULL_ULL_EVENT(ocfs2_bmap); - -TRACE_EVENT(ocfs2_try_to_write_inline_data, - TP_PROTO(unsigned long long ino, unsigned int len, - unsigned long long pos, unsigned int flags), - TP_ARGS(ino, len, pos, flags), - TP_STRUCT__entry( - __field(unsigned long long, ino) - __field(unsigned int, len) - __field(unsigned long long, pos) - __field(unsigned int, flags) - ), - TP_fast_assign( - __entry->ino = ino; - __entry->len = len; - __entry->pos = pos; - __entry->flags = flags; - ), - TP_printk("%llu %u %llu 0x%x", - __entry->ino, __entry->len, __entry->pos, __entry->flags) -); - -TRACE_EVENT(ocfs2_write_begin_nolock, - TP_PROTO(unsigned long long ino, - long long i_size, unsigned int i_clusters, - unsigned long long pos, unsigned int len, - unsigned int flags, void *page, - unsigned int clusters, unsigned int extents_to_split), - TP_ARGS(ino, i_size, i_clusters, pos, len, flags, - page, clusters, extents_to_split), - TP_STRUCT__entry( - __field(unsigned long long, ino) - __field(long long, i_size) - __field(unsigned int, i_clusters) - __field(unsigned long long, pos) - __field(unsigned int, len) - __field(unsigned int, flags) - __field(void *, page) - __field(unsigned int, clusters) - __field(unsigned int, extents_to_split) - ), - TP_fast_assign( - __entry->ino = ino; - __entry->i_size = i_size; - __entry->i_clusters = i_clusters; - __entry->pos = pos; - __entry->len = len; - __entry->flags = flags; - __entry->page = page; - __entry->clusters = clusters; - __entry->extents_to_split = extents_to_split; - ), - TP_printk("%llu %lld %u %llu %u %u %p %u %u", - __entry->ino, __entry->i_size, __entry->i_clusters, - __entry->pos, __entry->len, - __entry->flags, __entry->page, __entry->clusters, - __entry->extents_to_split) -); - -TRACE_EVENT(ocfs2_write_end_inline, - TP_PROTO(unsigned long long ino, - unsigned long long pos, unsigned int copied, - unsigned int id_count, unsigned int features), - TP_ARGS(ino, pos, copied, id_count, features), - TP_STRUCT__entry( - __field(unsigned long long, ino) - __field(unsigned long long, pos) - __field(unsigned int, copied) - __field(unsigned int, id_count) - __field(unsigned int, features) - ), - TP_fast_assign( - __entry->ino = ino; - __entry->pos = pos; - __entry->copied = copied; - __entry->id_count = id_count; - __entry->features = features; - ), - TP_printk("%llu %llu %u %u %u", - __entry->ino, __entry->pos, __entry->copied, - __entry->id_count, __entry->features) -); - -/* End of trace events for fs/ocfs2/aops.c. */ - -/* Trace events for fs/ocfs2/mmap.c. */ - -TRACE_EVENT(ocfs2_fault, - TP_PROTO(unsigned long long ino, - void *area, void *page, unsigned long pgoff), - TP_ARGS(ino, area, page, pgoff), - TP_STRUCT__entry( - __field(unsigned long long, ino) - __field(void *, area) - __field(void *, page) - __field(unsigned long, pgoff) - ), - TP_fast_assign( - __entry->ino = ino; - __entry->area = area; - __entry->page = page; - __entry->pgoff = pgoff; - ), - TP_printk("%llu %p %p %lu", - __entry->ino, __entry->area, __entry->page, __entry->pgoff) -); - -/* End of trace events for fs/ocfs2/mmap.c. */ - -/* Trace events for fs/ocfs2/file.c. */ - -DECLARE_EVENT_CLASS(ocfs2__file_ops, - TP_PROTO(void *inode, void *file, void *dentry, - unsigned long long ino, - unsigned int d_len, const unsigned char *d_name, - unsigned long long para), - TP_ARGS(inode, file, dentry, ino, d_len, d_name, para), - TP_STRUCT__entry( - __field(void *, inode) - __field(void *, file) - __field(void *, dentry) - __field(unsigned long long, ino) - __field(unsigned int, d_len) - __string(d_name, d_name) - __field(unsigned long long, para) - ), - TP_fast_assign( - __entry->inode = inode; - __entry->file = file; - __entry->dentry = dentry; - __entry->ino = ino; - __entry->d_len = d_len; - __assign_str(d_name, d_name); - __entry->para = para; - ), - TP_printk("%p %p %p %llu %llu %.*s", __entry->inode, __entry->file, - __entry->dentry, __entry->ino, __entry->para, - __entry->d_len, __get_str(d_name)) -); - -#define DEFINE_OCFS2_FILE_OPS(name) \ -DEFINE_EVENT(ocfs2__file_ops, name, \ -TP_PROTO(void *inode, void *file, void *dentry, \ - unsigned long long ino, \ - unsigned int d_len, const unsigned char *d_name, \ - unsigned long long mode), \ - TP_ARGS(inode, file, dentry, ino, d_len, d_name, mode)) - -DEFINE_OCFS2_FILE_OPS(ocfs2_file_open); - -DEFINE_OCFS2_FILE_OPS(ocfs2_file_release); - -DEFINE_OCFS2_FILE_OPS(ocfs2_sync_file); - -DEFINE_OCFS2_FILE_OPS(ocfs2_file_aio_write); - -DEFINE_OCFS2_FILE_OPS(ocfs2_file_splice_write); - -DEFINE_OCFS2_FILE_OPS(ocfs2_file_splice_read); - -DEFINE_OCFS2_FILE_OPS(ocfs2_file_aio_read); - -DEFINE_OCFS2_ULL_ULL_ULL_EVENT(ocfs2_truncate_file); - -DEFINE_OCFS2_ULL_ULL_EVENT(ocfs2_truncate_file_error); - -TRACE_EVENT(ocfs2_extend_allocation, - TP_PROTO(unsigned long long ip_blkno, unsigned long long size, - unsigned int clusters, unsigned int clusters_to_add, - int why, int restart_func), - TP_ARGS(ip_blkno, size, clusters, clusters_to_add, why, restart_func), - TP_STRUCT__entry( - __field(unsigned long long, ip_blkno) - __field(unsigned long long, size) - __field(unsigned int, clusters) - __field(unsigned int, clusters_to_add) - __field(int, why) - __field(int, restart_func) - ), - TP_fast_assign( - __entry->ip_blkno = ip_blkno; - __entry->size = size; - __entry->clusters = clusters; - __entry->clusters_to_add = clusters_to_add; - __entry->why = why; - __entry->restart_func = restart_func; - ), - TP_printk("%llu %llu %u %u %d %d", - __entry->ip_blkno, __entry->size, __entry->clusters, - __entry->clusters_to_add, __entry->why, __entry->restart_func) -); - -TRACE_EVENT(ocfs2_extend_allocation_end, - TP_PROTO(unsigned long long ino, - unsigned int di_clusters, unsigned long long di_size, - unsigned int ip_clusters, unsigned long long i_size), - TP_ARGS(ino, di_clusters, di_size, ip_clusters, i_size), - TP_STRUCT__entry( - __field(unsigned long long, ino) - __field(unsigned int, di_clusters) - __field(unsigned long long, di_size) - __field(unsigned int, ip_clusters) - __field(unsigned long long, i_size) - ), - TP_fast_assign( - __entry->ino = ino; - __entry->di_clusters = di_clusters; - __entry->di_size = di_size; - __entry->ip_clusters = ip_clusters; - __entry->i_size = i_size; - ), - TP_printk("%llu %u %llu %u %llu", __entry->ino, __entry->di_clusters, - __entry->di_size, __entry->ip_clusters, __entry->i_size) -); - -TRACE_EVENT(ocfs2_write_zero_page, - TP_PROTO(unsigned long long ino, - unsigned long long abs_from, unsigned long long abs_to, - unsigned long index, unsigned int zero_from, - unsigned int zero_to), - TP_ARGS(ino, abs_from, abs_to, index, zero_from, zero_to), - TP_STRUCT__entry( - __field(unsigned long long, ino) - __field(unsigned long long, abs_from) - __field(unsigned long long, abs_to) - __field(unsigned long, index) - __field(unsigned int, zero_from) - __field(unsigned int, zero_to) - ), - TP_fast_assign( - __entry->ino = ino; - __entry->abs_from = abs_from; - __entry->abs_to = abs_to; - __entry->index = index; - __entry->zero_from = zero_from; - __entry->zero_to = zero_to; - ), - TP_printk("%llu %llu %llu %lu %u %u", __entry->ino, - __entry->abs_from, __entry->abs_to, - __entry->index, __entry->zero_from, __entry->zero_to) -); - -DEFINE_OCFS2_ULL_ULL_ULL_EVENT(ocfs2_zero_extend_range); - -DEFINE_OCFS2_ULL_ULL_ULL_EVENT(ocfs2_zero_extend); - -TRACE_EVENT(ocfs2_setattr, - TP_PROTO(void *inode, void *dentry, - unsigned long long ino, - unsigned int d_len, const unsigned char *d_name, - unsigned int ia_valid, unsigned int ia_mode, - unsigned int ia_uid, unsigned int ia_gid), - TP_ARGS(inode, dentry, ino, d_len, d_name, - ia_valid, ia_mode, ia_uid, ia_gid), - TP_STRUCT__entry( - __field(void *, inode) - __field(void *, dentry) - __field(unsigned long long, ino) - __field(unsigned int, d_len) - __string(d_name, d_name) - __field(unsigned int, ia_valid) - __field(unsigned int, ia_mode) - __field(unsigned int, ia_uid) - __field(unsigned int, ia_gid) - ), - TP_fast_assign( - __entry->inode = inode; - __entry->dentry = dentry; - __entry->ino = ino; - __entry->d_len = d_len; - __assign_str(d_name, d_name); - __entry->ia_valid = ia_valid; - __entry->ia_mode = ia_mode; - __entry->ia_uid = ia_uid; - __entry->ia_gid = ia_gid; - ), - TP_printk("%p %p %llu %.*s %u %u %u %u", __entry->inode, - __entry->dentry, __entry->ino, __entry->d_len, - __get_str(d_name), __entry->ia_valid, __entry->ia_mode, - __entry->ia_uid, __entry->ia_gid) -); - -DEFINE_OCFS2_ULL_UINT_EVENT(ocfs2_write_remove_suid); - -DEFINE_OCFS2_ULL_ULL_ULL_EVENT(ocfs2_zero_partial_clusters); - -DEFINE_OCFS2_ULL_ULL_EVENT(ocfs2_zero_partial_clusters_range1); - -DEFINE_OCFS2_ULL_ULL_EVENT(ocfs2_zero_partial_clusters_range2); - -DEFINE_OCFS2_ULL_ULL_ULL_EVENT(ocfs2_remove_inode_range); - -TRACE_EVENT(ocfs2_prepare_inode_for_write, - TP_PROTO(unsigned long long ino, unsigned long long saved_pos, - int appending, unsigned long count, - int *direct_io, int *has_refcount), - TP_ARGS(ino, saved_pos, appending, count, direct_io, has_refcount), - TP_STRUCT__entry( - __field(unsigned long long, ino) - __field(unsigned long long, saved_pos) - __field(int, appending) - __field(unsigned long, count) - __field(int, direct_io) - __field(int, has_refcount) - ), - TP_fast_assign( - __entry->ino = ino; - __entry->saved_pos = saved_pos; - __entry->appending = appending; - __entry->count = count; - __entry->direct_io = direct_io ? *direct_io : -1; - __entry->has_refcount = has_refcount ? *has_refcount : -1; - ), - TP_printk("%llu %llu %d %lu %d %d", __entry->ino, - __entry->saved_pos, __entry->appending, __entry->count, - __entry->direct_io, __entry->has_refcount) -); - -DEFINE_OCFS2_INT_EVENT(generic_file_aio_read_ret); - -/* End of trace events for fs/ocfs2/file.c. */ - -/* Trace events for fs/ocfs2/inode.c. */ - -TRACE_EVENT(ocfs2_iget_begin, - TP_PROTO(unsigned long long ino, unsigned int flags, int sysfile_type), - TP_ARGS(ino, flags, sysfile_type), - TP_STRUCT__entry( - __field(unsigned long long, ino) - __field(unsigned int, flags) - __field(int, sysfile_type) - ), - TP_fast_assign( - __entry->ino = ino; - __entry->flags = flags; - __entry->sysfile_type = sysfile_type; - ), - TP_printk("%llu %u %d", __entry->ino, - __entry->flags, __entry->sysfile_type) -); - -DEFINE_OCFS2_ULL_EVENT(ocfs2_iget5_locked); - -TRACE_EVENT(ocfs2_iget_end, - TP_PROTO(void *inode, unsigned long long ino), - TP_ARGS(inode, ino), - TP_STRUCT__entry( - __field(void *, inode) - __field(unsigned long long, ino) - ), - TP_fast_assign( - __entry->inode = inode; - __entry->ino = ino; - ), - TP_printk("%p %llu", __entry->inode, __entry->ino) -); - -TRACE_EVENT(ocfs2_find_actor, - TP_PROTO(void *inode, unsigned long long ino, - void *args, unsigned long long fi_blkno), - TP_ARGS(inode, ino, args, fi_blkno), - TP_STRUCT__entry( - __field(void *, inode) - __field(unsigned long long, ino) - __field(void *, args) - __field(unsigned long long, fi_blkno) - ), - TP_fast_assign( - __entry->inode = inode; - __entry->ino = ino; - __entry->args = args; - __entry->fi_blkno = fi_blkno; - ), - TP_printk("%p %llu %p %llu", __entry->inode, __entry->ino, - __entry->args, __entry->fi_blkno) -); - -DEFINE_OCFS2_ULL_UINT_EVENT(ocfs2_populate_inode); - -DEFINE_OCFS2_ULL_INT_EVENT(ocfs2_read_locked_inode); - -DEFINE_OCFS2_INT_INT_EVENT(ocfs2_check_orphan_recovery_state); - -DEFINE_OCFS2_ULL_EVENT(ocfs2_validate_inode_block); - -TRACE_EVENT(ocfs2_inode_is_valid_to_delete, - TP_PROTO(void *task, void *dc_task, unsigned long long ino, - unsigned int flags), - TP_ARGS(task, dc_task, ino, flags), - TP_STRUCT__entry( - __field(void *, task) - __field(void *, dc_task) - __field(unsigned long long, ino) - __field(unsigned int, flags) - ), - TP_fast_assign( - __entry->task = task; - __entry->dc_task = dc_task; - __entry->ino = ino; - __entry->flags = flags; - ), - TP_printk("%p %p %llu %u", __entry->task, __entry->dc_task, - __entry->ino, __entry->flags) -); - -DEFINE_OCFS2_ULL_UINT_EVENT(ocfs2_query_inode_wipe_begin); - -DEFINE_OCFS2_UINT_EVENT(ocfs2_query_inode_wipe_succ); - -DEFINE_OCFS2_INT_INT_EVENT(ocfs2_query_inode_wipe_end); - -DEFINE_OCFS2_ULL_INT_EVENT(ocfs2_cleanup_delete_inode); - -DEFINE_OCFS2_ULL_ULL_UINT_EVENT(ocfs2_delete_inode); - -DEFINE_OCFS2_ULL_UINT_EVENT(ocfs2_clear_inode); - -DEFINE_OCFS2_ULL_UINT_UINT_EVENT(ocfs2_drop_inode); - -TRACE_EVENT(ocfs2_inode_revalidate, - TP_PROTO(void *inode, unsigned long long ino, - unsigned int flags), - TP_ARGS(inode, ino, flags), - TP_STRUCT__entry( - __field(void *, inode) - __field(unsigned long long, ino) - __field(unsigned int, flags) - ), - TP_fast_assign( - __entry->inode = inode; - __entry->ino = ino; - __entry->flags = flags; - ), - TP_printk("%p %llu %u", __entry->inode, __entry->ino, __entry->flags) -); - -DEFINE_OCFS2_ULL_EVENT(ocfs2_mark_inode_dirty); - -/* End of trace events for fs/ocfs2/inode.c. */ - -/* Trace events for fs/ocfs2/extent_map.c. */ - -TRACE_EVENT(ocfs2_read_virt_blocks, - TP_PROTO(void *inode, unsigned long long vblock, int nr, - void *bhs, unsigned int flags, void *validate), - TP_ARGS(inode, vblock, nr, bhs, flags, validate), - TP_STRUCT__entry( - __field(void *, inode) - __field(unsigned long long, vblock) - __field(int, nr) - __field(void *, bhs) - __field(unsigned int, flags) - __field(void *, validate) - ), - TP_fast_assign( - __entry->inode = inode; - __entry->vblock = vblock; - __entry->nr = nr; - __entry->bhs = bhs; - __entry->flags = flags; - __entry->validate = validate; - ), - TP_printk("%p %llu %d %p %x %p", __entry->inode, __entry->vblock, - __entry->nr, __entry->bhs, __entry->flags, __entry->validate) -); - -/* End of trace events for fs/ocfs2/extent_map.c. */ - -/* Trace events for fs/ocfs2/slot_map.c. */ - -DEFINE_OCFS2_UINT_EVENT(ocfs2_refresh_slot_info); - -DEFINE_OCFS2_ULL_UINT_EVENT(ocfs2_map_slot_buffers); - -DEFINE_OCFS2_ULL_UINT_EVENT(ocfs2_map_slot_buffers_block); - -DEFINE_OCFS2_INT_EVENT(ocfs2_find_slot); - -/* End of trace events for fs/ocfs2/slot_map.c. */ - -/* Trace events for fs/ocfs2/heartbeat.c. */ - -DEFINE_OCFS2_INT_EVENT(ocfs2_do_node_down); - -/* End of trace events for fs/ocfs2/heartbeat.c. */ - -/* Trace events for fs/ocfs2/super.c. */ - -TRACE_EVENT(ocfs2_remount, - TP_PROTO(unsigned long s_flags, unsigned long osb_flags, int flags), - TP_ARGS(s_flags, osb_flags, flags), - TP_STRUCT__entry( - __field(unsigned long, s_flags) - __field(unsigned long, osb_flags) - __field(int, flags) - ), - TP_fast_assign( - __entry->s_flags = s_flags; - __entry->osb_flags = osb_flags; - __entry->flags = flags; - ), - TP_printk("%lu %lu %d", __entry->s_flags, - __entry->osb_flags, __entry->flags) -); - -TRACE_EVENT(ocfs2_fill_super, - TP_PROTO(void *sb, void *data, int silent), - TP_ARGS(sb, data, silent), - TP_STRUCT__entry( - __field(void *, sb) - __field(void *, data) - __field(int, silent) - ), - TP_fast_assign( - __entry->sb = sb; - __entry->data = data; - __entry->silent = silent; - ), - TP_printk("%p %p %d", __entry->sb, - __entry->data, __entry->silent) -); - -TRACE_EVENT(ocfs2_parse_options, - TP_PROTO(int is_remount, char *options), - TP_ARGS(is_remount, options), - TP_STRUCT__entry( - __field(int, is_remount) - __string(options, options) - ), - TP_fast_assign( - __entry->is_remount = is_remount; - __assign_str(options, options); - ), - TP_printk("%d %s", __entry->is_remount, __get_str(options)) -); - -DEFINE_OCFS2_POINTER_EVENT(ocfs2_put_super); - -TRACE_EVENT(ocfs2_statfs, - TP_PROTO(void *sb, void *buf), - TP_ARGS(sb, buf), - TP_STRUCT__entry( - __field(void *, sb) - __field(void *, buf) - ), - TP_fast_assign( - __entry->sb = sb; - __entry->buf = buf; - ), - TP_printk("%p %p", __entry->sb, __entry->buf) -); - -DEFINE_OCFS2_POINTER_EVENT(ocfs2_dismount_volume); - -TRACE_EVENT(ocfs2_initialize_super, - TP_PROTO(char *label, char *uuid_str, unsigned long long root_dir, - unsigned long long system_dir, int cluster_bits), - TP_ARGS(label, uuid_str, root_dir, system_dir, cluster_bits), - TP_STRUCT__entry( - __string(label, label) - __string(uuid_str, uuid_str) - __field(unsigned long long, root_dir) - __field(unsigned long long, system_dir) - __field(int, cluster_bits) - ), - TP_fast_assign( - __assign_str(label, label); - __assign_str(uuid_str, uuid_str); - __entry->root_dir = root_dir; - __entry->system_dir = system_dir; - __entry->cluster_bits = cluster_bits; - ), - TP_printk("%s %s %llu %llu %d", __get_str(label), __get_str(uuid_str), - __entry->root_dir, __entry->system_dir, __entry->cluster_bits) -); - -/* End of trace events for fs/ocfs2/super.c. */ - -/* Trace events for fs/ocfs2/xattr.c. */ - -DEFINE_OCFS2_ULL_EVENT(ocfs2_validate_xattr_block); - -DEFINE_OCFS2_UINT_EVENT(ocfs2_xattr_extend_allocation); - -TRACE_EVENT(ocfs2_init_xattr_set_ctxt, - TP_PROTO(const char *name, int meta, int clusters, int credits), - TP_ARGS(name, meta, clusters, credits), - TP_STRUCT__entry( - __string(name, name) - __field(int, meta) - __field(int, clusters) - __field(int, credits) - ), - TP_fast_assign( - __assign_str(name, name); - __entry->meta = meta; - __entry->clusters = clusters; - __entry->credits = credits; - ), - TP_printk("%s %d %d %d", __get_str(name), __entry->meta, - __entry->clusters, __entry->credits) -); - -DECLARE_EVENT_CLASS(ocfs2__xattr_find, - TP_PROTO(unsigned long long ino, const char *name, int name_index, - unsigned int hash, unsigned long long location, - int xe_index), - TP_ARGS(ino, name, name_index, hash, location, xe_index), - TP_STRUCT__entry( - __field(unsigned long long, ino) - __string(name, name) - __field(int, name_index) - __field(unsigned int, hash) - __field(unsigned long long, location) - __field(int, xe_index) - ), - TP_fast_assign( - __entry->ino = ino; - __assign_str(name, name); - __entry->name_index = name_index; - __entry->hash = hash; - __entry->location = location; - __entry->xe_index = xe_index; - ), - TP_printk("%llu %s %d %u %llu %d", __entry->ino, __get_str(name), - __entry->name_index, __entry->hash, __entry->location, - __entry->xe_index) -); - -#define DEFINE_OCFS2_XATTR_FIND_EVENT(name) \ -DEFINE_EVENT(ocfs2__xattr_find, name, \ -TP_PROTO(unsigned long long ino, const char *name, int name_index, \ - unsigned int hash, unsigned long long bucket, \ - int xe_index), \ - TP_ARGS(ino, name, name_index, hash, bucket, xe_index)) - -DEFINE_OCFS2_XATTR_FIND_EVENT(ocfs2_xattr_bucket_find); - -DEFINE_OCFS2_XATTR_FIND_EVENT(ocfs2_xattr_index_block_find); - -DEFINE_OCFS2_XATTR_FIND_EVENT(ocfs2_xattr_index_block_find_rec); - -DEFINE_OCFS2_ULL_ULL_UINT_EVENT(ocfs2_iterate_xattr_buckets); - -DEFINE_OCFS2_ULL_UINT_EVENT(ocfs2_iterate_xattr_bucket); - -DEFINE_OCFS2_ULL_ULL_EVENT(ocfs2_cp_xattr_block_to_bucket_begin); - -DEFINE_OCFS2_UINT_UINT_UINT_EVENT(ocfs2_cp_xattr_block_to_bucket_end); - -DEFINE_OCFS2_ULL_EVENT(ocfs2_xattr_create_index_block_begin); - -DEFINE_OCFS2_ULL_EVENT(ocfs2_xattr_create_index_block); - -DEFINE_OCFS2_ULL_UINT_UINT_UINT_EVENT(ocfs2_defrag_xattr_bucket); - -DEFINE_OCFS2_ULL_ULL_EVENT(ocfs2_mv_xattr_bucket_cross_cluster); - -DEFINE_OCFS2_ULL_ULL_EVENT(ocfs2_divide_xattr_bucket_begin); - -DEFINE_OCFS2_UINT_UINT_UINT_EVENT(ocfs2_divide_xattr_bucket_move); - -DEFINE_OCFS2_ULL_ULL_UINT_EVENT(ocfs2_cp_xattr_bucket); - -DEFINE_OCFS2_ULL_ULL_EVENT(ocfs2_mv_xattr_buckets); - -DEFINE_OCFS2_ULL_ULL_UINT_EVENT(ocfs2_adjust_xattr_cross_cluster); - -DEFINE_OCFS2_ULL_ULL_UINT_UINT_EVENT(ocfs2_add_new_xattr_cluster_begin); - -DEFINE_OCFS2_ULL_UINT_EVENT(ocfs2_add_new_xattr_cluster); - -DEFINE_OCFS2_ULL_UINT_UINT_EVENT(ocfs2_add_new_xattr_cluster_insert); - -DEFINE_OCFS2_ULL_ULL_UINT_UINT_EVENT(ocfs2_extend_xattr_bucket); - -DEFINE_OCFS2_ULL_EVENT(ocfs2_add_new_xattr_bucket); - -DEFINE_OCFS2_ULL_UINT_UINT_EVENT(ocfs2_xattr_bucket_value_truncate); - -DEFINE_OCFS2_ULL_ULL_UINT_UINT_EVENT(ocfs2_rm_xattr_cluster); - -DEFINE_OCFS2_ULL_UINT_EVENT(ocfs2_reflink_xattr_header); - -DEFINE_OCFS2_ULL_INT_EVENT(ocfs2_create_empty_xattr_block); - -DEFINE_OCFS2_STRING_EVENT(ocfs2_xattr_set_entry_bucket); - -DEFINE_OCFS2_STRING_EVENT(ocfs2_xattr_set_entry_index_block); - -DEFINE_OCFS2_ULL_UINT_EVENT(ocfs2_xattr_bucket_value_refcount); - -DEFINE_OCFS2_ULL_UINT_UINT_EVENT(ocfs2_reflink_xattr_buckets); - -DEFINE_OCFS2_ULL_UINT_EVENT(ocfs2_reflink_xattr_rec); - -/* End of trace events for fs/ocfs2/xattr.c. */ - -/* Trace events for fs/ocfs2/reservations.c. */ - -DEFINE_OCFS2_UINT_UINT_EVENT(ocfs2_resv_insert); - -DEFINE_OCFS2_ULL_UINT_UINT_UINT_EVENT(ocfs2_resmap_find_free_bits_begin); - -DEFINE_OCFS2_UINT_UINT_EVENT(ocfs2_resmap_find_free_bits_end); - -TRACE_EVENT(ocfs2_resv_find_window_begin, - TP_PROTO(unsigned int r_start, unsigned int r_end, unsigned int goal, - unsigned int wanted, int empty_root), - TP_ARGS(r_start, r_end, goal, wanted, empty_root), - TP_STRUCT__entry( - __field(unsigned int, r_start) - __field(unsigned int, r_end) - __field(unsigned int, goal) - __field(unsigned int, wanted) - __field(int, empty_root) - ), - TP_fast_assign( - __entry->r_start = r_start; - __entry->r_end = r_end; - __entry->goal = goal; - __entry->wanted = wanted; - __entry->empty_root = empty_root; - ), - TP_printk("%u %u %u %u %d", __entry->r_start, __entry->r_end, - __entry->goal, __entry->wanted, __entry->empty_root) -); - -DEFINE_OCFS2_UINT_UINT_EVENT(ocfs2_resv_find_window_prev); - -DEFINE_OCFS2_INT_INT_EVENT(ocfs2_resv_find_window_next); - -DEFINE_OCFS2_UINT_UINT_UINT_EVENT(ocfs2_cannibalize_resv_begin); - -TRACE_EVENT(ocfs2_cannibalize_resv_end, - TP_PROTO(unsigned int start, unsigned int end, unsigned int len, - unsigned int last_start, unsigned int last_len), - TP_ARGS(start, end, len, last_start, last_len), - TP_STRUCT__entry( - __field(unsigned int, start) - __field(unsigned int, end) - __field(unsigned int, len) - __field(unsigned int, last_start) - __field(unsigned int, last_len) - ), - TP_fast_assign( - __entry->start = start; - __entry->end = end; - __entry->len = len; - __entry->last_start = last_start; - __entry->last_len = last_len; - ), - TP_printk("%u %u %u %u %u", __entry->start, __entry->end, - __entry->len, __entry->last_start, __entry->last_len) -); - -DEFINE_OCFS2_UINT_UINT_EVENT(ocfs2_resmap_resv_bits); - -TRACE_EVENT(ocfs2_resmap_claimed_bits_begin, - TP_PROTO(unsigned int cstart, unsigned int cend, unsigned int clen, - unsigned int r_start, unsigned int r_end, unsigned int r_len, - unsigned int last_start, unsigned int last_len), - TP_ARGS(cstart, cend, clen, r_start, r_end, - r_len, last_start, last_len), - TP_STRUCT__entry( - __field(unsigned int, cstart) - __field(unsigned int, cend) - __field(unsigned int, clen) - __field(unsigned int, r_start) - __field(unsigned int, r_end) - __field(unsigned int, r_len) - __field(unsigned int, last_start) - __field(unsigned int, last_len) - ), - TP_fast_assign( - __entry->cstart = cstart; - __entry->cend = cend; - __entry->clen = clen; - __entry->r_start = r_start; - __entry->r_end = r_end; - __entry->r_len = r_len; - __entry->last_start = last_start; - __entry->last_len = last_len; - ), - TP_printk("%u %u %u %u %u %u %u %u", - __entry->cstart, __entry->cend, __entry->clen, - __entry->r_start, __entry->r_end, __entry->r_len, - __entry->last_start, __entry->last_len) -); - -TRACE_EVENT(ocfs2_resmap_claimed_bits_end, - TP_PROTO(unsigned int start, unsigned int end, unsigned int len, - unsigned int last_start, unsigned int last_len), - TP_ARGS(start, end, len, last_start, last_len), - TP_STRUCT__entry( - __field(unsigned int, start) - __field(unsigned int, end) - __field(unsigned int, len) - __field(unsigned int, last_start) - __field(unsigned int, last_len) - ), - TP_fast_assign( - __entry->start = start; - __entry->end = end; - __entry->len = len; - __entry->last_start = last_start; - __entry->last_len = last_len; - ), - TP_printk("%u %u %u %u %u", __entry->start, __entry->end, - __entry->len, __entry->last_start, __entry->last_len) -); - -/* End of trace events for fs/ocfs2/reservations.c. */ - -/* Trace events for fs/ocfs2/quota_local.c. */ - -DEFINE_OCFS2_ULL_UINT_EVENT(ocfs2_recover_local_quota_file); - -DEFINE_OCFS2_INT_EVENT(ocfs2_finish_quota_recovery); - -DEFINE_OCFS2_ULL_ULL_UINT_EVENT(olq_set_dquot); - -/* End of trace events for fs/ocfs2/quota_local.c. */ - -/* Trace events for fs/ocfs2/quota_global.c. */ - -DEFINE_OCFS2_ULL_EVENT(ocfs2_validate_quota_block); - -TRACE_EVENT(ocfs2_sync_dquot, - TP_PROTO(unsigned int dq_id, long long dqb_curspace, - long long spacechange, long long curinodes, - long long inodechange), - TP_ARGS(dq_id, dqb_curspace, spacechange, curinodes, inodechange), - TP_STRUCT__entry( - __field(unsigned int, dq_id) - __field(long long, dqb_curspace) - __field(long long, spacechange) - __field(long long, curinodes) - __field(long long, inodechange) - ), - TP_fast_assign( - __entry->dq_id = dq_id; - __entry->dqb_curspace = dqb_curspace; - __entry->spacechange = spacechange; - __entry->curinodes = curinodes; - __entry->inodechange = inodechange; - ), - TP_printk("%u %lld %lld %lld %lld", __entry->dq_id, - __entry->dqb_curspace, __entry->spacechange, - __entry->curinodes, __entry->inodechange) -); - -TRACE_EVENT(ocfs2_sync_dquot_helper, - TP_PROTO(unsigned int dq_id, unsigned int dq_type, unsigned long type, - const char *s_id), - TP_ARGS(dq_id, dq_type, type, s_id), - - TP_STRUCT__entry( - __field(unsigned int, dq_id) - __field(unsigned int, dq_type) - __field(unsigned long, type) - __string(s_id, s_id) - ), - TP_fast_assign( - __entry->dq_id = dq_id; - __entry->dq_type = dq_type; - __entry->type = type; - __assign_str(s_id, s_id); - ), - TP_printk("%u %u %lu %s", __entry->dq_id, __entry->dq_type, - __entry->type, __get_str(s_id)) -); - -DEFINE_OCFS2_UINT_INT_EVENT(ocfs2_write_dquot); - -DEFINE_OCFS2_UINT_INT_EVENT(ocfs2_release_dquot); - -DEFINE_OCFS2_UINT_INT_EVENT(ocfs2_acquire_dquot); - -DEFINE_OCFS2_UINT_INT_EVENT(ocfs2_mark_dquot_dirty); - -/* End of trace events for fs/ocfs2/quota_global.c. */ - -/* Trace events for fs/ocfs2/dir.c. */ -DEFINE_OCFS2_INT_EVENT(ocfs2_search_dirblock); - -DEFINE_OCFS2_ULL_EVENT(ocfs2_validate_dir_block); - -DEFINE_OCFS2_POINTER_EVENT(ocfs2_find_entry_el); - -TRACE_EVENT(ocfs2_dx_dir_search, - TP_PROTO(unsigned long long ino, int namelen, const char *name, - unsigned int major_hash, unsigned int minor_hash, - unsigned long long blkno), - TP_ARGS(ino, namelen, name, major_hash, minor_hash, blkno), - TP_STRUCT__entry( - __field(unsigned long long, ino) - __field(int, namelen) - __string(name, name) - __field(unsigned int, major_hash) - __field(unsigned int,minor_hash) - __field(unsigned long long, blkno) - ), - TP_fast_assign( - __entry->ino = ino; - __entry->namelen = namelen; - __assign_str(name, name); - __entry->major_hash = major_hash; - __entry->minor_hash = minor_hash; - __entry->blkno = blkno; - ), - TP_printk("%llu %.*s %u %u %llu", __entry->ino, - __entry->namelen, __get_str(name), - __entry->major_hash, __entry->minor_hash, __entry->blkno) -); - -DEFINE_OCFS2_UINT_UINT_EVENT(ocfs2_dx_dir_search_leaf_info); - -DEFINE_OCFS2_ULL_INT_EVENT(ocfs2_delete_entry_dx); - -DEFINE_OCFS2_ULL_EVENT(ocfs2_readdir); - -TRACE_EVENT(ocfs2_find_files_on_disk, - TP_PROTO(int namelen, const char *name, void *blkno, - unsigned long long dir), - TP_ARGS(namelen, name, blkno, dir), - TP_STRUCT__entry( - __field(int, namelen) - __string(name, name) - __field(void *, blkno) - __field(unsigned long long, dir) - ), - TP_fast_assign( - __entry->namelen = namelen; - __assign_str(name, name); - __entry->blkno = blkno; - __entry->dir = dir; - ), - TP_printk("%.*s %p %llu", __entry->namelen, __get_str(name), - __entry->blkno, __entry->dir) -); - -TRACE_EVENT(ocfs2_check_dir_for_entry, - TP_PROTO(unsigned long long dir, int namelen, const char *name), - TP_ARGS(dir, namelen, name), - TP_STRUCT__entry( - __field(unsigned long long, dir) - __field(int, namelen) - __string(name, name) - ), - TP_fast_assign( - __entry->dir = dir; - __entry->namelen = namelen; - __assign_str(name, name); - ), - TP_printk("%llu %.*s", __entry->dir, - __entry->namelen, __get_str(name)) -); - -DEFINE_OCFS2_ULL_ULL_EVENT(ocfs2_dx_dir_attach_index); - -DEFINE_OCFS2_ULL_ULL_UINT_EVENT(ocfs2_dx_dir_format_cluster); - -TRACE_EVENT(ocfs2_dx_dir_index_root_block, - TP_PROTO(unsigned long long dir, - unsigned int major_hash, unsigned int minor_hash, - int namelen, const char *name, unsigned int num_used), - TP_ARGS(dir, major_hash, minor_hash, namelen, name, num_used), - TP_STRUCT__entry( - __field(unsigned long long, dir) - __field(unsigned int, major_hash) - __field(unsigned int, minor_hash) - __field(int, namelen) - __string(name, name) - __field(unsigned int, num_used) - ), - TP_fast_assign( - __entry->dir = dir; - __entry->major_hash = major_hash; - __entry->minor_hash = minor_hash; - __entry->namelen = namelen; - __assign_str(name, name); - __entry->num_used = num_used; - ), - TP_printk("%llu %x %x %.*s %u", __entry->dir, - __entry->major_hash, __entry->minor_hash, - __entry->namelen, __get_str(name), __entry->num_used) -); - -DEFINE_OCFS2_ULL_ULL_EVENT(ocfs2_extend_dir); - -DEFINE_OCFS2_ULL_ULL_UINT_EVENT(ocfs2_dx_dir_rebalance); - -DEFINE_OCFS2_UINT_UINT_UINT_EVENT(ocfs2_dx_dir_rebalance_split); - -DEFINE_OCFS2_ULL_INT_EVENT(ocfs2_prepare_dir_for_insert); - -/* End of trace events for fs/ocfs2/dir.c. */ - -/* Trace events for fs/ocfs2/namei.c. */ - -DECLARE_EVENT_CLASS(ocfs2__dentry_ops, - TP_PROTO(void *dir, void *dentry, int name_len, const char *name, - unsigned long long dir_blkno, unsigned long long extra), - TP_ARGS(dir, dentry, name_len, name, dir_blkno, extra), - TP_STRUCT__entry( - __field(void *, dir) - __field(void *, dentry) - __field(int, name_len) - __string(name, name) - __field(unsigned long long, dir_blkno) - __field(unsigned long long, extra) - ), - TP_fast_assign( - __entry->dir = dir; - __entry->dentry = dentry; - __entry->name_len = name_len; - __assign_str(name, name); - __entry->dir_blkno = dir_blkno; - __entry->extra = extra; - ), - TP_printk("%p %p %.*s %llu %llu", __entry->dir, __entry->dentry, - __entry->name_len, __get_str(name), - __entry->dir_blkno, __entry->extra) -); - -#define DEFINE_OCFS2_DENTRY_OPS(name) \ -DEFINE_EVENT(ocfs2__dentry_ops, name, \ -TP_PROTO(void *dir, void *dentry, int name_len, const char *name, \ - unsigned long long dir_blkno, unsigned long long extra), \ - TP_ARGS(dir, dentry, name_len, name, dir_blkno, extra)) - -DEFINE_OCFS2_DENTRY_OPS(ocfs2_lookup); - -DEFINE_OCFS2_DENTRY_OPS(ocfs2_mkdir); - -DEFINE_OCFS2_DENTRY_OPS(ocfs2_create); - -DEFINE_OCFS2_DENTRY_OPS(ocfs2_unlink); - -DEFINE_OCFS2_DENTRY_OPS(ocfs2_symlink_create); - -DEFINE_OCFS2_DENTRY_OPS(ocfs2_mv_orphaned_inode_to_new); - -DEFINE_OCFS2_POINTER_EVENT(ocfs2_lookup_ret); - -TRACE_EVENT(ocfs2_mknod, - TP_PROTO(void *dir, void *dentry, int name_len, const char *name, - unsigned long long dir_blkno, unsigned long dev, int mode), - TP_ARGS(dir, dentry, name_len, name, dir_blkno, dev, mode), - TP_STRUCT__entry( - __field(void *, dir) - __field(void *, dentry) - __field(int, name_len) - __string(name, name) - __field(unsigned long long, dir_blkno) - __field(unsigned long, dev) - __field(int, mode) - ), - TP_fast_assign( - __entry->dir = dir; - __entry->dentry = dentry; - __entry->name_len = name_len; - __assign_str(name, name); - __entry->dir_blkno = dir_blkno; - __entry->dev = dev; - __entry->mode = mode; - ), - TP_printk("%p %p %.*s %llu %lu %d", __entry->dir, __entry->dentry, - __entry->name_len, __get_str(name), - __entry->dir_blkno, __entry->dev, __entry->mode) -); - -TRACE_EVENT(ocfs2_link, - TP_PROTO(unsigned long long ino, int old_len, const char *old_name, - int name_len, const char *name), - TP_ARGS(ino, old_len, old_name, name_len, name), - TP_STRUCT__entry( - __field(unsigned long long, ino) - __field(int, old_len) - __string(old_name, old_name) - __field(int, name_len) - __string(name, name) - ), - TP_fast_assign( - __entry->ino = ino; - __entry->old_len = old_len; - __assign_str(old_name, old_name); - __entry->name_len = name_len; - __assign_str(name, name); - ), - TP_printk("%llu %.*s %.*s", __entry->ino, - __entry->old_len, __get_str(old_name), - __entry->name_len, __get_str(name)) -); - -DEFINE_OCFS2_ULL_ULL_UINT_EVENT(ocfs2_unlink_noent); - -DEFINE_OCFS2_ULL_ULL_EVENT(ocfs2_double_lock); - -DEFINE_OCFS2_ULL_ULL_EVENT(ocfs2_double_lock_end); - -TRACE_EVENT(ocfs2_rename, - TP_PROTO(void *old_dir, void *old_dentry, - void *new_dir, void *new_dentry, - int old_len, const char *old_name, - int new_len, const char *new_name), - TP_ARGS(old_dir, old_dentry, new_dir, new_dentry, - old_len, old_name, new_len, new_name), - TP_STRUCT__entry( - __field(void *, old_dir) - __field(void *, old_dentry) - __field(void *, new_dir) - __field(void *, new_dentry) - __field(int, old_len) - __string(old_name, old_name) - __field(int, new_len) - __string(new_name, new_name) - ), - TP_fast_assign( - __entry->old_dir = old_dir; - __entry->old_dentry = old_dentry; - __entry->new_dir = new_dir; - __entry->new_dentry = new_dentry; - __entry->old_len = old_len; - __assign_str(old_name, old_name); - __entry->new_len = new_len; - __assign_str(new_name, new_name); - ), - TP_printk("%p %p %p %p %.*s %.*s", - __entry->old_dir, __entry->old_dentry, - __entry->new_dir, __entry->new_dentry, - __entry->old_len, __get_str(old_name), - __entry->new_len, __get_str(new_name)) -); - -TRACE_EVENT(ocfs2_rename_target_exists, - TP_PROTO(int new_len, const char *new_name), - TP_ARGS(new_len, new_name), - TP_STRUCT__entry( - __field(int, new_len) - __string(new_name, new_name) - ), - TP_fast_assign( - __entry->new_len = new_len; - __assign_str(new_name, new_name); - ), - TP_printk("%.*s", __entry->new_len, __get_str(new_name)) -); - -DEFINE_OCFS2_ULL_ULL_UINT_EVENT(ocfs2_rename_disagree); - -TRACE_EVENT(ocfs2_rename_over_existing, - TP_PROTO(unsigned long long new_blkno, void *new_bh, - unsigned long long newdi_blkno), - TP_ARGS(new_blkno, new_bh, newdi_blkno), - TP_STRUCT__entry( - __field(unsigned long long, new_blkno) - __field(void *, new_bh) - __field(unsigned long long, newdi_blkno) - ), - TP_fast_assign( - __entry->new_blkno = new_blkno; - __entry->new_bh = new_bh; - __entry->newdi_blkno = newdi_blkno; - ), - TP_printk("%llu %p %llu", __entry->new_blkno, __entry->new_bh, - __entry->newdi_blkno) -); - -DEFINE_OCFS2_ULL_ULL_UINT_EVENT(ocfs2_create_symlink_data); - -TRACE_EVENT(ocfs2_symlink_begin, - TP_PROTO(void *dir, void *dentry, const char *symname, - int len, const char *name), - TP_ARGS(dir, dentry, symname, len, name), - TP_STRUCT__entry( - __field(void *, dir) - __field(void *, dentry) - __field(const char *, symname) - __field(int, len) - __string(name, name) - ), - TP_fast_assign( - __entry->dir = dir; - __entry->dentry = dentry; - __entry->symname = symname; - __entry->len = len; - __assign_str(name, name); - ), - TP_printk("%p %p %s %.*s", __entry->dir, __entry->dentry, - __entry->symname, __entry->len, __get_str(name)) -); - -TRACE_EVENT(ocfs2_blkno_stringify, - TP_PROTO(unsigned long long blkno, const char *name, int namelen), - TP_ARGS(blkno, name, namelen), - TP_STRUCT__entry( - __field(unsigned long long, blkno) - __string(name, name) - __field(int, namelen) - ), - TP_fast_assign( - __entry->blkno = blkno; - __assign_str(name, name); - __entry->namelen = namelen; - ), - TP_printk("%llu %s %d", __entry->blkno, __get_str(name), - __entry->namelen) -); - -DEFINE_OCFS2_ULL_EVENT(ocfs2_orphan_add_begin); - -DEFINE_OCFS2_ULL_UINT_EVENT(ocfs2_orphan_add_end); - -TRACE_EVENT(ocfs2_orphan_del, - TP_PROTO(unsigned long long dir, const char *name, int namelen), - TP_ARGS(dir, name, namelen), - TP_STRUCT__entry( - __field(unsigned long long, dir) - __string(name, name) - __field(int, namelen) - ), - TP_fast_assign( - __entry->dir = dir; - __assign_str(name, name); - __entry->namelen = namelen; - ), - TP_printk("%llu %s %d", __entry->dir, __get_str(name), - __entry->namelen) -); - -/* End of trace events for fs/ocfs2/namei.c. */ - -/* Trace events for fs/ocfs2/dcache.c. */ - -TRACE_EVENT(ocfs2_dentry_revalidate, - TP_PROTO(void *dentry, int len, const char *name), - TP_ARGS(dentry, len, name), - TP_STRUCT__entry( - __field(void *, dentry) - __field(int, len) - __string(name, name) - ), - TP_fast_assign( - __entry->dentry = dentry; - __entry->len = len; - __assign_str(name, name); - ), - TP_printk("%p %.*s", __entry->dentry, __entry->len, __get_str(name)) -); - -TRACE_EVENT(ocfs2_dentry_revalidate_negative, - TP_PROTO(int len, const char *name, unsigned long pgen, - unsigned long gen), - TP_ARGS(len, name, pgen, gen), - TP_STRUCT__entry( - __field(int, len) - __string(name, name) - __field(unsigned long, pgen) - __field(unsigned long, gen) - ), - TP_fast_assign( - __entry->len = len; - __assign_str(name, name); - __entry->pgen = pgen; - __entry->gen = gen; - ), - TP_printk("%.*s %lu %lu", __entry->len, __get_str(name), - __entry->pgen, __entry->gen) -); - -DEFINE_OCFS2_ULL_EVENT(ocfs2_dentry_revalidate_delete); - -DEFINE_OCFS2_ULL_INT_EVENT(ocfs2_dentry_revalidate_orphaned); - -DEFINE_OCFS2_ULL_EVENT(ocfs2_dentry_revalidate_nofsdata); - -DEFINE_OCFS2_INT_EVENT(ocfs2_dentry_revalidate_ret); - -TRACE_EVENT(ocfs2_find_local_alias, - TP_PROTO(int len, const char *name), - TP_ARGS(len, name), - TP_STRUCT__entry( - __field(int, len) - __string(name, name) - ), - TP_fast_assign( - __entry->len = len; - __assign_str(name, name); - ), - TP_printk("%.*s", __entry->len, __get_str(name)) -); - -TRACE_EVENT(ocfs2_dentry_attach_lock, - TP_PROTO(int len, const char *name, - unsigned long long parent, void *fsdata), - TP_ARGS(len, name, parent, fsdata), - TP_STRUCT__entry( - __field(int, len) - __string(name, name) - __field(unsigned long long, parent) - __field(void *, fsdata) - ), - TP_fast_assign( - __entry->len = len; - __assign_str(name, name); - __entry->parent = parent; - __entry->fsdata = fsdata; - ), - TP_printk("%.*s %llu %p", __entry->len, __get_str(name), - __entry->parent, __entry->fsdata) -); - -TRACE_EVENT(ocfs2_dentry_attach_lock_found, - TP_PROTO(const char *name, unsigned long long parent, - unsigned long long ino), - TP_ARGS(name, parent, ino), - TP_STRUCT__entry( - __string(name, name) - __field(unsigned long long, parent) - __field(unsigned long long, ino) - ), - TP_fast_assign( - __assign_str(name, name); - __entry->parent = parent; - __entry->ino = ino; - ), - TP_printk("%s %llu %llu", __get_str(name), __entry->parent, __entry->ino) -); -/* End of trace events for fs/ocfs2/dcache.c. */ - -/* Trace events for fs/ocfs2/export.c. */ - -TRACE_EVENT(ocfs2_get_dentry_begin, - TP_PROTO(void *sb, void *handle, unsigned long long blkno), - TP_ARGS(sb, handle, blkno), - TP_STRUCT__entry( - __field(void *, sb) - __field(void *, handle) - __field(unsigned long long, blkno) - ), - TP_fast_assign( - __entry->sb = sb; - __entry->handle = handle; - __entry->blkno = blkno; - ), - TP_printk("%p %p %llu", __entry->sb, __entry->handle, __entry->blkno) -); - -DEFINE_OCFS2_INT_INT_EVENT(ocfs2_get_dentry_test_bit); - -DEFINE_OCFS2_ULL_UINT_EVENT(ocfs2_get_dentry_stale); - -DEFINE_OCFS2_ULL_UINT_UINT_EVENT(ocfs2_get_dentry_generation); - -DEFINE_OCFS2_POINTER_EVENT(ocfs2_get_dentry_end); - -TRACE_EVENT(ocfs2_get_parent, - TP_PROTO(void *child, int len, const char *name, - unsigned long long ino), - TP_ARGS(child, len, name, ino), - TP_STRUCT__entry( - __field(void *, child) - __field(int, len) - __string(name, name) - __field(unsigned long long, ino) - ), - TP_fast_assign( - __entry->child = child; - __entry->len = len; - __assign_str(name, name); - __entry->ino = ino; - ), - TP_printk("%p %.*s %llu", __entry->child, __entry->len, - __get_str(name), __entry->ino) -); - -DEFINE_OCFS2_POINTER_EVENT(ocfs2_get_parent_end); - -TRACE_EVENT(ocfs2_encode_fh_begin, - TP_PROTO(void *dentry, int name_len, const char *name, - void *fh, int len, int connectable), - TP_ARGS(dentry, name_len, name, fh, len, connectable), - TP_STRUCT__entry( - __field(void *, dentry) - __field(int, name_len) - __string(name, name) - __field(void *, fh) - __field(int, len) - __field(int, connectable) - ), - TP_fast_assign( - __entry->dentry = dentry; - __entry->name_len = name_len; - __assign_str(name, name); - __entry->fh = fh; - __entry->len = len; - __entry->connectable = connectable; - ), - TP_printk("%p %.*s %p %d %d", __entry->dentry, __entry->name_len, - __get_str(name), __entry->fh, __entry->len, - __entry->connectable) -); - -DEFINE_OCFS2_ULL_UINT_EVENT(ocfs2_encode_fh_self); - -DEFINE_OCFS2_ULL_UINT_EVENT(ocfs2_encode_fh_parent); - -DEFINE_OCFS2_INT_EVENT(ocfs2_encode_fh_type); - -/* End of trace events for fs/ocfs2/export.c. */ - -/* Trace events for fs/ocfs2/journal.c. */ - -DEFINE_OCFS2_UINT_EVENT(ocfs2_commit_cache_begin); - -DEFINE_OCFS2_ULL_UINT_EVENT(ocfs2_commit_cache_end); - -DEFINE_OCFS2_INT_INT_EVENT(ocfs2_extend_trans); - -DEFINE_OCFS2_INT_EVENT(ocfs2_extend_trans_restart); - -DEFINE_OCFS2_ULL_ULL_UINT_UINT_EVENT(ocfs2_journal_access); - -DEFINE_OCFS2_ULL_EVENT(ocfs2_journal_dirty); - -DEFINE_OCFS2_ULL_ULL_UINT_EVENT(ocfs2_journal_init); - -DEFINE_OCFS2_UINT_EVENT(ocfs2_journal_init_maxlen); - -DEFINE_OCFS2_INT_EVENT(ocfs2_journal_shutdown); - -DEFINE_OCFS2_POINTER_EVENT(ocfs2_journal_shutdown_wait); - -DEFINE_OCFS2_ULL_EVENT(ocfs2_complete_recovery); - -DEFINE_OCFS2_INT_EVENT(ocfs2_complete_recovery_end); - -TRACE_EVENT(ocfs2_complete_recovery_slot, - TP_PROTO(int slot, unsigned long long la_ino, - unsigned long long tl_ino, void *qrec), - TP_ARGS(slot, la_ino, tl_ino, qrec), - TP_STRUCT__entry( - __field(int, slot) - __field(unsigned long long, la_ino) - __field(unsigned long long, tl_ino) - __field(void *, qrec) - ), - TP_fast_assign( - __entry->slot = slot; - __entry->la_ino = la_ino; - __entry->tl_ino = tl_ino; - __entry->qrec = qrec; - ), - TP_printk("%d %llu %llu %p", __entry->slot, __entry->la_ino, - __entry->tl_ino, __entry->qrec) -); - -DEFINE_OCFS2_INT_INT_EVENT(ocfs2_recovery_thread_node); - -DEFINE_OCFS2_INT_EVENT(ocfs2_recovery_thread_end); - -TRACE_EVENT(ocfs2_recovery_thread, - TP_PROTO(int node_num, int osb_node_num, int disable, - void *recovery_thread, int map_set), - TP_ARGS(node_num, osb_node_num, disable, recovery_thread, map_set), - TP_STRUCT__entry( - __field(int, node_num) - __field(int, osb_node_num) - __field(int,disable) - __field(void *, recovery_thread) - __field(int,map_set) - ), - TP_fast_assign( - __entry->node_num = node_num; - __entry->osb_node_num = osb_node_num; - __entry->disable = disable; - __entry->recovery_thread = recovery_thread; - __entry->map_set = map_set; - ), - TP_printk("%d %d %d %p %d", __entry->node_num, - __entry->osb_node_num, __entry->disable, - __entry->recovery_thread, __entry->map_set) -); - -DEFINE_OCFS2_UINT_UINT_UINT_EVENT(ocfs2_replay_journal_recovered); - -DEFINE_OCFS2_INT_EVENT(ocfs2_replay_journal_lock_err); - -DEFINE_OCFS2_INT_EVENT(ocfs2_replay_journal_skip); - -DEFINE_OCFS2_UINT_UINT_UINT_EVENT(ocfs2_recover_node); - -DEFINE_OCFS2_UINT_UINT_EVENT(ocfs2_recover_node_skip); - -DEFINE_OCFS2_UINT_UINT_EVENT(ocfs2_mark_dead_nodes); - -DEFINE_OCFS2_UINT_UINT_UINT_EVENT(ocfs2_queue_orphan_scan_begin); - -DEFINE_OCFS2_UINT_UINT_UINT_EVENT(ocfs2_queue_orphan_scan_end); - -DEFINE_OCFS2_ULL_EVENT(ocfs2_orphan_filldir); - -DEFINE_OCFS2_INT_EVENT(ocfs2_recover_orphans); - -DEFINE_OCFS2_ULL_EVENT(ocfs2_recover_orphans_iput); - -DEFINE_OCFS2_INT_EVENT(ocfs2_wait_on_mount); - -/* End of trace events for fs/ocfs2/journal.c. */ - -/* Trace events for fs/ocfs2/buffer_head_io.c. */ - -DEFINE_OCFS2_ULL_UINT_EVENT(ocfs2_read_blocks_sync); - -DEFINE_OCFS2_ULL_EVENT(ocfs2_read_blocks_sync_jbd); - -DEFINE_OCFS2_ULL_ULL_EVENT(ocfs2_read_blocks_from_disk); - -DEFINE_OCFS2_ULL_INT_INT_INT_EVENT(ocfs2_read_blocks_bh); - -DEFINE_OCFS2_ULL_INT_INT_INT_EVENT(ocfs2_read_blocks_end); - -TRACE_EVENT(ocfs2_write_block, - TP_PROTO(unsigned long long block, void *ci), - TP_ARGS(block, ci), - TP_STRUCT__entry( - __field(unsigned long long, block) - __field(void *, ci) - ), - TP_fast_assign( - __entry->block = block; - __entry->ci = ci; - ), - TP_printk("%llu %p", __entry->block, __entry->ci) -); - -TRACE_EVENT(ocfs2_read_blocks_begin, - TP_PROTO(void *ci, unsigned long long block, - unsigned int nr, int flags), - TP_ARGS(ci, block, nr, flags), - TP_STRUCT__entry( - __field(void *, ci) - __field(unsigned long long, block) - __field(unsigned int, nr) - __field(int, flags) - ), - TP_fast_assign( - __entry->ci = ci; - __entry->block = block; - __entry->nr = nr; - __entry->flags = flags; - ), - TP_printk("%p %llu %u %d", __entry->ci, __entry->block, - __entry->nr, __entry->flags) -); - -/* End of trace events for fs/ocfs2/buffer_head_io.c. */ - -/* Trace events for fs/ocfs2/uptodate.c. */ - -DEFINE_OCFS2_ULL_EVENT(ocfs2_purge_copied_metadata_tree); - -DEFINE_OCFS2_ULL_UINT_UINT_EVENT(ocfs2_metadata_cache_purge); - -DEFINE_OCFS2_ULL_ULL_UINT_EVENT(ocfs2_buffer_cached_begin); - -TRACE_EVENT(ocfs2_buffer_cached_end, - TP_PROTO(int index, void *item), - TP_ARGS(index, item), - TP_STRUCT__entry( - __field(int, index) - __field(void *, item) - ), - TP_fast_assign( - __entry->index = index; - __entry->item = item; - ), - TP_printk("%d %p", __entry->index, __entry->item) -); - -DEFINE_OCFS2_ULL_ULL_UINT_EVENT(ocfs2_append_cache_array); - -DEFINE_OCFS2_ULL_ULL_UINT_EVENT(ocfs2_insert_cache_tree); - -DEFINE_OCFS2_ULL_UINT_UINT_EVENT(ocfs2_expand_cache); - -DEFINE_OCFS2_ULL_UINT_UINT_EVENT(ocfs2_set_buffer_uptodate); - -DEFINE_OCFS2_ULL_ULL_EVENT(ocfs2_set_buffer_uptodate_begin); - -DEFINE_OCFS2_ULL_UINT_UINT_EVENT(ocfs2_remove_metadata_array); - -DEFINE_OCFS2_ULL_ULL_EVENT(ocfs2_remove_metadata_tree); - -DEFINE_OCFS2_ULL_ULL_UINT_UINT_EVENT(ocfs2_remove_block_from_cache); - -/* End of trace events for fs/ocfs2/uptodate.c. */ -#endif /* _TRACE_OCFS2_H */ - -/* This part must be outside protection */ -#undef TRACE_INCLUDE_PATH -#define TRACE_INCLUDE_PATH . -#define TRACE_INCLUDE_FILE ocfs2_trace -#include diff --git a/trunk/fs/ocfs2/quota_global.c b/trunk/fs/ocfs2/quota_global.c index 279aef68025b..a73f64166481 100644 --- a/trunk/fs/ocfs2/quota_global.c +++ b/trunk/fs/ocfs2/quota_global.c @@ -11,6 +11,7 @@ #include #include +#define MLOG_MASK_PREFIX ML_QUOTA #include #include "ocfs2_fs.h" @@ -26,7 +27,6 @@ #include "super.h" #include "buffer_head_io.h" #include "quota.h" -#include "ocfs2_trace.h" /* * Locking of quotas with OCFS2 is rather complex. Here are rules that @@ -130,7 +130,8 @@ int ocfs2_validate_quota_block(struct super_block *sb, struct buffer_head *bh) struct ocfs2_disk_dqtrailer *dqt = ocfs2_block_dqtrailer(sb->s_blocksize, bh->b_data); - trace_ocfs2_validate_quota_block((unsigned long long)bh->b_blocknr); + mlog(0, "Validating quota block %llu\n", + (unsigned long long)bh->b_blocknr); BUG_ON(!buffer_uptodate(bh)); @@ -340,6 +341,8 @@ int ocfs2_global_read_info(struct super_block *sb, int type) u64 pcount; int status; + mlog_entry_void(); + /* Read global header */ gqinode = ocfs2_get_system_file_inode(OCFS2_SB(sb), ino[type], OCFS2_INVALID_SLOT); @@ -399,8 +402,7 @@ int ocfs2_global_read_info(struct super_block *sb, int type) msecs_to_jiffies(oinfo->dqi_syncms)); out_err: - if (status) - mlog_errno(status); + mlog_exit(status); return status; out_unlock: ocfs2_unlock_global_qf(oinfo, 0); @@ -506,10 +508,9 @@ int __ocfs2_sync_dquot(struct dquot *dquot, int freeing) olditime = dquot->dq_dqb.dqb_itime; oldbtime = dquot->dq_dqb.dqb_btime; ocfs2_global_disk2memdqb(dquot, &dqblk); - trace_ocfs2_sync_dquot(dquot->dq_id, dquot->dq_dqb.dqb_curspace, - (long long)spacechange, - dquot->dq_dqb.dqb_curinodes, - (long long)inodechange); + mlog(0, "Syncing global dquot %u space %lld+%lld, inodes %lld+%lld\n", + dquot->dq_id, dquot->dq_dqb.dqb_curspace, (long long)spacechange, + dquot->dq_dqb.dqb_curinodes, (long long)inodechange); if (!test_bit(DQ_LASTSET_B + QIF_SPACE_B, &dquot->dq_flags)) dquot->dq_dqb.dqb_curspace += spacechange; if (!test_bit(DQ_LASTSET_B + QIF_INODES_B, &dquot->dq_flags)) @@ -593,8 +594,8 @@ static int ocfs2_sync_dquot_helper(struct dquot *dquot, unsigned long type) struct ocfs2_super *osb = OCFS2_SB(sb); int status = 0; - trace_ocfs2_sync_dquot_helper(dquot->dq_id, dquot->dq_type, - type, sb->s_id); + mlog_entry("id=%u qtype=%u type=%lu device=%s\n", dquot->dq_id, + dquot->dq_type, type, sb->s_id); if (type != dquot->dq_type) goto out; status = ocfs2_lock_global_qf(oinfo, 1); @@ -620,6 +621,7 @@ static int ocfs2_sync_dquot_helper(struct dquot *dquot, unsigned long type) out_ilock: ocfs2_unlock_global_qf(oinfo, 1); out: + mlog_exit(status); return status; } @@ -645,7 +647,7 @@ static int ocfs2_write_dquot(struct dquot *dquot) struct ocfs2_super *osb = OCFS2_SB(dquot->dq_sb); int status = 0; - trace_ocfs2_write_dquot(dquot->dq_id, dquot->dq_type); + mlog_entry("id=%u, type=%d", dquot->dq_id, dquot->dq_type); handle = ocfs2_start_trans(osb, OCFS2_QWRITE_CREDITS); if (IS_ERR(handle)) { @@ -658,6 +660,7 @@ static int ocfs2_write_dquot(struct dquot *dquot) mutex_unlock(&sb_dqopt(dquot->dq_sb)->dqio_mutex); ocfs2_commit_trans(osb, handle); out: + mlog_exit(status); return status; } @@ -683,7 +686,7 @@ static int ocfs2_release_dquot(struct dquot *dquot) struct ocfs2_super *osb = OCFS2_SB(dquot->dq_sb); int status = 0; - trace_ocfs2_release_dquot(dquot->dq_id, dquot->dq_type); + mlog_entry("id=%u, type=%d", dquot->dq_id, dquot->dq_type); mutex_lock(&dquot->dq_lock); /* Check whether we are not racing with some other dqget() */ @@ -719,8 +722,7 @@ static int ocfs2_release_dquot(struct dquot *dquot) ocfs2_unlock_global_qf(oinfo, 1); out: mutex_unlock(&dquot->dq_lock); - if (status) - mlog_errno(status); + mlog_exit(status); return status; } @@ -741,7 +743,7 @@ static int ocfs2_acquire_dquot(struct dquot *dquot) int need_alloc = ocfs2_global_qinit_alloc(sb, type); handle_t *handle; - trace_ocfs2_acquire_dquot(dquot->dq_id, type); + mlog_entry("id=%u, type=%d", dquot->dq_id, type); mutex_lock(&dquot->dq_lock); /* * We need an exclusive lock, because we're going to update use count @@ -807,8 +809,7 @@ static int ocfs2_acquire_dquot(struct dquot *dquot) set_bit(DQ_ACTIVE_B, &dquot->dq_flags); out: mutex_unlock(&dquot->dq_lock); - if (status) - mlog_errno(status); + mlog_exit(status); return status; } @@ -828,7 +829,7 @@ static int ocfs2_mark_dquot_dirty(struct dquot *dquot) handle_t *handle; struct ocfs2_super *osb = OCFS2_SB(sb); - trace_ocfs2_mark_dquot_dirty(dquot->dq_id, type); + mlog_entry("id=%u, type=%d", dquot->dq_id, type); /* In case user set some limits, sync dquot immediately to global * quota file so that information propagates quicker */ @@ -865,8 +866,7 @@ static int ocfs2_mark_dquot_dirty(struct dquot *dquot) out_ilock: ocfs2_unlock_global_qf(oinfo, 1); out: - if (status) - mlog_errno(status); + mlog_exit(status); return status; } @@ -877,6 +877,8 @@ static int ocfs2_write_info(struct super_block *sb, int type) int status = 0; struct ocfs2_mem_dqinfo *oinfo = sb_dqinfo(sb, type)->dqi_priv; + mlog_entry_void(); + status = ocfs2_lock_global_qf(oinfo, 1); if (status < 0) goto out; @@ -891,8 +893,7 @@ static int ocfs2_write_info(struct super_block *sb, int type) out_ilock: ocfs2_unlock_global_qf(oinfo, 1); out: - if (status) - mlog_errno(status); + mlog_exit(status); return status; } diff --git a/trunk/fs/ocfs2/quota_local.c b/trunk/fs/ocfs2/quota_local.c index dc8007fc9247..dc78764ccc4c 100644 --- a/trunk/fs/ocfs2/quota_local.c +++ b/trunk/fs/ocfs2/quota_local.c @@ -8,6 +8,7 @@ #include #include +#define MLOG_MASK_PREFIX ML_QUOTA #include #include "ocfs2_fs.h" @@ -22,7 +23,6 @@ #include "quota.h" #include "uptodate.h" #include "super.h" -#include "ocfs2_trace.h" /* Number of local quota structures per block */ static inline unsigned int ol_quota_entries_per_block(struct super_block *sb) @@ -475,7 +475,7 @@ static int ocfs2_recover_local_quota_file(struct inode *lqinode, struct ocfs2_recovery_chunk *rchunk, *next; qsize_t spacechange, inodechange; - trace_ocfs2_recover_local_quota_file((unsigned long)lqinode->i_ino, type); + mlog_entry("ino=%lu type=%u", (unsigned long)lqinode->i_ino, type); list_for_each_entry_safe(rchunk, next, &(rec->r_list[type]), rc_list) { chunk = rchunk->rc_chunk; @@ -575,8 +575,7 @@ static int ocfs2_recover_local_quota_file(struct inode *lqinode, } if (status < 0) free_recovery_list(&(rec->r_list[type])); - if (status) - mlog_errno(status); + mlog_exit(status); return status; } @@ -601,7 +600,7 @@ int ocfs2_finish_quota_recovery(struct ocfs2_super *osb, for (type = 0; type < MAXQUOTAS; type++) { if (list_empty(&(rec->r_list[type]))) continue; - trace_ocfs2_finish_quota_recovery(slot_num); + mlog(0, "Recovering quota in slot %d\n", slot_num); lqinode = ocfs2_get_system_file_inode(osb, ino[type], slot_num); if (!lqinode) { status = -ENOENT; @@ -883,10 +882,9 @@ static void olq_set_dquot(struct buffer_head *bh, void *private) dqblk->dqb_inodemod = cpu_to_le64(od->dq_dquot.dq_dqb.dqb_curinodes - od->dq_originodes); spin_unlock(&dq_data_lock); - trace_olq_set_dquot( - (unsigned long long)le64_to_cpu(dqblk->dqb_spacemod), - (unsigned long long)le64_to_cpu(dqblk->dqb_inodemod), - od->dq_dquot.dq_id); + mlog(0, "Writing local dquot %u space %lld inodes %lld\n", + od->dq_dquot.dq_id, (long long)le64_to_cpu(dqblk->dqb_spacemod), + (long long)le64_to_cpu(dqblk->dqb_inodemod)); } /* Write dquot to local quota file */ diff --git a/trunk/fs/ocfs2/refcounttree.c b/trunk/fs/ocfs2/refcounttree.c index 5d32749c896d..c384d634872a 100644 --- a/trunk/fs/ocfs2/refcounttree.c +++ b/trunk/fs/ocfs2/refcounttree.c @@ -16,6 +16,7 @@ */ #include +#define MLOG_MASK_PREFIX ML_REFCOUNT #include #include "ocfs2.h" #include "inode.h" @@ -33,7 +34,6 @@ #include "aops.h" #include "xattr.h" #include "namei.h" -#include "ocfs2_trace.h" #include #include @@ -84,7 +84,8 @@ static int ocfs2_validate_refcount_block(struct super_block *sb, struct ocfs2_refcount_block *rb = (struct ocfs2_refcount_block *)bh->b_data; - trace_ocfs2_validate_refcount_block((unsigned long long)bh->b_blocknr); + mlog(0, "Validating refcount block %llu\n", + (unsigned long long)bh->b_blocknr); BUG_ON(!buffer_uptodate(bh)); @@ -544,8 +545,8 @@ void ocfs2_purge_refcount_trees(struct ocfs2_super *osb) while ((node = rb_last(root)) != NULL) { tree = rb_entry(node, struct ocfs2_refcount_tree, rf_node); - trace_ocfs2_purge_refcount_trees( - (unsigned long long) tree->rf_blkno); + mlog(0, "Purge tree %llu\n", + (unsigned long long) tree->rf_blkno); rb_erase(&tree->rf_node, root); ocfs2_free_refcount_tree(tree); @@ -574,8 +575,7 @@ static int ocfs2_create_refcount_tree(struct inode *inode, BUG_ON(oi->ip_dyn_features & OCFS2_HAS_REFCOUNT_FL); - trace_ocfs2_create_refcount_tree( - (unsigned long long)OCFS2_I(inode)->ip_blkno); + mlog(0, "create tree for inode %lu\n", inode->i_ino); ret = ocfs2_reserve_new_metadata_blocks(osb, 1, &meta_ac); if (ret) { @@ -646,7 +646,8 @@ static int ocfs2_create_refcount_tree(struct inode *inode, di->i_refcount_loc = cpu_to_le64(first_blkno); spin_unlock(&oi->ip_lock); - trace_ocfs2_create_refcount_tree_blkno((unsigned long long)first_blkno); + mlog(0, "created tree for inode %lu, refblock %llu\n", + inode->i_ino, (unsigned long long)first_blkno); ocfs2_journal_dirty(handle, di_bh); @@ -1255,9 +1256,8 @@ static int ocfs2_change_refcount_rec(handle_t *handle, goto out; } - trace_ocfs2_change_refcount_rec( - (unsigned long long)ocfs2_metadata_cache_owner(ci), - index, le32_to_cpu(rec->r_refcount), change); + mlog(0, "change index %d, old count %u, change %d\n", index, + le32_to_cpu(rec->r_refcount), change); le32_add_cpu(&rec->r_refcount, change); if (!rec->r_refcount) { @@ -1353,8 +1353,8 @@ static int ocfs2_expand_inline_ref_root(handle_t *handle, ocfs2_journal_dirty(handle, ref_root_bh); - trace_ocfs2_expand_inline_ref_root((unsigned long long)blkno, - le16_to_cpu(new_rb->rf_records.rl_used)); + mlog(0, "new leaf block %llu, used %u\n", (unsigned long long)blkno, + le16_to_cpu(new_rb->rf_records.rl_used)); *ref_leaf_bh = new_bh; new_bh = NULL; @@ -1466,9 +1466,9 @@ static int ocfs2_divide_leaf_refcount_block(struct buffer_head *ref_leaf_bh, (struct ocfs2_refcount_block *)new_bh->b_data; struct ocfs2_refcount_list *new_rl = &new_rb->rf_records; - trace_ocfs2_divide_leaf_refcount_block( - (unsigned long long)ref_leaf_bh->b_blocknr, - le32_to_cpu(rl->rl_count), le32_to_cpu(rl->rl_used)); + mlog(0, "split old leaf refcount block %llu, count = %u, used = %u\n", + (unsigned long long)ref_leaf_bh->b_blocknr, + le32_to_cpu(rl->rl_count), le32_to_cpu(rl->rl_used)); /* * XXX: Improvement later. @@ -1601,8 +1601,8 @@ static int ocfs2_new_leaf_refcount_block(handle_t *handle, ocfs2_init_refcount_extent_tree(&ref_et, ci, ref_root_bh); - trace_ocfs2_new_leaf_refcount_block( - (unsigned long long)new_bh->b_blocknr, new_cpos); + mlog(0, "insert new leaf block %llu at %u\n", + (unsigned long long)new_bh->b_blocknr, new_cpos); /* Insert the new leaf block with the specific offset cpos. */ ret = ocfs2_insert_extent(handle, &ref_et, new_cpos, new_bh->b_blocknr, @@ -1794,10 +1794,11 @@ static int ocfs2_insert_refcount_rec(handle_t *handle, (le16_to_cpu(rf_list->rl_used) - index) * sizeof(struct ocfs2_refcount_rec)); - trace_ocfs2_insert_refcount_rec( - (unsigned long long)ref_leaf_bh->b_blocknr, index, - (unsigned long long)le64_to_cpu(rec->r_cpos), - le32_to_cpu(rec->r_clusters), le32_to_cpu(rec->r_refcount)); + mlog(0, "insert refcount record start %llu, len %u, count %u " + "to leaf block %llu at index %d\n", + (unsigned long long)le64_to_cpu(rec->r_cpos), + le32_to_cpu(rec->r_clusters), le32_to_cpu(rec->r_refcount), + (unsigned long long)ref_leaf_bh->b_blocknr, index); rf_list->rl_recs[index] = *rec; @@ -1849,12 +1850,10 @@ static int ocfs2_split_refcount_rec(handle_t *handle, BUG_ON(le32_to_cpu(rb->rf_flags) & OCFS2_REFCOUNT_TREE_FL); - trace_ocfs2_split_refcount_rec(le64_to_cpu(orig_rec->r_cpos), - le32_to_cpu(orig_rec->r_clusters), - le32_to_cpu(orig_rec->r_refcount), - le64_to_cpu(split_rec->r_cpos), - le32_to_cpu(split_rec->r_clusters), - le32_to_cpu(split_rec->r_refcount)); + mlog(0, "original r_pos %llu, cluster %u, split %llu, cluster %u\n", + le64_to_cpu(orig_rec->r_cpos), le32_to_cpu(orig_rec->r_clusters), + le64_to_cpu(split_rec->r_cpos), + le32_to_cpu(split_rec->r_clusters)); /* * If we just need to split the header or tail clusters, @@ -1968,11 +1967,12 @@ static int ocfs2_split_refcount_rec(handle_t *handle, if (split_rec->r_refcount) { rf_list->rl_recs[index] = *split_rec; - trace_ocfs2_split_refcount_rec_insert( - (unsigned long long)ref_leaf_bh->b_blocknr, index, - (unsigned long long)le64_to_cpu(split_rec->r_cpos), - le32_to_cpu(split_rec->r_clusters), - le32_to_cpu(split_rec->r_refcount)); + mlog(0, "insert refcount record start %llu, len %u, count %u " + "to leaf block %llu at index %d\n", + (unsigned long long)le64_to_cpu(split_rec->r_cpos), + le32_to_cpu(split_rec->r_clusters), + le32_to_cpu(split_rec->r_refcount), + (unsigned long long)ref_leaf_bh->b_blocknr, index); if (merge) ocfs2_refcount_rec_merge(rb, index); @@ -1997,7 +1997,7 @@ static int __ocfs2_increase_refcount(handle_t *handle, struct ocfs2_refcount_rec rec; unsigned int set_len = 0; - trace_ocfs2_increase_refcount_begin( + mlog(0, "Tree owner %llu, add refcount start %llu, len %u\n", (unsigned long long)ocfs2_metadata_cache_owner(ci), (unsigned long long)cpos, len); @@ -2024,9 +2024,9 @@ static int __ocfs2_increase_refcount(handle_t *handle, */ if (rec.r_refcount && le64_to_cpu(rec.r_cpos) == cpos && set_len <= len) { - trace_ocfs2_increase_refcount_change( - (unsigned long long)cpos, set_len, - le32_to_cpu(rec.r_refcount)); + mlog(0, "increase refcount rec, start %llu, len %u, " + "count %u\n", (unsigned long long)cpos, set_len, + le32_to_cpu(rec.r_refcount)); ret = ocfs2_change_refcount_rec(handle, ci, ref_leaf_bh, index, merge, 1); @@ -2037,7 +2037,7 @@ static int __ocfs2_increase_refcount(handle_t *handle, } else if (!rec.r_refcount) { rec.r_refcount = cpu_to_le32(1); - trace_ocfs2_increase_refcount_insert( + mlog(0, "insert refcount rec, start %llu, len %u\n", (unsigned long long)le64_to_cpu(rec.r_cpos), set_len); ret = ocfs2_insert_refcount_rec(handle, ci, ref_root_bh, @@ -2055,7 +2055,8 @@ static int __ocfs2_increase_refcount(handle_t *handle, rec.r_clusters = cpu_to_le32(set_len); le32_add_cpu(&rec.r_refcount, 1); - trace_ocfs2_increase_refcount_split( + mlog(0, "split refcount rec, start %llu, " + "len %u, count %u\n", (unsigned long long)le64_to_cpu(rec.r_cpos), set_len, le32_to_cpu(rec.r_refcount)); ret = ocfs2_split_refcount_rec(handle, ci, @@ -2094,11 +2095,6 @@ static int ocfs2_remove_refcount_extent(handle_t *handle, BUG_ON(rb->rf_records.rl_used); - trace_ocfs2_remove_refcount_extent( - (unsigned long long)ocfs2_metadata_cache_owner(ci), - (unsigned long long)ref_leaf_bh->b_blocknr, - le32_to_cpu(rb->rf_cpos)); - ocfs2_init_refcount_extent_tree(&et, ci, ref_root_bh); ret = ocfs2_remove_extent(handle, &et, le32_to_cpu(rb->rf_cpos), 1, meta_ac, dealloc); @@ -2141,7 +2137,7 @@ static int ocfs2_remove_refcount_extent(handle_t *handle, if (!rb->rf_list.l_next_free_rec) { BUG_ON(rb->rf_clusters); - trace_ocfs2_restore_refcount_block( + mlog(0, "reset refcount tree root %llu to be a record block.\n", (unsigned long long)ref_root_bh->b_blocknr); rb->rf_flags = 0; @@ -2188,10 +2184,6 @@ static int ocfs2_decrease_refcount_rec(handle_t *handle, BUG_ON(cpos + len > le64_to_cpu(rec->r_cpos) + le32_to_cpu(rec->r_clusters)); - trace_ocfs2_decrease_refcount_rec( - (unsigned long long)ocfs2_metadata_cache_owner(ci), - (unsigned long long)cpos, len); - if (cpos == le64_to_cpu(rec->r_cpos) && len == le32_to_cpu(rec->r_clusters)) ret = ocfs2_change_refcount_rec(handle, ci, @@ -2203,6 +2195,12 @@ static int ocfs2_decrease_refcount_rec(handle_t *handle, le32_add_cpu(&split.r_refcount, -1); + mlog(0, "split refcount rec, start %llu, " + "len %u, count %u, original start %llu, len %u\n", + (unsigned long long)le64_to_cpu(split.r_cpos), + len, le32_to_cpu(split.r_refcount), + (unsigned long long)le64_to_cpu(rec->r_cpos), + le32_to_cpu(rec->r_clusters)); ret = ocfs2_split_refcount_rec(handle, ci, ref_root_bh, ref_leaf_bh, &split, index, 1, @@ -2241,9 +2239,10 @@ static int __ocfs2_decrease_refcount(handle_t *handle, struct super_block *sb = ocfs2_metadata_cache_get_super(ci); struct buffer_head *ref_leaf_bh = NULL; - trace_ocfs2_decrease_refcount( - (unsigned long long)ocfs2_metadata_cache_owner(ci), - (unsigned long long)cpos, len, delete); + mlog(0, "Tree owner %llu, decrease refcount start %llu, " + "len %u, delete %u\n", + (unsigned long long)ocfs2_metadata_cache_owner(ci), + (unsigned long long)cpos, len, delete); while (len) { ret = ocfs2_get_refcount_rec(ci, ref_root_bh, @@ -2353,8 +2352,8 @@ static int ocfs2_mark_extent_refcounted(struct inode *inode, { int ret; - trace_ocfs2_mark_extent_refcounted(OCFS2_I(inode)->ip_blkno, - cpos, len, phys); + mlog(0, "Inode %lu refcount tree cpos %u, len %u, phys cluster %u\n", + inode->i_ino, cpos, len, phys); if (!ocfs2_refcount_tree(OCFS2_SB(inode->i_sb))) { ocfs2_error(inode->i_sb, "Inode %lu want to use refcount " @@ -2393,6 +2392,8 @@ static int ocfs2_calc_refcount_meta_credits(struct super_block *sb, struct buffer_head *ref_leaf_bh = NULL, *prev_bh = NULL; u32 len; + mlog(0, "start_cpos %llu, clusters %u\n", + (unsigned long long)start_cpos, clusters); while (clusters) { ret = ocfs2_get_refcount_rec(ci, ref_root_bh, cpos, clusters, &rec, @@ -2426,11 +2427,12 @@ static int ocfs2_calc_refcount_meta_credits(struct super_block *sb, rb = (struct ocfs2_refcount_block *)ref_leaf_bh->b_data; - trace_ocfs2_calc_refcount_meta_credits_iterate( - recs_add, (unsigned long long)cpos, clusters, - (unsigned long long)le64_to_cpu(rec.r_cpos), - le32_to_cpu(rec.r_clusters), - le32_to_cpu(rec.r_refcount), index); + mlog(0, "recs_add %d,cpos %llu, clusters %u, rec->r_cpos %llu," + "rec->r_clusters %u, rec->r_refcount %u, index %d\n", + recs_add, (unsigned long long)cpos, clusters, + (unsigned long long)le64_to_cpu(rec.r_cpos), + le32_to_cpu(rec.r_clusters), + le32_to_cpu(rec.r_refcount), index); len = min((u64)cpos + clusters, le64_to_cpu(rec.r_cpos) + le32_to_cpu(rec.r_clusters)) - cpos; @@ -2486,6 +2488,7 @@ static int ocfs2_calc_refcount_meta_credits(struct super_block *sb, if (!ref_blocks) goto out; + mlog(0, "we need ref_blocks %d\n", ref_blocks); *meta_add += ref_blocks; *credits += ref_blocks; @@ -2511,10 +2514,6 @@ static int ocfs2_calc_refcount_meta_credits(struct super_block *sb, } out: - - trace_ocfs2_calc_refcount_meta_credits( - (unsigned long long)start_cpos, clusters, - *meta_add, *credits); brelse(ref_leaf_bh); brelse(prev_bh); return ret; @@ -2579,7 +2578,8 @@ int ocfs2_prepare_refcount_change_for_del(struct inode *inode, goto out; } - trace_ocfs2_prepare_refcount_change_for_del(*ref_blocks, *credits); + mlog(0, "reserve new metadata %d blocks, credits = %d\n", + *ref_blocks, *credits); out: brelse(ref_root_bh); @@ -2886,7 +2886,8 @@ static int ocfs2_lock_refcount_allocators(struct super_block *sb, goto out; } - trace_ocfs2_lock_refcount_allocators(meta_add, *credits); + mlog(0, "reserve new metadata %d, clusters %u, credits = %d\n", + meta_add, num_clusters, *credits); ret = ocfs2_reserve_new_metadata_blocks(OCFS2_SB(sb), meta_add, meta_ac); if (ret) { @@ -2936,8 +2937,8 @@ static int ocfs2_duplicate_clusters_by_page(handle_t *handle, loff_t offset, end, map_end; struct address_space *mapping = context->inode->i_mapping; - trace_ocfs2_duplicate_clusters_by_page(cpos, old_cluster, - new_cluster, new_len); + mlog(0, "old_cluster %u, new %u, len %u at offset %u\n", old_cluster, + new_cluster, new_len, cpos); readahead_pages = (ocfs2_cow_contig_clusters(sb) << @@ -3030,8 +3031,8 @@ static int ocfs2_duplicate_clusters_by_jbd(handle_t *handle, struct buffer_head *old_bh = NULL; struct buffer_head *new_bh = NULL; - trace_ocfs2_duplicate_clusters_by_page(cpos, old_cluster, - new_cluster, new_len); + mlog(0, "old_cluster %u, new %u, len %u\n", old_cluster, + new_cluster, new_len); for (i = 0; i < blocks; i++, old_block++, new_block++) { new_bh = sb_getblk(osb->sb, new_block); @@ -3084,8 +3085,8 @@ static int ocfs2_clear_ext_refcount(handle_t *handle, struct super_block *sb = ocfs2_metadata_cache_get_super(et->et_ci); u64 ino = ocfs2_metadata_cache_owner(et->et_ci); - trace_ocfs2_clear_ext_refcount((unsigned long long)ino, - cpos, len, p_cluster, ext_flags); + mlog(0, "inode %llu cpos %u, len %u, p_cluster %u, ext_flags %u\n", + (unsigned long long)ino, cpos, len, p_cluster, ext_flags); memset(&replace_rec, 0, sizeof(replace_rec)); replace_rec.e_cpos = cpu_to_le32(cpos); @@ -3140,8 +3141,8 @@ static int ocfs2_replace_clusters(handle_t *handle, struct ocfs2_caching_info *ci = context->data_et.et_ci; u64 ino = ocfs2_metadata_cache_owner(ci); - trace_ocfs2_replace_clusters((unsigned long long)ino, - cpos, old, new, len, ext_flags); + mlog(0, "inode %llu, cpos %u, old %u, new %u, len %u, ext_flags %u\n", + (unsigned long long)ino, cpos, old, new, len, ext_flags); /*If the old clusters is unwritten, no need to duplicate. */ if (!(ext_flags & OCFS2_EXT_UNWRITTEN)) { @@ -3235,8 +3236,8 @@ static int ocfs2_make_clusters_writable(struct super_block *sb, struct ocfs2_caching_info *ref_ci = &context->ref_tree->rf_ci; struct ocfs2_refcount_rec rec; - trace_ocfs2_make_clusters_writable(cpos, p_cluster, - num_clusters, e_flags); + mlog(0, "cpos %u, p_cluster %u, num_clusters %u, e_flags %u\n", + cpos, p_cluster, num_clusters, e_flags); ret = ocfs2_lock_refcount_allocators(sb, p_cluster, num_clusters, &context->data_et, @@ -3474,9 +3475,9 @@ static int ocfs2_refcount_cow_hunk(struct inode *inode, goto out; } - trace_ocfs2_refcount_cow_hunk(OCFS2_I(inode)->ip_blkno, - cpos, write_len, max_cpos, - cow_start, cow_len); + mlog(0, "CoW inode %lu, cpos %u, write_len %u, cow_start %u, " + "cow_len %u\n", inode->i_ino, + cpos, write_len, cow_start, cow_len); BUG_ON(cow_len == 0); @@ -3755,7 +3756,8 @@ int ocfs2_add_refcount_flag(struct inode *inode, goto out; } - trace_ocfs2_add_refcount_flag(ref_blocks, credits); + mlog(0, "reserve new metadata %d, credits = %d\n", + ref_blocks, credits); if (ref_blocks) { ret = ocfs2_reserve_new_metadata_blocks(OCFS2_SB(inode->i_sb), diff --git a/trunk/fs/ocfs2/reservations.c b/trunk/fs/ocfs2/reservations.c index 41ffd36c689c..3e78db361bc7 100644 --- a/trunk/fs/ocfs2/reservations.c +++ b/trunk/fs/ocfs2/reservations.c @@ -30,10 +30,10 @@ #include #include +#define MLOG_MASK_PREFIX ML_RESERVATIONS #include #include "ocfs2.h" -#include "ocfs2_trace.h" #ifdef CONFIG_OCFS2_DEBUG_FS #define OCFS2_CHECK_RESERVATIONS @@ -321,7 +321,8 @@ static void ocfs2_resv_insert(struct ocfs2_reservation_map *resmap, assert_spin_locked(&resv_lock); - trace_ocfs2_resv_insert(new->r_start, new->r_len); + mlog(0, "Insert reservation start: %u len: %u\n", new->r_start, + new->r_len); while (*p) { parent = *p; @@ -422,8 +423,8 @@ static int ocfs2_resmap_find_free_bits(struct ocfs2_reservation_map *resmap, unsigned int best_start, best_len = 0; int offset, start, found; - trace_ocfs2_resmap_find_free_bits_begin(search_start, search_len, - wanted, resmap->m_bitmap_len); + mlog(0, "Find %u bits within range (%u, len %u) resmap len: %u\n", + wanted, search_start, search_len, resmap->m_bitmap_len); found = best_start = best_len = 0; @@ -462,7 +463,7 @@ static int ocfs2_resmap_find_free_bits(struct ocfs2_reservation_map *resmap, *rlen = best_len; *rstart = best_start; - trace_ocfs2_resmap_find_free_bits_end(best_start, best_len); + mlog(0, "Found start: %u len: %u\n", best_start, best_len); return *rlen; } @@ -486,8 +487,9 @@ static void __ocfs2_resv_find_window(struct ocfs2_reservation_map *resmap, * - our window should be last in all reservations * - need to make sure we don't go past end of bitmap */ - trace_ocfs2_resv_find_window_begin(resv->r_start, ocfs2_resv_end(resv), - goal, wanted, RB_EMPTY_ROOT(root)); + + mlog(0, "resv start: %u resv end: %u goal: %u wanted: %u\n", + resv->r_start, ocfs2_resv_end(resv), goal, wanted); assert_spin_locked(&resv_lock); @@ -496,6 +498,9 @@ static void __ocfs2_resv_find_window(struct ocfs2_reservation_map *resmap, * Easiest case - empty tree. We can just take * whatever window of free bits we want. */ + + mlog(0, "Empty root\n"); + clen = ocfs2_resmap_find_free_bits(resmap, wanted, goal, resmap->m_bitmap_len - goal, &cstart, &clen); @@ -519,6 +524,8 @@ static void __ocfs2_resv_find_window(struct ocfs2_reservation_map *resmap, prev_resv = ocfs2_find_resv_lhs(resmap, goal); if (prev_resv == NULL) { + mlog(0, "Goal on LHS of leftmost window\n"); + /* * A NULL here means that the search code couldn't * find a window that starts before goal. @@ -563,15 +570,13 @@ static void __ocfs2_resv_find_window(struct ocfs2_reservation_map *resmap, next_resv = NULL; } - trace_ocfs2_resv_find_window_prev(prev_resv->r_start, - ocfs2_resv_end(prev_resv)); - prev = &prev_resv->r_node; /* Now we do a linear search for a window, starting at 'prev_rsv' */ while (1) { next = rb_next(prev); if (next) { + mlog(0, "One more resv found in linear search\n"); next_resv = rb_entry(next, struct ocfs2_alloc_reservation, r_node); @@ -580,6 +585,7 @@ static void __ocfs2_resv_find_window(struct ocfs2_reservation_map *resmap, gap_end = next_resv->r_start - 1; gap_len = gap_end - gap_start + 1; } else { + mlog(0, "No next node\n"); /* * We're at the rightmost edge of the * tree. See if a reservation between this @@ -590,8 +596,6 @@ static void __ocfs2_resv_find_window(struct ocfs2_reservation_map *resmap, gap_end = resmap->m_bitmap_len - 1; } - trace_ocfs2_resv_find_window_next(next ? next_resv->r_start: -1, - next ? ocfs2_resv_end(next_resv) : -1); /* * No need to check this gap if we have already found * a larger region of free bits. @@ -650,9 +654,8 @@ static void ocfs2_cannibalize_resv(struct ocfs2_reservation_map *resmap, lru_resv = list_first_entry(&resmap->m_lru, struct ocfs2_alloc_reservation, r_lru); - trace_ocfs2_cannibalize_resv_begin(lru_resv->r_start, - lru_resv->r_len, - ocfs2_resv_end(lru_resv)); + mlog(0, "lru resv: start: %u len: %u end: %u\n", lru_resv->r_start, + lru_resv->r_len, ocfs2_resv_end(lru_resv)); /* * Cannibalize (some or all) of the target reservation and @@ -681,9 +684,10 @@ static void ocfs2_cannibalize_resv(struct ocfs2_reservation_map *resmap, resv->r_len = shrink; } - trace_ocfs2_cannibalize_resv_end(resv->r_start, ocfs2_resv_end(resv), - resv->r_len, resv->r_last_start, - resv->r_last_len); + mlog(0, "Reservation now looks like: r_start: %u r_end: %u " + "r_len: %u r_last_start: %u r_last_len: %u\n", + resv->r_start, ocfs2_resv_end(resv), resv->r_len, + resv->r_last_start, resv->r_last_len); ocfs2_resv_insert(resmap, resv); } @@ -744,6 +748,7 @@ int ocfs2_resmap_resv_bits(struct ocfs2_reservation_map *resmap, if ((resv->r_flags & OCFS2_RESV_FLAG_TMP) || wanted < *clen) wanted = *clen; + mlog(0, "empty reservation, find new window\n"); /* * Try to get a window here. If it works, we must fall * through and test the bitmap . This avoids some @@ -752,7 +757,6 @@ int ocfs2_resmap_resv_bits(struct ocfs2_reservation_map *resmap, * that inode. */ ocfs2_resv_find_window(resmap, resv, wanted); - trace_ocfs2_resmap_resv_bits(resv->r_start, resv->r_len); } BUG_ON(ocfs2_resv_empty(resv)); @@ -809,10 +813,10 @@ void ocfs2_resmap_claimed_bits(struct ocfs2_reservation_map *resmap, spin_lock(&resv_lock); - trace_ocfs2_resmap_claimed_bits_begin(cstart, cend, clen, resv->r_start, - ocfs2_resv_end(resv), resv->r_len, - resv->r_last_start, - resv->r_last_len); + mlog(0, "claim bits: cstart: %u cend: %u clen: %u r_start: %u " + "r_end: %u r_len: %u, r_last_start: %u r_last_len: %u\n", + cstart, cend, clen, resv->r_start, ocfs2_resv_end(resv), + resv->r_len, resv->r_last_start, resv->r_last_len); BUG_ON(cstart < resv->r_start); BUG_ON(cstart > ocfs2_resv_end(resv)); @@ -829,9 +833,10 @@ void ocfs2_resmap_claimed_bits(struct ocfs2_reservation_map *resmap, if (!ocfs2_resv_empty(resv)) ocfs2_resv_mark_lru(resmap, resv); - trace_ocfs2_resmap_claimed_bits_end(resv->r_start, ocfs2_resv_end(resv), - resv->r_len, resv->r_last_start, - resv->r_last_len); + mlog(0, "Reservation now looks like: r_start: %u r_end: %u " + "r_len: %u r_last_start: %u r_last_len: %u\n", + resv->r_start, ocfs2_resv_end(resv), resv->r_len, + resv->r_last_start, resv->r_last_len); ocfs2_check_resmap(resmap); diff --git a/trunk/fs/ocfs2/resize.c b/trunk/fs/ocfs2/resize.c index ec55add7604a..dacd553d8617 100644 --- a/trunk/fs/ocfs2/resize.c +++ b/trunk/fs/ocfs2/resize.c @@ -27,6 +27,7 @@ #include #include +#define MLOG_MASK_PREFIX ML_DISK_ALLOC #include #include "ocfs2.h" @@ -38,7 +39,6 @@ #include "super.h" #include "sysfile.h" #include "uptodate.h" -#include "ocfs2_trace.h" #include "buffer_head_io.h" #include "suballoc.h" @@ -82,6 +82,7 @@ static u16 ocfs2_calc_new_backup_super(struct inode *inode, backups++; } + mlog_exit_void(); return backups; } @@ -102,8 +103,8 @@ static int ocfs2_update_last_group_and_inode(handle_t *handle, u16 cl_bpc = le16_to_cpu(cl->cl_bpc); u16 cl_cpg = le16_to_cpu(cl->cl_cpg); - trace_ocfs2_update_last_group_and_inode(new_clusters, - first_new_cluster); + mlog_entry("(new_clusters=%d, first_new_cluster = %u)\n", + new_clusters, first_new_cluster); ret = ocfs2_journal_access_gd(handle, INODE_CACHE(bm_inode), group_bh, OCFS2_JOURNAL_ACCESS_WRITE); @@ -175,8 +176,7 @@ static int ocfs2_update_last_group_and_inode(handle_t *handle, le16_add_cpu(&group->bg_free_bits_count, -1 * num_bits); } out: - if (ret) - mlog_errno(ret); + mlog_exit(ret); return ret; } @@ -281,6 +281,8 @@ int ocfs2_group_extend(struct inode * inode, int new_clusters) u32 first_new_cluster; u64 lgd_blkno; + mlog_entry_void(); + if (ocfs2_is_hard_readonly(osb) || ocfs2_is_soft_readonly(osb)) return -EROFS; @@ -340,8 +342,7 @@ int ocfs2_group_extend(struct inode * inode, int new_clusters) goto out_unlock; } - - trace_ocfs2_group_extend( + mlog(0, "extend the last group at %llu, new clusters = %d\n", (unsigned long long)le64_to_cpu(group->bg_blkno), new_clusters); handle = ocfs2_start_trans(osb, OCFS2_GROUP_EXTEND_CREDITS); @@ -376,6 +377,7 @@ int ocfs2_group_extend(struct inode * inode, int new_clusters) iput(main_bm_inode); out: + mlog_exit_void(); return ret; } @@ -470,6 +472,8 @@ int ocfs2_group_add(struct inode *inode, struct ocfs2_new_group_input *input) struct ocfs2_chain_rec *cr; u16 cl_bpc; + mlog_entry_void(); + if (ocfs2_is_hard_readonly(osb) || ocfs2_is_soft_readonly(osb)) return -EROFS; @@ -516,8 +520,8 @@ int ocfs2_group_add(struct inode *inode, struct ocfs2_new_group_input *input) goto out_unlock; } - trace_ocfs2_group_add((unsigned long long)input->group, - input->chain, input->clusters, input->frees); + mlog(0, "Add a new group %llu in chain = %u, length = %u\n", + (unsigned long long)input->group, input->chain, input->clusters); handle = ocfs2_start_trans(osb, OCFS2_GROUP_ADD_CREDITS); if (IS_ERR(handle)) { @@ -585,5 +589,6 @@ int ocfs2_group_add(struct inode *inode, struct ocfs2_new_group_input *input) iput(main_bm_inode); out: + mlog_exit_void(); return ret; } diff --git a/trunk/fs/ocfs2/slot_map.c b/trunk/fs/ocfs2/slot_map.c index 26fc0014d509..ab4e0172cc1d 100644 --- a/trunk/fs/ocfs2/slot_map.c +++ b/trunk/fs/ocfs2/slot_map.c @@ -27,6 +27,7 @@ #include #include +#define MLOG_MASK_PREFIX ML_SUPER #include #include "ocfs2.h" @@ -38,7 +39,6 @@ #include "slot_map.h" #include "super.h" #include "sysfile.h" -#include "ocfs2_trace.h" #include "buffer_head_io.h" @@ -142,7 +142,8 @@ int ocfs2_refresh_slot_info(struct ocfs2_super *osb) BUG_ON(si->si_blocks == 0); BUG_ON(si->si_bh == NULL); - trace_ocfs2_refresh_slot_info(si->si_blocks); + mlog(0, "Refreshing slot map, reading %u block(s)\n", + si->si_blocks); /* * We pass -1 as blocknr because we expect all of si->si_bh to @@ -380,7 +381,8 @@ static int ocfs2_map_slot_buffers(struct ocfs2_super *osb, /* The size checks above should ensure this */ BUG_ON((osb->max_slots / si->si_slots_per_block) > blocks); - trace_ocfs2_map_slot_buffers(bytes, si->si_blocks); + mlog(0, "Slot map needs %u buffers for %llu bytes\n", + si->si_blocks, bytes); si->si_bh = kzalloc(sizeof(struct buffer_head *) * si->si_blocks, GFP_KERNEL); @@ -398,7 +400,8 @@ static int ocfs2_map_slot_buffers(struct ocfs2_super *osb, goto bail; } - trace_ocfs2_map_slot_buffers_block((unsigned long long)blkno, i); + mlog(0, "Reading slot map block %u at %llu\n", i, + (unsigned long long)blkno); bh = NULL; /* Acquire a fresh bh */ status = ocfs2_read_blocks(INODE_CACHE(si->si_inode), blkno, @@ -472,6 +475,8 @@ int ocfs2_find_slot(struct ocfs2_super *osb) int slot; struct ocfs2_slot_info *si; + mlog_entry_void(); + si = osb->slot_info; spin_lock(&osb->osb_lock); @@ -500,13 +505,14 @@ int ocfs2_find_slot(struct ocfs2_super *osb) osb->slot_num = slot; spin_unlock(&osb->osb_lock); - trace_ocfs2_find_slot(osb->slot_num); + mlog(0, "taking node slot %d\n", osb->slot_num); status = ocfs2_update_disk_slot(osb, si, osb->slot_num); if (status < 0) mlog_errno(status); bail: + mlog_exit(status); return status; } diff --git a/trunk/fs/ocfs2/suballoc.c b/trunk/fs/ocfs2/suballoc.c index ab6e2061074f..71998d4d61d5 100644 --- a/trunk/fs/ocfs2/suballoc.c +++ b/trunk/fs/ocfs2/suballoc.c @@ -29,6 +29,7 @@ #include #include +#define MLOG_MASK_PREFIX ML_DISK_ALLOC #include #include "ocfs2.h" @@ -43,7 +44,6 @@ #include "super.h" #include "sysfile.h" #include "uptodate.h" -#include "ocfs2_trace.h" #include "buffer_head_io.h" @@ -308,8 +308,8 @@ static int ocfs2_validate_group_descriptor(struct super_block *sb, int rc; struct ocfs2_group_desc *gd = (struct ocfs2_group_desc *)bh->b_data; - trace_ocfs2_validate_group_descriptor( - (unsigned long long)bh->b_blocknr); + mlog(0, "Validating group descriptor %llu\n", + (unsigned long long)bh->b_blocknr); BUG_ON(!buffer_uptodate(bh)); @@ -389,6 +389,8 @@ static int ocfs2_block_group_fill(handle_t *handle, struct ocfs2_group_desc *bg = (struct ocfs2_group_desc *) bg_bh->b_data; struct super_block * sb = alloc_inode->i_sb; + mlog_entry_void(); + if (((unsigned long long) bg_bh->b_blocknr) != group_blkno) { ocfs2_error(alloc_inode->i_sb, "group block (%llu) != " "b_blocknr (%llu)", @@ -434,8 +436,7 @@ static int ocfs2_block_group_fill(handle_t *handle, * allocation time. */ bail: - if (status) - mlog_errno(status); + mlog_exit(status); return status; } @@ -476,8 +477,8 @@ ocfs2_block_group_alloc_contig(struct ocfs2_super *osb, handle_t *handle, /* setup the group */ bg_blkno = ocfs2_clusters_to_blocks(osb->sb, bit_off); - trace_ocfs2_block_group_alloc_contig( - (unsigned long long)bg_blkno, alloc_rec); + mlog(0, "new descriptor, record %u, at block %llu\n", + alloc_rec, (unsigned long long)bg_blkno); bg_bh = sb_getblk(osb->sb, bg_blkno); if (!bg_bh) { @@ -656,8 +657,8 @@ ocfs2_block_group_alloc_discontig(handle_t *handle, /* setup the group */ bg_blkno = ocfs2_clusters_to_blocks(osb->sb, bit_off); - trace_ocfs2_block_group_alloc_discontig( - (unsigned long long)bg_blkno, alloc_rec); + mlog(0, "new descriptor, record %u, at block %llu\n", + alloc_rec, (unsigned long long)bg_blkno); bg_bh = sb_getblk(osb->sb, bg_blkno); if (!bg_bh) { @@ -706,6 +707,8 @@ static int ocfs2_block_group_alloc(struct ocfs2_super *osb, BUG_ON(ocfs2_is_cluster_bitmap(alloc_inode)); + mlog_entry_void(); + cl = &fe->id2.i_chain; status = ocfs2_reserve_clusters_with_limit(osb, le16_to_cpu(cl->cl_cpg), @@ -727,8 +730,8 @@ static int ocfs2_block_group_alloc(struct ocfs2_super *osb, } if (last_alloc_group && *last_alloc_group != 0) { - trace_ocfs2_block_group_alloc( - (unsigned long long)*last_alloc_group); + mlog(0, "use old allocation group %llu for block group alloc\n", + (unsigned long long)*last_alloc_group); ac->ac_last_group = *last_alloc_group; } @@ -793,8 +796,7 @@ static int ocfs2_block_group_alloc(struct ocfs2_super *osb, brelse(bg_bh); - if (status) - mlog_errno(status); + mlog_exit(status); return status; } @@ -812,6 +814,8 @@ static int ocfs2_reserve_suballoc_bits(struct ocfs2_super *osb, struct ocfs2_dinode *fe; u32 free_bits; + mlog_entry_void(); + alloc_inode = ocfs2_get_system_file_inode(osb, type, slot); if (!alloc_inode) { mlog_errno(-EINVAL); @@ -851,15 +855,16 @@ static int ocfs2_reserve_suballoc_bits(struct ocfs2_super *osb, if (bits_wanted > free_bits) { /* cluster bitmap never grows */ if (ocfs2_is_cluster_bitmap(alloc_inode)) { - trace_ocfs2_reserve_suballoc_bits_nospc(bits_wanted, - free_bits); + mlog(0, "Disk Full: wanted=%u, free_bits=%u\n", + bits_wanted, free_bits); status = -ENOSPC; goto bail; } if (!(flags & ALLOC_NEW_GROUP)) { - trace_ocfs2_reserve_suballoc_bits_no_new_group( - slot, bits_wanted, free_bits); + mlog(0, "Alloc File %u Full: wanted=%u, free_bits=%u, " + "and we don't alloc a new group for it.\n", + slot, bits_wanted, free_bits); status = -ENOSPC; goto bail; } @@ -885,8 +890,7 @@ static int ocfs2_reserve_suballoc_bits(struct ocfs2_super *osb, bail: brelse(bh); - if (status) - mlog_errno(status); + mlog_exit(status); return status; } @@ -1048,8 +1052,7 @@ int ocfs2_reserve_new_metadata_blocks(struct ocfs2_super *osb, *ac = NULL; } - if (status) - mlog_errno(status); + mlog_exit(status); return status; } @@ -1116,8 +1119,8 @@ int ocfs2_reserve_new_inode(struct ocfs2_super *osb, spin_lock(&osb->osb_lock); osb->osb_inode_alloc_group = alloc_group; spin_unlock(&osb->osb_lock); - trace_ocfs2_reserve_new_inode_new_group( - (unsigned long long)alloc_group); + mlog(0, "after reservation, new allocation group is " + "%llu\n", (unsigned long long)alloc_group); /* * Some inodes must be freed by us, so try to allocate @@ -1149,8 +1152,7 @@ int ocfs2_reserve_new_inode(struct ocfs2_super *osb, *ac = NULL; } - if (status) - mlog_errno(status); + mlog_exit(status); return status; } @@ -1187,6 +1189,8 @@ static int ocfs2_reserve_clusters_with_limit(struct ocfs2_super *osb, { int status; + mlog_entry_void(); + *ac = kzalloc(sizeof(struct ocfs2_alloc_context), GFP_KERNEL); if (!(*ac)) { status = -ENOMEM; @@ -1225,8 +1229,7 @@ static int ocfs2_reserve_clusters_with_limit(struct ocfs2_super *osb, *ac = NULL; } - if (status) - mlog_errno(status); + mlog_exit(status); return status; } @@ -1354,12 +1357,15 @@ static inline int ocfs2_block_group_set_bits(handle_t *handle, void *bitmap = bg->bg_bitmap; int journal_type = OCFS2_JOURNAL_ACCESS_WRITE; + mlog_entry_void(); + /* All callers get the descriptor via * ocfs2_read_group_descriptor(). Any corruption is a code bug. */ BUG_ON(!OCFS2_IS_VALID_GROUP_DESC(bg)); BUG_ON(le16_to_cpu(bg->bg_free_bits_count) < num_bits); - trace_ocfs2_block_group_set_bits(bit_off, num_bits); + mlog(0, "block_group_set_bits: off = %u, num = %u\n", bit_off, + num_bits); if (ocfs2_is_cluster_bitmap(alloc_inode)) journal_type = OCFS2_JOURNAL_ACCESS_UNDO; @@ -1388,8 +1394,7 @@ static inline int ocfs2_block_group_set_bits(handle_t *handle, ocfs2_journal_dirty(handle, group_bh); bail: - if (status) - mlog_errno(status); + mlog_exit(status); return status; } @@ -1432,10 +1437,10 @@ static int ocfs2_relink_block_group(handle_t *handle, BUG_ON(!OCFS2_IS_VALID_GROUP_DESC(bg)); BUG_ON(!OCFS2_IS_VALID_GROUP_DESC(prev_bg)); - trace_ocfs2_relink_block_group( - (unsigned long long)le64_to_cpu(fe->i_blkno), chain, - (unsigned long long)le64_to_cpu(bg->bg_blkno), - (unsigned long long)le64_to_cpu(prev_bg->bg_blkno)); + mlog(0, "Suballoc %llu, chain %u, move group %llu to top, prev = %llu\n", + (unsigned long long)le64_to_cpu(fe->i_blkno), chain, + (unsigned long long)le64_to_cpu(bg->bg_blkno), + (unsigned long long)le64_to_cpu(prev_bg->bg_blkno)); fe_ptr = le64_to_cpu(fe->id2.i_chain.cl_recs[chain].c_blkno); bg_ptr = le64_to_cpu(bg->bg_next_group); @@ -1479,8 +1484,7 @@ static int ocfs2_relink_block_group(handle_t *handle, prev_bg->bg_next_group = cpu_to_le64(prev_bg_ptr); } - if (status) - mlog_errno(status); + mlog_exit(status); return status; } @@ -1521,10 +1525,10 @@ static int ocfs2_cluster_group_search(struct inode *inode, if ((gd_cluster_off + max_bits) > OCFS2_I(inode)->ip_clusters) { max_bits = OCFS2_I(inode)->ip_clusters - gd_cluster_off; - trace_ocfs2_cluster_group_search_wrong_max_bits( - (unsigned long long)le64_to_cpu(gd->bg_blkno), - le16_to_cpu(gd->bg_bits), - OCFS2_I(inode)->ip_clusters, max_bits); + mlog(0, "Desc %llu, bg_bits %u, clusters %u, use %u\n", + (unsigned long long)le64_to_cpu(gd->bg_blkno), + le16_to_cpu(gd->bg_bits), + OCFS2_I(inode)->ip_clusters, max_bits); } ret = ocfs2_block_group_find_clear_bits(OCFS2_SB(inode->i_sb), @@ -1538,9 +1542,9 @@ static int ocfs2_cluster_group_search(struct inode *inode, gd_cluster_off + res->sr_bit_offset + res->sr_bits); - trace_ocfs2_cluster_group_search_max_block( - (unsigned long long)blkoff, - (unsigned long long)max_block); + mlog(0, "Checking %llu against %llu\n", + (unsigned long long)blkoff, + (unsigned long long)max_block); if (blkoff > max_block) return -ENOSPC; } @@ -1584,9 +1588,9 @@ static int ocfs2_block_group_search(struct inode *inode, if (!ret && max_block) { blkoff = le64_to_cpu(bg->bg_blkno) + res->sr_bit_offset + res->sr_bits; - trace_ocfs2_block_group_search_max_block( - (unsigned long long)blkoff, - (unsigned long long)max_block); + mlog(0, "Checking %llu against %llu\n", + (unsigned long long)blkoff, + (unsigned long long)max_block); if (blkoff > max_block) ret = -ENOSPC; } @@ -1752,9 +1756,9 @@ static int ocfs2_search_chain(struct ocfs2_alloc_context *ac, struct ocfs2_group_desc *bg; chain = ac->ac_chain; - trace_ocfs2_search_chain_begin( - (unsigned long long)OCFS2_I(alloc_inode)->ip_blkno, - bits_wanted, chain); + mlog(0, "trying to alloc %u bits from chain %u, inode %llu\n", + bits_wanted, chain, + (unsigned long long)OCFS2_I(alloc_inode)->ip_blkno); status = ocfs2_read_group_descriptor(alloc_inode, fe, le64_to_cpu(cl->cl_recs[chain].c_blkno), @@ -1795,8 +1799,8 @@ static int ocfs2_search_chain(struct ocfs2_alloc_context *ac, goto bail; } - trace_ocfs2_search_chain_succ( - (unsigned long long)le64_to_cpu(bg->bg_blkno), res->sr_bits); + mlog(0, "alloc succeeds: we give %u bits from block group %llu\n", + res->sr_bits, (unsigned long long)le64_to_cpu(bg->bg_blkno)); res->sr_bg_blkno = le64_to_cpu(bg->bg_blkno); @@ -1857,9 +1861,8 @@ static int ocfs2_search_chain(struct ocfs2_alloc_context *ac, goto bail; } - trace_ocfs2_search_chain_end( - (unsigned long long)le64_to_cpu(fe->i_blkno), - res->sr_bits); + mlog(0, "Allocated %u bits from suballocator %llu\n", res->sr_bits, + (unsigned long long)le64_to_cpu(fe->i_blkno)); out_loc_only: *bits_left = le16_to_cpu(bg->bg_free_bits_count); @@ -1867,8 +1870,7 @@ static int ocfs2_search_chain(struct ocfs2_alloc_context *ac, brelse(group_bh); brelse(prev_group_bh); - if (status) - mlog_errno(status); + mlog_exit(status); return status; } @@ -1886,6 +1888,8 @@ static int ocfs2_claim_suballoc_bits(struct ocfs2_alloc_context *ac, struct ocfs2_chain_list *cl; struct ocfs2_dinode *fe; + mlog_entry_void(); + BUG_ON(ac->ac_bits_given >= ac->ac_bits_wanted); BUG_ON(bits_wanted > (ac->ac_bits_wanted - ac->ac_bits_given)); BUG_ON(!ac->ac_bh); @@ -1941,7 +1945,8 @@ static int ocfs2_claim_suballoc_bits(struct ocfs2_alloc_context *ac, goto bail; } - trace_ocfs2_claim_suballoc_bits(victim); + mlog(0, "Search of victim chain %u came up with nothing, " + "trying all chains now.\n", victim); /* If we didn't pick a good victim, then just default to * searching each chain in order. Don't allow chain relinking @@ -1979,8 +1984,7 @@ static int ocfs2_claim_suballoc_bits(struct ocfs2_alloc_context *ac, } bail: - if (status) - mlog_errno(status); + mlog_exit(status); return status; } @@ -2017,8 +2021,7 @@ int ocfs2_claim_metadata(handle_t *handle, *num_bits = res.sr_bits; status = 0; bail: - if (status) - mlog_errno(status); + mlog_exit(status); return status; } @@ -2169,8 +2172,8 @@ int ocfs2_claim_new_inode_at_loc(handle_t *handle, goto out; } - trace_ocfs2_claim_new_inode_at_loc((unsigned long long)di_blkno, - res->sr_bits); + mlog(0, "Allocated %u bits from suballocator %llu\n", res->sr_bits, + (unsigned long long)di_blkno); atomic_inc(&OCFS2_SB(ac->ac_inode->i_sb)->alloc_stats.bg_allocs); @@ -2198,6 +2201,8 @@ int ocfs2_claim_new_inode(handle_t *handle, int status; struct ocfs2_suballoc_result res; + mlog_entry_void(); + BUG_ON(!ac); BUG_ON(ac->ac_bits_given != 0); BUG_ON(ac->ac_bits_wanted != 1); @@ -2225,8 +2230,7 @@ int ocfs2_claim_new_inode(handle_t *handle, ocfs2_save_inode_ac_group(dir, ac); status = 0; bail: - if (status) - mlog_errno(status); + mlog_exit(status); return status; } @@ -2303,6 +2307,8 @@ int __ocfs2_claim_clusters(handle_t *handle, struct ocfs2_suballoc_result res = { .sr_blkno = 0, }; struct ocfs2_super *osb = OCFS2_SB(ac->ac_inode->i_sb); + mlog_entry_void(); + BUG_ON(ac->ac_bits_given >= ac->ac_bits_wanted); BUG_ON(ac->ac_which != OCFS2_AC_USE_LOCAL @@ -2357,8 +2363,7 @@ int __ocfs2_claim_clusters(handle_t *handle, ac->ac_bits_given += *num_clusters; bail: - if (status) - mlog_errno(status); + mlog_exit(status); return status; } @@ -2387,11 +2392,13 @@ static int ocfs2_block_group_clear_bits(handle_t *handle, unsigned int tmp; struct ocfs2_group_desc *undo_bg = NULL; + mlog_entry_void(); + /* The caller got this descriptor from * ocfs2_read_group_descriptor(). Any corruption is a code bug. */ BUG_ON(!OCFS2_IS_VALID_GROUP_DESC(bg)); - trace_ocfs2_block_group_clear_bits(bit_off, num_bits); + mlog(0, "off = %u, num = %u\n", bit_off, num_bits); BUG_ON(undo_fn && !ocfs2_is_cluster_bitmap(alloc_inode)); status = ocfs2_journal_access_gd(handle, INODE_CACHE(alloc_inode), @@ -2456,6 +2463,8 @@ static int _ocfs2_free_suballoc_bits(handle_t *handle, struct buffer_head *group_bh = NULL; struct ocfs2_group_desc *group; + mlog_entry_void(); + /* The alloc_bh comes from ocfs2_free_dinode() or * ocfs2_free_clusters(). The callers have all locked the * allocator and gotten alloc_bh from the lock call. This @@ -2464,10 +2473,9 @@ static int _ocfs2_free_suballoc_bits(handle_t *handle, BUG_ON(!OCFS2_IS_VALID_DINODE(fe)); BUG_ON((count + start_bit) > ocfs2_bits_per_group(cl)); - trace_ocfs2_free_suballoc_bits( - (unsigned long long)OCFS2_I(alloc_inode)->ip_blkno, - (unsigned long long)bg_blkno, - start_bit, count); + mlog(0, "%llu: freeing %u bits from group %llu, starting at %u\n", + (unsigned long long)OCFS2_I(alloc_inode)->ip_blkno, count, + (unsigned long long)bg_blkno, start_bit); status = ocfs2_read_group_descriptor(alloc_inode, fe, bg_blkno, &group_bh); @@ -2503,8 +2511,7 @@ static int _ocfs2_free_suballoc_bits(handle_t *handle, bail: brelse(group_bh); - if (status) - mlog_errno(status); + mlog_exit(status); return status; } @@ -2549,8 +2556,11 @@ static int _ocfs2_free_clusters(handle_t *handle, /* You can't ever have a contiguous set of clusters * bigger than a block group bitmap so we never have to worry - * about looping on them. - * This is expensive. We can safely remove once this stuff has + * about looping on them. */ + + mlog_entry_void(); + + /* This is expensive. We can safely remove once this stuff has * gotten tested really well. */ BUG_ON(start_blk != ocfs2_clusters_to_blocks(bitmap_inode->i_sb, ocfs2_blocks_to_clusters(bitmap_inode->i_sb, start_blk))); @@ -2559,9 +2569,10 @@ static int _ocfs2_free_clusters(handle_t *handle, ocfs2_block_to_cluster_group(bitmap_inode, start_blk, &bg_blkno, &bg_start_bit); - trace_ocfs2_free_clusters((unsigned long long)bg_blkno, - (unsigned long long)start_blk, - bg_start_bit, num_clusters); + mlog(0, "want to free %u clusters starting at block %llu\n", + num_clusters, (unsigned long long)start_blk); + mlog(0, "bg_blkno = %llu, bg_start_bit = %u\n", + (unsigned long long)bg_blkno, bg_start_bit); status = _ocfs2_free_suballoc_bits(handle, bitmap_inode, bitmap_bh, bg_start_bit, bg_blkno, @@ -2575,8 +2586,7 @@ static int _ocfs2_free_clusters(handle_t *handle, num_clusters); out: - if (status) - mlog_errno(status); + mlog_exit(status); return status; } @@ -2746,7 +2756,7 @@ static int ocfs2_get_suballoc_slot_bit(struct ocfs2_super *osb, u64 blkno, struct buffer_head *inode_bh = NULL; struct ocfs2_dinode *inode_fe; - trace_ocfs2_get_suballoc_slot_bit((unsigned long long)blkno); + mlog_entry("blkno: %llu\n", (unsigned long long)blkno); /* dirty read disk */ status = ocfs2_read_blocks_sync(osb, blkno, 1, &inode_bh); @@ -2783,8 +2793,7 @@ static int ocfs2_get_suballoc_slot_bit(struct ocfs2_super *osb, u64 blkno, bail: brelse(inode_bh); - if (status) - mlog_errno(status); + mlog_exit(status); return status; } @@ -2807,8 +2816,8 @@ static int ocfs2_test_suballoc_bit(struct ocfs2_super *osb, u64 bg_blkno; int status; - trace_ocfs2_test_suballoc_bit((unsigned long long)blkno, - (unsigned int)bit); + mlog_entry("blkno: %llu bit: %u\n", (unsigned long long)blkno, + (unsigned int)bit); alloc_di = (struct ocfs2_dinode *)alloc_bh->b_data; if ((bit + 1) > ocfs2_bits_per_group(&alloc_di->id2.i_chain)) { @@ -2835,8 +2844,7 @@ static int ocfs2_test_suballoc_bit(struct ocfs2_super *osb, bail: brelse(group_bh); - if (status) - mlog_errno(status); + mlog_exit(status); return status; } @@ -2861,7 +2869,7 @@ int ocfs2_test_inode_bit(struct ocfs2_super *osb, u64 blkno, int *res) struct inode *inode_alloc_inode; struct buffer_head *alloc_bh = NULL; - trace_ocfs2_test_inode_bit((unsigned long long)blkno); + mlog_entry("blkno: %llu", (unsigned long long)blkno); status = ocfs2_get_suballoc_slot_bit(osb, blkno, &suballoc_slot, &group_blkno, &suballoc_bit); @@ -2902,7 +2910,6 @@ int ocfs2_test_inode_bit(struct ocfs2_super *osb, u64 blkno, int *res) iput(inode_alloc_inode); brelse(alloc_bh); bail: - if (status) - mlog_errno(status); + mlog_exit(status); return status; } diff --git a/trunk/fs/ocfs2/super.c b/trunk/fs/ocfs2/super.c index 69fa11b35aa4..236ed1bdca2c 100644 --- a/trunk/fs/ocfs2/super.c +++ b/trunk/fs/ocfs2/super.c @@ -42,9 +42,7 @@ #include #include -#define CREATE_TRACE_POINTS -#include "ocfs2_trace.h" - +#define MLOG_MASK_PREFIX ML_SUPER #include #include "ocfs2.h" @@ -443,6 +441,8 @@ static int ocfs2_init_global_system_inodes(struct ocfs2_super *osb) int status = 0; int i; + mlog_entry_void(); + new = ocfs2_iget(osb, osb->root_blkno, OCFS2_FI_FLAG_SYSFILE, 0); if (IS_ERR(new)) { status = PTR_ERR(new); @@ -478,8 +478,7 @@ static int ocfs2_init_global_system_inodes(struct ocfs2_super *osb) } bail: - if (status) - mlog_errno(status); + mlog_exit(status); return status; } @@ -489,6 +488,8 @@ static int ocfs2_init_local_system_inodes(struct ocfs2_super *osb) int status = 0; int i; + mlog_entry_void(); + for (i = OCFS2_LAST_GLOBAL_SYSTEM_INODE + 1; i < NUM_SYSTEM_INODES; i++) { @@ -507,8 +508,7 @@ static int ocfs2_init_local_system_inodes(struct ocfs2_super *osb) } bail: - if (status) - mlog_errno(status); + mlog_exit(status); return status; } @@ -517,6 +517,8 @@ static void ocfs2_release_system_inodes(struct ocfs2_super *osb) int i; struct inode *inode; + mlog_entry_void(); + for (i = 0; i < NUM_GLOBAL_SYSTEM_INODES; i++) { inode = osb->global_system_inodes[i]; if (inode) { @@ -538,7 +540,7 @@ static void ocfs2_release_system_inodes(struct ocfs2_super *osb) } if (!osb->local_system_inodes) - return; + goto out; for (i = 0; i < NUM_LOCAL_SYSTEM_INODES * osb->max_slots; i++) { if (osb->local_system_inodes[i]) { @@ -549,6 +551,9 @@ static void ocfs2_release_system_inodes(struct ocfs2_super *osb) kfree(osb->local_system_inodes); osb->local_system_inodes = NULL; + +out: + mlog_exit(0); } /* We're allocating fs objects, use GFP_NOFS */ @@ -679,9 +684,12 @@ static int ocfs2_remount(struct super_block *sb, int *flags, char *data) } if (*flags & MS_RDONLY) { + mlog(0, "Going to ro mode.\n"); sb->s_flags |= MS_RDONLY; osb->osb_flags |= OCFS2_OSB_SOFT_RO; } else { + mlog(0, "Making ro filesystem writeable.\n"); + if (osb->osb_flags & OCFS2_OSB_ERROR_FS) { mlog(ML_ERROR, "Cannot remount RDWR " "filesystem due to previous errors.\n"); @@ -699,7 +707,6 @@ static int ocfs2_remount(struct super_block *sb, int *flags, char *data) sb->s_flags &= ~MS_RDONLY; osb->osb_flags &= ~OCFS2_OSB_SOFT_RO; } - trace_ocfs2_remount(sb->s_flags, osb->osb_flags, *flags); unlock_osb: spin_unlock(&osb->osb_lock); /* Enable quota accounting after remounting RW */ @@ -1025,7 +1032,7 @@ static int ocfs2_fill_super(struct super_block *sb, void *data, int silent) char nodestr[8]; struct ocfs2_blockcheck_stats stats; - trace_ocfs2_fill_super(sb, data, silent); + mlog_entry("%p, %p, %i", sb, data, silent); if (!ocfs2_parse_options(sb, data, &parsed_options, 0)) { status = -EINVAL; @@ -1201,6 +1208,7 @@ static int ocfs2_fill_super(struct super_block *sb, void *data, int silent) mlog_errno(status); atomic_set(&osb->vol_state, VOLUME_DISABLED); wake_up(&osb->osb_mount_event); + mlog_exit(status); return status; } } @@ -1214,6 +1222,7 @@ static int ocfs2_fill_super(struct super_block *sb, void *data, int silent) /* Start this when the mount is almost sure of being successful */ ocfs2_orphan_scan_start(osb); + mlog_exit(status); return status; read_super_error: @@ -1228,8 +1237,7 @@ static int ocfs2_fill_super(struct super_block *sb, void *data, int silent) ocfs2_dismount_volume(sb, 1); } - if (status) - mlog_errno(status); + mlog_exit(status); return status; } @@ -1312,7 +1320,8 @@ static int ocfs2_parse_options(struct super_block *sb, char *p; u32 tmp; - trace_ocfs2_parse_options(is_remount, options ? options : "(none)"); + mlog_entry("remount: %d, options: \"%s\"\n", is_remount, + options ? options : "(none)"); mopt->commit_interval = 0; mopt->mount_opt = OCFS2_MOUNT_NOINTR; @@ -1529,6 +1538,7 @@ static int ocfs2_parse_options(struct super_block *sb, status = 1; bail: + mlog_exit(status); return status; } @@ -1619,6 +1629,8 @@ static int __init ocfs2_init(void) { int status; + mlog_entry_void(); + ocfs2_print_version(); status = init_ocfs2_uptodate_cache(); @@ -1652,9 +1664,10 @@ static int __init ocfs2_init(void) if (status < 0) { ocfs2_free_mem_caches(); exit_ocfs2_uptodate_cache(); - mlog_errno(status); } + mlog_exit(status); + if (status >= 0) { return register_filesystem(&ocfs2_fs_type); } else @@ -1663,6 +1676,8 @@ static int __init ocfs2_init(void) static void __exit ocfs2_exit(void) { + mlog_entry_void(); + if (ocfs2_wq) { flush_workqueue(ocfs2_wq); destroy_workqueue(ocfs2_wq); @@ -1677,14 +1692,18 @@ static void __exit ocfs2_exit(void) unregister_filesystem(&ocfs2_fs_type); exit_ocfs2_uptodate_cache(); + + mlog_exit_void(); } static void ocfs2_put_super(struct super_block *sb) { - trace_ocfs2_put_super(sb); + mlog_entry("(0x%p)\n", sb); ocfs2_sync_blockdev(sb); ocfs2_dismount_volume(sb, 0); + + mlog_exit_void(); } static int ocfs2_statfs(struct dentry *dentry, struct kstatfs *buf) @@ -1696,7 +1715,7 @@ static int ocfs2_statfs(struct dentry *dentry, struct kstatfs *buf) struct buffer_head *bh = NULL; struct inode *inode = NULL; - trace_ocfs2_statfs(dentry->d_sb, buf); + mlog_entry("(%p, %p)\n", dentry->d_sb, buf); osb = OCFS2_SB(dentry->d_sb); @@ -1743,8 +1762,7 @@ static int ocfs2_statfs(struct dentry *dentry, struct kstatfs *buf) if (inode) iput(inode); - if (status) - mlog_errno(status); + mlog_exit(status); return status; } @@ -1864,6 +1882,8 @@ static int ocfs2_mount_volume(struct super_block *sb) int unlock_super = 0; struct ocfs2_super *osb = OCFS2_SB(sb); + mlog_entry_void(); + if (ocfs2_is_hard_readonly(osb)) goto leave; @@ -1908,6 +1928,7 @@ static int ocfs2_mount_volume(struct super_block *sb) if (unlock_super) ocfs2_super_unlock(osb, 1); + mlog_exit(status); return status; } @@ -1917,7 +1938,7 @@ static void ocfs2_dismount_volume(struct super_block *sb, int mnt_err) struct ocfs2_super *osb = NULL; char nodestr[8]; - trace_ocfs2_dismount_volume(sb); + mlog_entry("(0x%p)\n", sb); BUG_ON(!sb); osb = OCFS2_SB(sb); @@ -2069,6 +2090,8 @@ static int ocfs2_initialize_super(struct super_block *sb, struct ocfs2_super *osb; u64 total_blocks; + mlog_entry_void(); + osb = kzalloc(sizeof(struct ocfs2_super), GFP_KERNEL); if (!osb) { status = -ENOMEM; @@ -2132,6 +2155,7 @@ static int ocfs2_initialize_super(struct super_block *sb, status = -EINVAL; goto bail; } + mlog(0, "max_slots for this device: %u\n", osb->max_slots); ocfs2_orphan_scan_init(osb); @@ -2270,6 +2294,7 @@ static int ocfs2_initialize_super(struct super_block *sb, osb->s_clustersize_bits = le32_to_cpu(di->id2.i_super.s_clustersize_bits); osb->s_clustersize = 1 << osb->s_clustersize_bits; + mlog(0, "clusterbits=%d\n", osb->s_clustersize_bits); if (osb->s_clustersize < OCFS2_MIN_CLUSTERSIZE || osb->s_clustersize > OCFS2_MAX_CLUSTERSIZE) { @@ -2308,10 +2333,11 @@ static int ocfs2_initialize_super(struct super_block *sb, le64_to_cpu(di->id2.i_super.s_first_cluster_group); osb->fs_generation = le32_to_cpu(di->i_fs_generation); osb->uuid_hash = le32_to_cpu(di->id2.i_super.s_uuid_hash); - trace_ocfs2_initialize_super(osb->vol_label, osb->uuid_str, - (unsigned long long)osb->root_blkno, - (unsigned long long)osb->system_dir_blkno, - osb->s_clustersize_bits); + mlog(0, "vol_label: %s\n", osb->vol_label); + mlog(0, "uuid: %s\n", osb->uuid_str); + mlog(0, "root_blkno=%llu, system_dir_blkno=%llu\n", + (unsigned long long)osb->root_blkno, + (unsigned long long)osb->system_dir_blkno); osb->osb_dlm_debug = ocfs2_new_dlm_debug(); if (!osb->osb_dlm_debug) { @@ -2354,6 +2380,7 @@ static int ocfs2_initialize_super(struct super_block *sb, } bail: + mlog_exit(status); return status; } @@ -2369,6 +2396,8 @@ static int ocfs2_verify_volume(struct ocfs2_dinode *di, { int status = -EAGAIN; + mlog_entry_void(); + if (memcmp(di->i_signature, OCFS2_SUPER_BLOCK_SIGNATURE, strlen(OCFS2_SUPER_BLOCK_SIGNATURE)) == 0) { /* We have to do a raw check of the feature here */ @@ -2423,8 +2452,7 @@ static int ocfs2_verify_volume(struct ocfs2_dinode *di, } out: - if (status && status != -EAGAIN) - mlog_errno(status); + mlog_exit(status); return status; } @@ -2437,6 +2465,8 @@ static int ocfs2_check_volume(struct ocfs2_super *osb) * recover * ourselves. */ + mlog_entry_void(); + /* Init our journal object. */ status = ocfs2_journal_init(osb->journal, &dirty); if (status < 0) { @@ -2486,6 +2516,8 @@ static int ocfs2_check_volume(struct ocfs2_super *osb) * ourselves as mounted. */ } + mlog(0, "Journal loaded.\n"); + status = ocfs2_load_local_alloc(osb); if (status < 0) { mlog_errno(status); @@ -2517,8 +2549,7 @@ static int ocfs2_check_volume(struct ocfs2_super *osb) if (local_alloc) kfree(local_alloc); - if (status) - mlog_errno(status); + mlog_exit(status); return status; } @@ -2530,6 +2561,8 @@ static int ocfs2_check_volume(struct ocfs2_super *osb) */ static void ocfs2_delete_osb(struct ocfs2_super *osb) { + mlog_entry_void(); + /* This function assumes that the caller has the main osb resource */ ocfs2_free_slot_info(osb); @@ -2547,6 +2580,8 @@ static void ocfs2_delete_osb(struct ocfs2_super *osb) kfree(osb->uuid_str); ocfs2_put_dlm_debug(osb->osb_dlm_debug); memset(osb, 0, sizeof(struct ocfs2_super)); + + mlog_exit_void(); } /* Put OCFS2 into a readonly state, or (if the user specifies it), diff --git a/trunk/fs/ocfs2/symlink.c b/trunk/fs/ocfs2/symlink.c index 5d22872e2bb3..9975457c981f 100644 --- a/trunk/fs/ocfs2/symlink.c +++ b/trunk/fs/ocfs2/symlink.c @@ -40,6 +40,7 @@ #include #include +#define MLOG_MASK_PREFIX ML_NAMEI #include #include "ocfs2.h" @@ -61,6 +62,8 @@ static char *ocfs2_fast_symlink_getlink(struct inode *inode, char *link = NULL; struct ocfs2_dinode *fe; + mlog_entry_void(); + status = ocfs2_read_inode_block(inode, bh); if (status < 0) { mlog_errno(status); @@ -71,6 +74,7 @@ static char *ocfs2_fast_symlink_getlink(struct inode *inode, fe = (struct ocfs2_dinode *) (*bh)->b_data; link = (char *) fe->id2.i_symlink; bail: + mlog_exit(status); return link; } @@ -84,6 +88,8 @@ static int ocfs2_readlink(struct dentry *dentry, struct buffer_head *bh = NULL; struct inode *inode = dentry->d_inode; + mlog_entry_void(); + link = ocfs2_fast_symlink_getlink(inode, &bh); if (IS_ERR(link)) { ret = PTR_ERR(link); @@ -98,8 +104,7 @@ static int ocfs2_readlink(struct dentry *dentry, brelse(bh); out: - if (ret < 0) - mlog_errno(ret); + mlog_exit(ret); return ret; } @@ -112,6 +117,8 @@ static void *ocfs2_fast_follow_link(struct dentry *dentry, struct inode *inode = dentry->d_inode; struct buffer_head *bh = NULL; + mlog_entry_void(); + BUG_ON(!ocfs2_inode_is_fast_symlink(inode)); target = ocfs2_fast_symlink_getlink(inode, &bh); if (IS_ERR(target)) { @@ -135,8 +142,7 @@ static void *ocfs2_fast_follow_link(struct dentry *dentry, nd_set_link(nd, status ? ERR_PTR(status) : link); brelse(bh); - if (status) - mlog_errno(status); + mlog_exit(status); return NULL; } diff --git a/trunk/fs/ocfs2/sysfile.c b/trunk/fs/ocfs2/sysfile.c index 3d635f4bbb20..902efb23b6a6 100644 --- a/trunk/fs/ocfs2/sysfile.c +++ b/trunk/fs/ocfs2/sysfile.c @@ -27,6 +27,7 @@ #include #include +#define MLOG_MASK_PREFIX ML_INODE #include #include "ocfs2.h" diff --git a/trunk/fs/ocfs2/uptodate.c b/trunk/fs/ocfs2/uptodate.c index 52eaf33d346f..a0a120e82b97 100644 --- a/trunk/fs/ocfs2/uptodate.c +++ b/trunk/fs/ocfs2/uptodate.c @@ -54,13 +54,14 @@ #include #include +#define MLOG_MASK_PREFIX ML_UPTODATE + #include #include "ocfs2.h" #include "inode.h" #include "uptodate.h" -#include "ocfs2_trace.h" struct ocfs2_meta_cache_item { struct rb_node c_node; @@ -151,8 +152,8 @@ static unsigned int ocfs2_purge_copied_metadata_tree(struct rb_root *root) while ((node = rb_last(root)) != NULL) { item = rb_entry(node, struct ocfs2_meta_cache_item, c_node); - trace_ocfs2_purge_copied_metadata_tree( - (unsigned long long) item->c_block); + mlog(0, "Purge item %llu\n", + (unsigned long long) item->c_block); rb_erase(&item->c_node, root); kmem_cache_free(ocfs2_uptodate_cachep, item); @@ -179,9 +180,9 @@ void ocfs2_metadata_cache_purge(struct ocfs2_caching_info *ci) tree = !(ci->ci_flags & OCFS2_CACHE_FL_INLINE); to_purge = ci->ci_num_cached; - trace_ocfs2_metadata_cache_purge( - (unsigned long long)ocfs2_metadata_cache_owner(ci), - to_purge, tree); + mlog(0, "Purge %u %s items from Owner %llu\n", to_purge, + tree ? "array" : "tree", + (unsigned long long)ocfs2_metadata_cache_owner(ci)); /* If we're a tree, save off the root so that we can safely * initialize the cache. We do the work to free tree members @@ -248,10 +249,10 @@ static int ocfs2_buffer_cached(struct ocfs2_caching_info *ci, ocfs2_metadata_cache_lock(ci); - trace_ocfs2_buffer_cached_begin( - (unsigned long long)ocfs2_metadata_cache_owner(ci), - (unsigned long long) bh->b_blocknr, - !!(ci->ci_flags & OCFS2_CACHE_FL_INLINE)); + mlog(0, "Owner %llu, query block %llu (inline = %u)\n", + (unsigned long long)ocfs2_metadata_cache_owner(ci), + (unsigned long long) bh->b_blocknr, + !!(ci->ci_flags & OCFS2_CACHE_FL_INLINE)); if (ci->ci_flags & OCFS2_CACHE_FL_INLINE) index = ocfs2_search_cache_array(ci, bh->b_blocknr); @@ -260,7 +261,7 @@ static int ocfs2_buffer_cached(struct ocfs2_caching_info *ci, ocfs2_metadata_cache_unlock(ci); - trace_ocfs2_buffer_cached_end(index, item); + mlog(0, "index = %d, item = %p\n", index, item); return (index != -1) || (item != NULL); } @@ -305,9 +306,8 @@ static void ocfs2_append_cache_array(struct ocfs2_caching_info *ci, { BUG_ON(ci->ci_num_cached >= OCFS2_CACHE_INFO_MAX_ARRAY); - trace_ocfs2_append_cache_array( - (unsigned long long)ocfs2_metadata_cache_owner(ci), - (unsigned long long)block, ci->ci_num_cached); + mlog(0, "block %llu takes position %u\n", (unsigned long long) block, + ci->ci_num_cached); ci->ci_cache.ci_array[ci->ci_num_cached] = block; ci->ci_num_cached++; @@ -324,9 +324,8 @@ static void __ocfs2_insert_cache_tree(struct ocfs2_caching_info *ci, struct rb_node **p = &ci->ci_cache.ci_tree.rb_node; struct ocfs2_meta_cache_item *tmp; - trace_ocfs2_insert_cache_tree( - (unsigned long long)ocfs2_metadata_cache_owner(ci), - (unsigned long long)block, ci->ci_num_cached); + mlog(0, "Insert block %llu num = %u\n", (unsigned long long) block, + ci->ci_num_cached); while(*p) { parent = *p; @@ -390,9 +389,9 @@ static void ocfs2_expand_cache(struct ocfs2_caching_info *ci, tree[i] = NULL; } - trace_ocfs2_expand_cache( - (unsigned long long)ocfs2_metadata_cache_owner(ci), - ci->ci_flags, ci->ci_num_cached); + mlog(0, "Expanded %llu to a tree cache: flags 0x%x, num = %u\n", + (unsigned long long)ocfs2_metadata_cache_owner(ci), + ci->ci_flags, ci->ci_num_cached); } /* Slow path function - memory allocation is necessary. See the @@ -406,9 +405,9 @@ static void __ocfs2_set_buffer_uptodate(struct ocfs2_caching_info *ci, struct ocfs2_meta_cache_item *tree[OCFS2_CACHE_INFO_MAX_ARRAY] = { NULL, }; - trace_ocfs2_set_buffer_uptodate( - (unsigned long long)ocfs2_metadata_cache_owner(ci), - (unsigned long long)block, expand_tree); + mlog(0, "Owner %llu, block %llu, expand = %d\n", + (unsigned long long)ocfs2_metadata_cache_owner(ci), + (unsigned long long)block, expand_tree); new = kmem_cache_alloc(ocfs2_uptodate_cachep, GFP_NOFS); if (!new) { @@ -434,6 +433,7 @@ static void __ocfs2_set_buffer_uptodate(struct ocfs2_caching_info *ci, ocfs2_metadata_cache_lock(ci); if (ocfs2_insert_can_use_array(ci)) { + mlog(0, "Someone cleared the tree underneath us\n"); /* Ok, items were removed from the cache in between * locks. Detect this and revert back to the fast path */ ocfs2_append_cache_array(ci, block); @@ -490,9 +490,9 @@ void ocfs2_set_buffer_uptodate(struct ocfs2_caching_info *ci, if (ocfs2_buffer_cached(ci, bh)) return; - trace_ocfs2_set_buffer_uptodate_begin( - (unsigned long long)ocfs2_metadata_cache_owner(ci), - (unsigned long long)bh->b_blocknr); + mlog(0, "Owner %llu, inserting block %llu\n", + (unsigned long long)ocfs2_metadata_cache_owner(ci), + (unsigned long long)bh->b_blocknr); /* No need to recheck under spinlock - insertion is guarded by * co_io_lock() */ @@ -542,9 +542,8 @@ static void ocfs2_remove_metadata_array(struct ocfs2_caching_info *ci, BUG_ON(index >= ci->ci_num_cached); BUG_ON(!ci->ci_num_cached); - trace_ocfs2_remove_metadata_array( - (unsigned long long)ocfs2_metadata_cache_owner(ci), - index, ci->ci_num_cached); + mlog(0, "remove index %d (num_cached = %u\n", index, + ci->ci_num_cached); ci->ci_num_cached--; @@ -560,9 +559,8 @@ static void ocfs2_remove_metadata_array(struct ocfs2_caching_info *ci, static void ocfs2_remove_metadata_tree(struct ocfs2_caching_info *ci, struct ocfs2_meta_cache_item *item) { - trace_ocfs2_remove_metadata_tree( - (unsigned long long)ocfs2_metadata_cache_owner(ci), - (unsigned long long)item->c_block); + mlog(0, "remove block %llu from tree\n", + (unsigned long long) item->c_block); rb_erase(&item->c_node, &ci->ci_cache.ci_tree); ci->ci_num_cached--; @@ -575,10 +573,10 @@ static void ocfs2_remove_block_from_cache(struct ocfs2_caching_info *ci, struct ocfs2_meta_cache_item *item = NULL; ocfs2_metadata_cache_lock(ci); - trace_ocfs2_remove_block_from_cache( - (unsigned long long)ocfs2_metadata_cache_owner(ci), - (unsigned long long) block, ci->ci_num_cached, - ci->ci_flags); + mlog(0, "Owner %llu, remove %llu, items = %u, array = %u\n", + (unsigned long long)ocfs2_metadata_cache_owner(ci), + (unsigned long long) block, ci->ci_num_cached, + ci->ci_flags & OCFS2_CACHE_FL_INLINE); if (ci->ci_flags & OCFS2_CACHE_FL_INLINE) { index = ocfs2_search_cache_array(ci, block); @@ -628,6 +626,9 @@ int __init init_ocfs2_uptodate_cache(void) if (!ocfs2_uptodate_cachep) return -ENOMEM; + mlog(0, "%u inlined cache items per inode.\n", + OCFS2_CACHE_INFO_MAX_ARRAY); + return 0; } diff --git a/trunk/fs/ocfs2/xattr.c b/trunk/fs/ocfs2/xattr.c index 57a215dc2d9b..6bb602486c6b 100644 --- a/trunk/fs/ocfs2/xattr.c +++ b/trunk/fs/ocfs2/xattr.c @@ -37,6 +37,7 @@ #include #include +#define MLOG_MASK_PREFIX ML_XATTR #include #include "ocfs2.h" @@ -56,7 +57,6 @@ #include "xattr.h" #include "refcounttree.h" #include "acl.h" -#include "ocfs2_trace.h" struct ocfs2_xattr_def_value_root { struct ocfs2_xattr_value_root xv; @@ -474,7 +474,8 @@ static int ocfs2_validate_xattr_block(struct super_block *sb, struct ocfs2_xattr_block *xb = (struct ocfs2_xattr_block *)bh->b_data; - trace_ocfs2_validate_xattr_block((unsigned long long)bh->b_blocknr); + mlog(0, "Validating xattr block %llu\n", + (unsigned long long)bh->b_blocknr); BUG_ON(!buffer_uptodate(bh)); @@ -714,11 +715,11 @@ static int ocfs2_xattr_extend_allocation(struct inode *inode, u32 prev_clusters, logical_start = le32_to_cpu(vb->vb_xv->xr_clusters); struct ocfs2_extent_tree et; + mlog(0, "(clusters_to_add for xattr= %u)\n", clusters_to_add); + ocfs2_init_xattr_value_extent_tree(&et, INODE_CACHE(inode), vb); while (clusters_to_add) { - trace_ocfs2_xattr_extend_allocation(clusters_to_add); - status = vb->vb_access(handle, INODE_CACHE(inode), vb->vb_bh, OCFS2_JOURNAL_ACCESS_WRITE); if (status < 0) { @@ -753,6 +754,8 @@ static int ocfs2_xattr_extend_allocation(struct inode *inode, */ BUG_ON(why == RESTART_META); + mlog(0, "restarting xattr value extension for %u" + " clusters,.\n", clusters_to_add); credits = ocfs2_calc_extend_credits(inode->i_sb, &vb->vb_xv->xr_list, clusters_to_add); @@ -3243,8 +3246,8 @@ static int ocfs2_init_xattr_set_ctxt(struct inode *inode, } meta_add += extra_meta; - trace_ocfs2_init_xattr_set_ctxt(xi->xi_name, meta_add, - clusters_add, *credits); + mlog(0, "Set xattr %s, reserve meta blocks = %d, clusters = %d, " + "credits = %d\n", xi->xi_name, meta_add, clusters_add, *credits); if (meta_add) { ret = ocfs2_reserve_new_metadata_blocks(osb, meta_add, @@ -3884,10 +3887,8 @@ static int ocfs2_xattr_bucket_find(struct inode *inode, if (found) { xs->here = &xs->header->xh_entries[index]; - trace_ocfs2_xattr_bucket_find(OCFS2_I(inode)->ip_blkno, - name, name_index, name_hash, - (unsigned long long)bucket_blkno(xs->bucket), - index); + mlog(0, "find xattr %s in bucket %llu, entry = %u\n", name, + (unsigned long long)bucket_blkno(xs->bucket), index); } else ret = -ENODATA; @@ -3914,10 +3915,8 @@ static int ocfs2_xattr_index_block_find(struct inode *inode, if (le16_to_cpu(el->l_next_free_rec) == 0) return -ENODATA; - trace_ocfs2_xattr_index_block_find(OCFS2_I(inode)->ip_blkno, - name, name_index, name_hash, - (unsigned long long)root_bh->b_blocknr, - -1); + mlog(0, "find xattr %s, hash = %u, index = %d in xattr tree\n", + name, name_hash, name_index); ret = ocfs2_xattr_get_rec(inode, name_hash, &p_blkno, &first_hash, &num_clusters, el); @@ -3928,10 +3927,9 @@ static int ocfs2_xattr_index_block_find(struct inode *inode, BUG_ON(p_blkno == 0 || num_clusters == 0 || first_hash > name_hash); - trace_ocfs2_xattr_index_block_find_rec(OCFS2_I(inode)->ip_blkno, - name, name_index, first_hash, - (unsigned long long)p_blkno, - num_clusters); + mlog(0, "find xattr extent rec %u clusters from %llu, the first hash " + "in the rec is %u\n", num_clusters, (unsigned long long)p_blkno, + first_hash); ret = ocfs2_xattr_bucket_find(inode, name_index, name, name_hash, p_blkno, first_hash, num_clusters, xs); @@ -3957,9 +3955,8 @@ static int ocfs2_iterate_xattr_buckets(struct inode *inode, return -ENOMEM; } - trace_ocfs2_iterate_xattr_buckets( - (unsigned long long)OCFS2_I(inode)->ip_blkno, - (unsigned long long)blkno, clusters); + mlog(0, "iterating xattr buckets in %u clusters starting from %llu\n", + clusters, (unsigned long long)blkno); for (i = 0; i < num_buckets; i++, blkno += bucket->bu_blocks) { ret = ocfs2_read_xattr_bucket(bucket, blkno); @@ -3975,7 +3972,8 @@ static int ocfs2_iterate_xattr_buckets(struct inode *inode, if (i == 0) num_buckets = le16_to_cpu(bucket_xh(bucket)->xh_num_buckets); - trace_ocfs2_iterate_xattr_bucket((unsigned long long)blkno, + mlog(0, "iterating xattr bucket %llu, first hash %u\n", + (unsigned long long)blkno, le32_to_cpu(bucket_xh(bucket)->xh_entries[0].xe_name_hash)); if (func) { ret = func(inode, bucket, para); @@ -4175,9 +4173,9 @@ static void ocfs2_cp_xattr_block_to_bucket(struct inode *inode, char *src = xb_bh->b_data; char *target = bucket_block(bucket, blks - 1); - trace_ocfs2_cp_xattr_block_to_bucket_begin( - (unsigned long long)xb_bh->b_blocknr, - (unsigned long long)bucket_blkno(bucket)); + mlog(0, "cp xattr from block %llu to bucket %llu\n", + (unsigned long long)xb_bh->b_blocknr, + (unsigned long long)bucket_blkno(bucket)); for (i = 0; i < blks; i++) memset(bucket_block(bucket, i), 0, blocksize); @@ -4213,7 +4211,8 @@ static void ocfs2_cp_xattr_block_to_bucket(struct inode *inode, for (i = 0; i < count; i++) le16_add_cpu(&xh->xh_entries[i].xe_name_offset, off_change); - trace_ocfs2_cp_xattr_block_to_bucket_end(offset, size, off_change); + mlog(0, "copy entry: start = %u, size = %u, offset_change = %u\n", + offset, size, off_change); sort(target + offset, count, sizeof(struct ocfs2_xattr_entry), cmp_xe, swap_xe); @@ -4262,8 +4261,8 @@ static int ocfs2_xattr_create_index_block(struct inode *inode, struct ocfs2_xattr_tree_root *xr; u16 xb_flags = le16_to_cpu(xb->xb_flags); - trace_ocfs2_xattr_create_index_block_begin( - (unsigned long long)xb_bh->b_blocknr); + mlog(0, "create xattr index block for %llu\n", + (unsigned long long)xb_bh->b_blocknr); BUG_ON(xb_flags & OCFS2_XATTR_INDEXED); BUG_ON(!xs->bucket); @@ -4296,7 +4295,8 @@ static int ocfs2_xattr_create_index_block(struct inode *inode, */ blkno = ocfs2_clusters_to_blocks(inode->i_sb, bit_off); - trace_ocfs2_xattr_create_index_block((unsigned long long)blkno); + mlog(0, "allocate 1 cluster from %llu to xattr block\n", + (unsigned long long)blkno); ret = ocfs2_init_xattr_bucket(xs->bucket, blkno); if (ret) { @@ -4400,7 +4400,8 @@ static int ocfs2_defrag_xattr_bucket(struct inode *inode, entries = (char *)xh->xh_entries; xh_free_start = le16_to_cpu(xh->xh_free_start); - trace_ocfs2_defrag_xattr_bucket( + mlog(0, "adjust xattr bucket in %llu, count = %u, " + "xh_free_start = %u, xh_name_value_len = %u.\n", (unsigned long long)blkno, le16_to_cpu(xh->xh_count), xh_free_start, le16_to_cpu(xh->xh_name_value_len)); @@ -4502,9 +4503,8 @@ static int ocfs2_mv_xattr_bucket_cross_cluster(struct inode *inode, BUG_ON(le16_to_cpu(bucket_xh(first)->xh_num_buckets) < num_buckets); BUG_ON(OCFS2_XATTR_BUCKET_SIZE == OCFS2_SB(sb)->s_clustersize); - trace_ocfs2_mv_xattr_bucket_cross_cluster( - (unsigned long long)last_cluster_blkno, - (unsigned long long)new_blkno); + mlog(0, "move half of xattrs in cluster %llu to %llu\n", + (unsigned long long)last_cluster_blkno, (unsigned long long)new_blkno); ret = ocfs2_mv_xattr_buckets(inode, handle, bucket_blkno(first), last_cluster_blkno, new_blkno, @@ -4614,8 +4614,8 @@ static int ocfs2_divide_xattr_bucket(struct inode *inode, struct ocfs2_xattr_entry *xe; int blocksize = inode->i_sb->s_blocksize; - trace_ocfs2_divide_xattr_bucket_begin((unsigned long long)blk, - (unsigned long long)new_blk); + mlog(0, "move some of xattrs from bucket %llu to %llu\n", + (unsigned long long)blk, (unsigned long long)new_blk); s_bucket = ocfs2_xattr_bucket_new(inode); t_bucket = ocfs2_xattr_bucket_new(inode); @@ -4714,9 +4714,9 @@ static int ocfs2_divide_xattr_bucket(struct inode *inode, */ xe = &xh->xh_entries[start]; len = sizeof(struct ocfs2_xattr_entry) * (count - start); - trace_ocfs2_divide_xattr_bucket_move(len, - (int)((char *)xe - (char *)xh), - (int)((char *)xh->xh_entries - (char *)xh)); + mlog(0, "mv xattr entry len %d from %d to %d\n", len, + (int)((char *)xe - (char *)xh), + (int)((char *)xh->xh_entries - (char *)xh)); memmove((char *)xh->xh_entries, (char *)xe, len); xe = &xh->xh_entries[count - start]; len = sizeof(struct ocfs2_xattr_entry) * start; @@ -4788,9 +4788,9 @@ static int ocfs2_cp_xattr_bucket(struct inode *inode, BUG_ON(s_blkno == t_blkno); - trace_ocfs2_cp_xattr_bucket((unsigned long long)s_blkno, - (unsigned long long)t_blkno, - t_is_new); + mlog(0, "cp bucket %llu to %llu, target is %d\n", + (unsigned long long)s_blkno, (unsigned long long)t_blkno, + t_is_new); s_bucket = ocfs2_xattr_bucket_new(inode); t_bucket = ocfs2_xattr_bucket_new(inode); @@ -4862,8 +4862,8 @@ static int ocfs2_mv_xattr_buckets(struct inode *inode, handle_t *handle, int num_buckets = ocfs2_xattr_buckets_per_cluster(osb); struct ocfs2_xattr_bucket *old_first, *new_first; - trace_ocfs2_mv_xattr_buckets((unsigned long long)last_blk, - (unsigned long long)to_blk); + mlog(0, "mv xattrs from cluster %llu to %llu\n", + (unsigned long long)last_blk, (unsigned long long)to_blk); BUG_ON(start_bucket >= num_buckets); if (start_bucket) { @@ -5013,9 +5013,9 @@ static int ocfs2_adjust_xattr_cross_cluster(struct inode *inode, { int ret; - trace_ocfs2_adjust_xattr_cross_cluster( - (unsigned long long)bucket_blkno(first), - (unsigned long long)new_blk, prev_clusters); + mlog(0, "adjust xattrs from cluster %llu len %u to %llu\n", + (unsigned long long)bucket_blkno(first), prev_clusters, + (unsigned long long)new_blk); if (ocfs2_xattr_buckets_per_cluster(OCFS2_SB(inode->i_sb)) > 1) { ret = ocfs2_mv_xattr_bucket_cross_cluster(inode, @@ -5088,10 +5088,10 @@ static int ocfs2_add_new_xattr_cluster(struct inode *inode, struct ocfs2_super *osb = OCFS2_SB(inode->i_sb); struct ocfs2_extent_tree et; - trace_ocfs2_add_new_xattr_cluster_begin( - (unsigned long long)OCFS2_I(inode)->ip_blkno, - (unsigned long long)bucket_blkno(first), - prev_cpos, prev_clusters); + mlog(0, "Add new xattr cluster for %llu, previous xattr hash = %u, " + "previous xattr blkno = %llu\n", + (unsigned long long)OCFS2_I(inode)->ip_blkno, + prev_cpos, (unsigned long long)bucket_blkno(first)); ocfs2_init_xattr_tree_extent_tree(&et, INODE_CACHE(inode), root_bh); @@ -5113,7 +5113,8 @@ static int ocfs2_add_new_xattr_cluster(struct inode *inode, BUG_ON(num_bits > clusters_to_add); block = ocfs2_clusters_to_blocks(osb->sb, bit_off); - trace_ocfs2_add_new_xattr_cluster((unsigned long long)block, num_bits); + mlog(0, "Allocating %u clusters at block %u for xattr in inode %llu\n", + num_bits, bit_off, (unsigned long long)OCFS2_I(inode)->ip_blkno); if (bucket_blkno(first) + (prev_clusters * bpc) == block && (prev_clusters + num_bits) << osb->s_clustersize_bits <= @@ -5129,6 +5130,8 @@ static int ocfs2_add_new_xattr_cluster(struct inode *inode, */ v_start = prev_cpos + prev_clusters; *num_clusters = prev_clusters + num_bits; + mlog(0, "Add contiguous %u clusters to previous extent rec.\n", + num_bits); } else { ret = ocfs2_adjust_xattr_cross_cluster(inode, handle, @@ -5144,8 +5147,8 @@ static int ocfs2_add_new_xattr_cluster(struct inode *inode, } } - trace_ocfs2_add_new_xattr_cluster_insert((unsigned long long)block, - v_start, num_bits); + mlog(0, "Insert %u clusters at block %llu for xattr at %u\n", + num_bits, (unsigned long long)block, v_start); ret = ocfs2_insert_extent(handle, &et, v_start, block, num_bits, 0, ctxt->meta_ac); if (ret < 0) { @@ -5180,9 +5183,9 @@ static int ocfs2_extend_xattr_bucket(struct inode *inode, u64 end_blk; u16 new_bucket = le16_to_cpu(bucket_xh(first)->xh_num_buckets); - trace_ocfs2_extend_xattr_bucket((unsigned long long)target_blk, - (unsigned long long)bucket_blkno(first), - num_clusters, new_bucket); + mlog(0, "extend xattr bucket in %llu, xattr extend rec starting " + "from %llu, len = %u\n", (unsigned long long)target_blk, + (unsigned long long)bucket_blkno(first), num_clusters); /* The extent must have room for an additional bucket */ BUG_ON(new_bucket >= @@ -5262,8 +5265,8 @@ static int ocfs2_add_new_xattr_bucket(struct inode *inode, /* The bucket at the front of the extent */ struct ocfs2_xattr_bucket *first; - trace_ocfs2_add_new_xattr_bucket( - (unsigned long long)bucket_blkno(target)); + mlog(0, "Add new xattr bucket starting from %llu\n", + (unsigned long long)bucket_blkno(target)); /* The first bucket of the original extent */ first = ocfs2_xattr_bucket_new(inode); @@ -5379,8 +5382,8 @@ static int ocfs2_xattr_bucket_value_truncate(struct inode *inode, * modified something. We have to assume they did, and dirty * the whole bucket. This leaves us in a consistent state. */ - trace_ocfs2_xattr_bucket_value_truncate( - (unsigned long long)bucket_blkno(bucket), xe_off, len); + mlog(0, "truncate %u in xattr bucket %llu to %d bytes.\n", + xe_off, (unsigned long long)bucket_blkno(bucket), len); ret = ocfs2_xattr_value_truncate(inode, &vb, len, ctxt); if (ret) { mlog_errno(ret); @@ -5430,9 +5433,8 @@ static int ocfs2_rm_xattr_cluster(struct inode *inode, ocfs2_init_dealloc_ctxt(&dealloc); - trace_ocfs2_rm_xattr_cluster( - (unsigned long long)OCFS2_I(inode)->ip_blkno, - (unsigned long long)blkno, cpos, len); + mlog(0, "rm xattr extent rec at %u len = %u, start from %llu\n", + cpos, len, (unsigned long long)blkno); ocfs2_remove_xattr_clusters_from_cache(INODE_CACHE(inode), blkno, len); @@ -5536,7 +5538,7 @@ static int ocfs2_xattr_set_entry_bucket(struct inode *inode, int ret; struct ocfs2_xa_loc loc; - trace_ocfs2_xattr_set_entry_bucket(xi->xi_name); + mlog_entry("Set xattr %s in xattr bucket\n", xi->xi_name); ocfs2_init_xattr_bucket_xa_loc(&loc, xs->bucket, xs->not_found ? NULL : xs->here); @@ -5568,6 +5570,7 @@ static int ocfs2_xattr_set_entry_bucket(struct inode *inode, out: + mlog_exit(ret); return ret; } @@ -5578,7 +5581,7 @@ static int ocfs2_xattr_set_entry_index_block(struct inode *inode, { int ret; - trace_ocfs2_xattr_set_entry_index_block(xi->xi_name); + mlog_entry("Set xattr %s in xattr index block\n", xi->xi_name); ret = ocfs2_xattr_set_entry_bucket(inode, xi, xs, ctxt); if (!ret) @@ -5634,6 +5637,7 @@ static int ocfs2_xattr_set_entry_index_block(struct inode *inode, mlog_errno(ret); out: + mlog_exit(ret); return ret; } @@ -6037,9 +6041,9 @@ static int ocfs2_xattr_bucket_value_refcount(struct inode *inode, if (ocfs2_meta_ecc(OCFS2_SB(inode->i_sb))) p = &refcount; - trace_ocfs2_xattr_bucket_value_refcount( - (unsigned long long)bucket_blkno(bucket), - le16_to_cpu(xh->xh_count)); + mlog(0, "refcount bucket %llu, count = %u\n", + (unsigned long long)bucket_blkno(bucket), + le16_to_cpu(xh->xh_count)); for (i = 0; i < le16_to_cpu(xh->xh_count); i++) { xe = &xh->xh_entries[i]; @@ -6335,8 +6339,8 @@ static int ocfs2_reflink_xattr_header(handle_t *handle, u32 clusters, cpos, p_cluster, num_clusters; unsigned int ext_flags = 0; - trace_ocfs2_reflink_xattr_header((unsigned long long)old_bh->b_blocknr, - le16_to_cpu(xh->xh_count)); + mlog(0, "reflink xattr in container %llu, count = %u\n", + (unsigned long long)old_bh->b_blocknr, le16_to_cpu(xh->xh_count)); last = &new_xh->xh_entries[le16_to_cpu(new_xh->xh_count)]; for (i = 0, j = 0; i < le16_to_cpu(xh->xh_count); i++, j++) { @@ -6536,8 +6540,8 @@ static int ocfs2_create_empty_xattr_block(struct inode *inode, goto out; } - trace_ocfs2_create_empty_xattr_block( - (unsigned long long)fe_bh->b_blocknr, indexed); + mlog(0, "create new xattr block for inode %llu, index = %d\n", + (unsigned long long)fe_bh->b_blocknr, indexed); ret = ocfs2_create_xattr_block(inode, fe_bh, &ctxt, indexed, ret_bh); if (ret) @@ -6948,8 +6952,8 @@ static int ocfs2_reflink_xattr_buckets(handle_t *handle, if (ret) mlog_errno(ret); - trace_ocfs2_reflink_xattr_buckets((unsigned long long)new_blkno, - num_clusters, reflink_cpos); + mlog(0, "insert new xattr extent rec start %llu len %u to %u\n", + (unsigned long long)new_blkno, num_clusters, reflink_cpos); len -= num_clusters; blkno += ocfs2_clusters_to_blocks(inode->i_sb, num_clusters); @@ -6978,7 +6982,8 @@ static int ocfs2_reflink_xattr_rec(struct inode *inode, struct ocfs2_alloc_context *data_ac = NULL; struct ocfs2_extent_tree et; - trace_ocfs2_reflink_xattr_rec((unsigned long long)blkno, len); + mlog(0, "reflink xattr buckets %llu len %u\n", + (unsigned long long)blkno, len); ocfs2_init_xattr_tree_extent_tree(&et, INODE_CACHE(args->reflink->new_inode), diff --git a/trunk/include/linux/nfs_page.h b/trunk/include/linux/nfs_page.h index 91af2e49fa3a..8023e4e25133 100644 --- a/trunk/include/linux/nfs_page.h +++ b/trunk/include/linux/nfs_page.h @@ -78,6 +78,7 @@ extern struct nfs_page *nfs_create_request(struct nfs_open_context *ctx, struct page *page, unsigned int offset, unsigned int count); +extern void nfs_clear_request(struct nfs_page *req); extern void nfs_release_request(struct nfs_page *req); diff --git a/trunk/net/sunrpc/sched.c b/trunk/net/sunrpc/sched.c index 6b43ee7221d5..ffb687671da0 100644 --- a/trunk/net/sunrpc/sched.c +++ b/trunk/net/sunrpc/sched.c @@ -860,10 +860,8 @@ static void rpc_release_resources_task(struct rpc_task *task) { if (task->tk_rqstp) xprt_release(task); - if (task->tk_msg.rpc_cred) { + if (task->tk_msg.rpc_cred) put_rpccred(task->tk_msg.rpc_cred); - task->tk_msg.rpc_cred = NULL; - } rpc_task_release_client(task); }