* [linux-next:master 9533/9538] fs/dax.c:916:5: note: in expansion of macro 'dax_pmd_dbg'
@ 2015-12-31 20:41 kbuild test robot
0 siblings, 0 replies; only message in thread
From: kbuild test robot @ 2015-12-31 20:41 UTC (permalink / raw)
To: Ross Zwisler; +Cc: kbuild-all, Andrew Morton, Linux Memory Management List
[-- Attachment #1: Type: text/plain, Size: 7370 bytes --]
tree: https://git.kernel.org/pub/scm/linux/kernel/git/next/linux-next.git master
head: 719d6c1b9f86112fd9b5771ff009f678c1e00845
commit: 3cb108f941debe7449cb5de6e9898822d341a49c [9533/9538] dax-add-support-for-fsync-sync-v6
config: arm64-allmodconfig (attached as .config)
reproduce:
wget https://git.kernel.org/cgit/linux/kernel/git/wfg/lkp-tests.git/plain/sbin/make.cross -O ~/bin/make.cross
chmod +x ~/bin/make.cross
git checkout 3cb108f941debe7449cb5de6e9898822d341a49c
# save the attached .config to linux build tree
make.cross ARCH=arm64
All warnings (new ones prefixed by >>):
fs/dax.c: In function '__dax_pmd_fault':
fs/dax.c:754:42: warning: passing argument 1 of '__dax_dbg' from incompatible pointer type
#define dax_pmd_dbg(bh, address, reason) __dax_dbg(bh, address, reason, "dax_pmd")
^
>> fs/dax.c:916:5: note: in expansion of macro 'dax_pmd_dbg'
dax_pmd_dbg(bdev, address,
^
fs/dax.c:738:13: note: expected 'struct buffer_head *' but argument is of type 'struct block_device *'
static void __dax_dbg(struct buffer_head *bh, unsigned long address,
^
vim +/dax_pmd_dbg +916 fs/dax.c
748 } else {
749 pr_debug("%s: %s addr: %lx fallback: %s\n", fn,
750 current->comm, address, reason);
751 }
752 }
753
> 754 #define dax_pmd_dbg(bh, address, reason) __dax_dbg(bh, address, reason, "dax_pmd")
755
756 int __dax_pmd_fault(struct vm_area_struct *vma, unsigned long address,
757 pmd_t *pmd, unsigned int flags, get_block_t get_block,
758 dax_iodone_t complete_unwritten)
759 {
760 struct file *file = vma->vm_file;
761 struct address_space *mapping = file->f_mapping;
762 struct inode *inode = mapping->host;
763 struct buffer_head bh;
764 unsigned blkbits = inode->i_blkbits;
765 unsigned long pmd_addr = address & PMD_MASK;
766 bool write = flags & FAULT_FLAG_WRITE;
767 struct block_device *bdev;
768 pgoff_t size, pgoff;
769 sector_t block;
770 int error, result = 0;
771
772 /* dax pmd mappings require pfn_t_devmap() */
773 if (!IS_ENABLED(CONFIG_FS_DAX_PMD))
774 return VM_FAULT_FALLBACK;
775
776 /* Fall back to PTEs if we're going to COW */
777 if (write && !(vma->vm_flags & VM_SHARED)) {
778 split_huge_pmd(vma, pmd, address);
779 dax_pmd_dbg(NULL, address, "cow write");
780 return VM_FAULT_FALLBACK;
781 }
782 /* If the PMD would extend outside the VMA */
783 if (pmd_addr < vma->vm_start) {
784 dax_pmd_dbg(NULL, address, "vma start unaligned");
785 return VM_FAULT_FALLBACK;
786 }
787 if ((pmd_addr + PMD_SIZE) > vma->vm_end) {
788 dax_pmd_dbg(NULL, address, "vma end unaligned");
789 return VM_FAULT_FALLBACK;
790 }
791
792 pgoff = linear_page_index(vma, pmd_addr);
793 size = (i_size_read(inode) + PAGE_SIZE - 1) >> PAGE_SHIFT;
794 if (pgoff >= size)
795 return VM_FAULT_SIGBUS;
796 /* If the PMD would cover blocks out of the file */
797 if ((pgoff | PG_PMD_COLOUR) >= size) {
798 dax_pmd_dbg(NULL, address,
799 "offset + huge page size > file size");
800 return VM_FAULT_FALLBACK;
801 }
802
803 memset(&bh, 0, sizeof(bh));
804 block = (sector_t)pgoff << (PAGE_SHIFT - blkbits);
805
806 bh.b_size = PMD_SIZE;
807 if (get_block(inode, block, &bh, write) != 0)
808 return VM_FAULT_SIGBUS;
809 bdev = bh.b_bdev;
810 i_mmap_lock_read(mapping);
811
812 /*
813 * If the filesystem isn't willing to tell us the length of a hole,
814 * just fall back to PTEs. Calling get_block 512 times in a loop
815 * would be silly.
816 */
817 if (!buffer_size_valid(&bh) || bh.b_size < PMD_SIZE) {
818 dax_pmd_dbg(&bh, address, "allocated block too small");
819 goto fallback;
820 }
821
822 /*
823 * If we allocated new storage, make sure no process has any
824 * zero pages covering this hole
825 */
826 if (buffer_new(&bh)) {
827 i_mmap_unlock_read(mapping);
828 unmap_mapping_range(mapping, pgoff << PAGE_SHIFT, PMD_SIZE, 0);
829 i_mmap_lock_read(mapping);
830 }
831
832 /*
833 * If a truncate happened while we were allocating blocks, we may
834 * leave blocks allocated to the file that are beyond EOF. We can't
835 * take i_mutex here, so just leave them hanging; they'll be freed
836 * when the file is deleted.
837 */
838 size = (i_size_read(inode) + PAGE_SIZE - 1) >> PAGE_SHIFT;
839 if (pgoff >= size) {
840 result = VM_FAULT_SIGBUS;
841 goto out;
842 }
843 if ((pgoff | PG_PMD_COLOUR) >= size) {
844 dax_pmd_dbg(&bh, address, "pgoff unaligned");
845 goto fallback;
846 }
847
848 if (!write && !buffer_mapped(&bh) && buffer_uptodate(&bh)) {
849 spinlock_t *ptl;
850 pmd_t entry;
851 struct page *zero_page = get_huge_zero_page();
852
853 if (unlikely(!zero_page)) {
854 dax_pmd_dbg(&bh, address, "no zero page");
855 goto fallback;
856 }
857
858 ptl = pmd_lock(vma->vm_mm, pmd);
859 if (!pmd_none(*pmd)) {
860 spin_unlock(ptl);
861 dax_pmd_dbg(&bh, address, "pmd already present");
862 goto fallback;
863 }
864
865 dev_dbg(part_to_dev(bdev->bd_part),
866 "%s: %s addr: %lx pfn: <zero> sect: %llx\n",
867 __func__, current->comm, address,
868 (unsigned long long) to_sector(&bh, inode));
869
870 entry = mk_pmd(zero_page, vma->vm_page_prot);
871 entry = pmd_mkhuge(entry);
872 set_pmd_at(vma->vm_mm, pmd_addr, pmd, entry);
873 result = VM_FAULT_NOPAGE;
874 spin_unlock(ptl);
875 } else {
876 struct blk_dax_ctl dax = {
877 .sector = to_sector(&bh, inode),
878 .size = PMD_SIZE,
879 };
880 long length = dax_map_atomic(bdev, &dax);
881
882 if (length < 0) {
883 result = VM_FAULT_SIGBUS;
884 goto out;
885 }
886 if (length < PMD_SIZE) {
887 dax_pmd_dbg(&bh, address, "dax-length too small");
888 dax_unmap_atomic(bdev, &dax);
889 goto fallback;
890 }
891 if (pfn_t_to_pfn(dax.pfn) & PG_PMD_COLOUR) {
892 dax_pmd_dbg(&bh, address, "pfn unaligned");
893 dax_unmap_atomic(bdev, &dax);
894 goto fallback;
895 }
896
897 if (!pfn_t_devmap(dax.pfn)) {
898 dax_unmap_atomic(bdev, &dax);
899 dax_pmd_dbg(&bh, address, "pfn not in memmap");
900 goto fallback;
901 }
902
903 if (buffer_unwritten(&bh) || buffer_new(&bh)) {
904 clear_pmem(dax.addr, PMD_SIZE);
905 wmb_pmem();
906 count_vm_event(PGMAJFAULT);
907 mem_cgroup_count_vm_event(vma->vm_mm, PGMAJFAULT);
908 result |= VM_FAULT_MAJOR;
909 }
910 dax_unmap_atomic(bdev, &dax);
911
912 if (write) {
913 error = dax_radix_entry(mapping, pgoff, dax.sector,
914 true, true);
915 if (error) {
> 916 dax_pmd_dbg(bdev, address,
917 "PMD radix insertion failed");
918 goto fallback;
919 }
---
0-DAY kernel test infrastructure Open Source Technology Center
https://lists.01.org/pipermail/kbuild-all Intel Corporation
[-- Attachment #2: .config.gz --]
[-- Type: application/octet-stream, Size: 47841 bytes --]
^ permalink raw reply [flat|nested] only message in thread
only message in thread, other threads:[~2015-12-31 20:42 UTC | newest]
Thread overview: (only message) (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2015-12-31 20:41 [linux-next:master 9533/9538] fs/dax.c:916:5: note: in expansion of macro 'dax_pmd_dbg' kbuild test robot
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox