/* * Definitions of structures for vfsv0 quota format */ #ifndef _LINUX_QUOTAIO_V2_H #define _LINUX_QUOTAIO_V2_H #include #include /* * Definitions of magics and versions of current quota files */ #define V2_INITQMAGICS {\ 0xd9c01f11, /* USRQUOTA */\ 0xd9c01927, /* GRPQUOTA */\ 0xd9c03f14, /* PRJQUOTA */\ } #define V2_INITQVERSIONS {\ 1, /* USRQUOTA */\ 1, /* GRPQUOTA */\ 1, /* PRJQUOTA */\ } /* First generic header */ struct v2_disk_dqheader { __le32 dqh_magic; /* Magic number identifying file */ __le32 dqh_version; /* File version */ }; /* * The following structure defines the format of the disk quota file * (as it appears on disk) - the file is a radix tree whose leaves point * to blocks of these structures. */ struct v2r0_disk_dqblk { __le32 dqb_id; /* id this quota applies to */ __le32 dqb_ihardlimit; /* absolute limit on allocated inodes */ __le32 dqb_isoftlimit; /* preferred inode limit */ __le32 dqb_curinodes; /* current # allocated inodes */ __le32 dqb_bhardlimit; /* absolute limit on disk space (in QUOTABLOCK_SIZE) */ __le32 dqb_bsoftlimit; /* preferred limit on disk space (in QUOTABLOCK_SIZE) */ __le64 dqb_curspace; /* current space occupied (in bytes) */ __le64 dqb_btime; /* time limit for excessive disk use */ __le64 dqb_itime; /* time limit for excessive inode use */ }; struct v2r1_disk_dqblk { __le32 dqb_id; /* id this quota applies to */ __le32 dqb_pad; __le64 dqb_ihardlimit; /* absolute limit on allocated inodes */ __le64 dqb_isoftlimit; /* preferred inode limit */ __le64 dqb_curinodes; /* current # allocated inodes */ __le64 dqb_bhardlimit; /* absolute limit on disk space (in QUOTABLOCK_SIZE) */ __le64 dqb_bsoftlimit; /* preferred limit on disk space (in QUOTABLOCK_SIZE) */ __le64 dqb_curspace; /* current space occupied (in bytes) */ __le64 dqb_btime; /* time limit for excessive disk use */ __le64 dqb_itime; /* time limit for excessive inode use */ }; /* Header with type and version specific information */ struct v2_disk_dqinfo { __le32 dqi_bgrace; /* Time before block soft limit becomes hard limit */ __le32 dqi_igrace; /* Time before inode soft limit becomes hard limit */ __le32 dqi_flags; /* Flags for quotafile (DQF_*) */ __le32 dqi_blocks; /* Number of blocks in file */ __le32 dqi_free_blk; /* Number of first free block in the list */ __le32 dqi_free_entry; /* Number of block with at least one free entry */ }; #define V2_DQINFOOFF sizeof(struct v2_disk_dqheader) /* Offset of info header in file */ #define V2_DQBLKSIZE_BITS 10 /* Size of leaf block in tree */ #endif /* _LINUX_QUOTAIO_V2_H */ dada8fa3'/>
context:
space:
mode:
authorJoonyoung Shim <jy0922.shim@samsung.com>2017-01-17 13:54:36 +0900
committerThomas Gleixner <tglx@linutronix.de>2017-01-17 10:08:38 +0100
commitbc7c36eedb0c7004aa06c2afc3c5385adada8fa3 (patch)
tree14ce1ae3cce8013aa4bc46297f6370ec0527be78
parent49def1853334396f948dcb4cedb9347abb318df5 (diff)
clocksource/exynos_mct: Clear interrupt when cpu is shut down
When a CPU goes offline a potentially pending timer interrupt is not cleared. When the CPU comes online again then the pending interrupt is delivered before the per cpu clockevent device is initialized. As a consequence the tick interrupt handler dereferences a NULL pointer. [ 51.251378] Unable to handle kernel NULL pointer dereference at virtual address 00000040 [ 51.289348] task: ee942d00 task.stack: ee960000 [ 51.293861] PC is at tick_periodic+0x38/0xb0 [ 51.298102] LR is at tick_handle_periodic+0x1c/0x90 Clear the pending interrupt in the cpu dying path. Fixes: 56a94f13919c ("clocksource: exynos_mct: Avoid blocking calls in the cpu hotplug notifier") Reported-by: Seung-Woo Kim <sw0312.kim@samsung.com> Signed-off-by: Joonyoung Shim <jy0922.shim@samsung.com> Cc: linux-samsung-soc@vger.kernel.org Cc: cw00.choi@samsung.com Cc: daniel.lezcano@linaro.org Cc: stable@vger.kernel.org Cc: javier@osg.samsung.com Cc: kgene@kernel.org Cc: krzk@kernel.org Cc: linux-arm-kernel@lists.infradead.org Link: http://lkml.kernel.org/r/1484628876-22065-1-git-send-email-jy0922.shim@samsung.com Signed-off-by: Thomas Gleixner <tglx@linutronix.de>