* [lustre-devel] [PATCH] staging: lustre: Change return type to vm_fault_t
@ 2018-04-21 22:17 Souptick Joarder
2018-04-22 3:20 ` Matthew Wilcox
0 siblings, 1 reply; 6+ messages in thread
From: Souptick Joarder @ 2018-04-21 22:17 UTC (permalink / raw)
To: lustre-devel
Use new return type vm_fault_t for fault handler. For
now, this is just documenting that the function returns
a VM_FAULT value rather than an errno. Once all instances
are converted, vm_fault_t will become a distinct type.
Commit 1c8f422059ae ("mm: change return type to vm_fault_t")
Signed-off-by: Souptick Joarder <jrdr.linux@gmail.com>
---
drivers/staging/lustre/lustre/llite/llite_mmap.c | 29 ++++++++++++------------
1 file changed, 15 insertions(+), 14 deletions(-)
diff --git a/drivers/staging/lustre/lustre/llite/llite_mmap.c b/drivers/staging/lustre/lustre/llite/llite_mmap.c
index c0533bd..6aafe7c 100644
--- a/drivers/staging/lustre/lustre/llite/llite_mmap.c
+++ b/drivers/staging/lustre/lustre/llite/llite_mmap.c
@@ -231,7 +231,7 @@ static int ll_page_mkwrite0(struct vm_area_struct *vma, struct page *vmpage,
return result;
}
-static inline int to_fault_error(int result)
+static inline vm_fault_t to_fault_error(int result)
{
switch (result) {
case 0:
@@ -261,7 +261,7 @@ static inline int to_fault_error(int result)
* \retval VM_FAULT_ERROR on general error
* \retval NOPAGE_OOM not have memory for allocate new page
*/
-static int ll_fault0(struct vm_area_struct *vma, struct vm_fault *vmf)
+static vm_fault_t ll_fault0(struct vm_area_struct *vma, struct vm_fault *vmf)
{
struct lu_env *env;
struct cl_io *io;
@@ -269,7 +269,7 @@ static int ll_fault0(struct vm_area_struct *vma, struct vm_fault *vmf)
struct page *vmpage;
unsigned long ra_flags;
int result = 0;
- int fault_ret = 0;
+ vm_fault_t fault_ret = 0;
u16 refcheck;
env = cl_env_get(&refcheck);
@@ -278,7 +278,7 @@ static int ll_fault0(struct vm_area_struct *vma, struct vm_fault *vmf)
io = ll_fault_io_init(env, vma, vmf->pgoff, &ra_flags);
if (IS_ERR(io)) {
- result = to_fault_error(PTR_ERR(io));
+ fault_ret = to_fault_error(PTR_ERR(io));
goto out;
}
@@ -319,7 +319,7 @@ static int ll_fault0(struct vm_area_struct *vma, struct vm_fault *vmf)
if (result != 0 && !(fault_ret & VM_FAULT_RETRY))
fault_ret |= to_fault_error(result);
- CDEBUG(D_MMAP, "%s fault %d/%d\n", current->comm, fault_ret, result);
+ CDEBUG(D_MMAP, "%s fault %x/%d\n", current->comm, fault_ret, result);
return fault_ret;
}
@@ -327,7 +327,7 @@ static int ll_fault(struct vm_fault *vmf)
{
int count = 0;
bool printed = false;
- int result;
+ vm_fault_t result;
sigset_t set;
/* Only SIGKILL and SIGTERM are allowed for fault/nopage/mkwrite
@@ -370,12 +370,13 @@ static int ll_page_mkwrite(struct vm_fault *vmf)
int count = 0;
bool printed = false;
bool retry;
- int result;
+ int err;
+ vm_fault_t ret;
file_update_time(vma->vm_file);
do {
retry = false;
- result = ll_page_mkwrite0(vma, vmf->page, &retry);
+ err = ll_page_mkwrite0(vma, vmf->page, &retry);
if (!printed && ++count > 16) {
const struct dentry *de = vma->vm_file->f_path.dentry;
@@ -387,25 +388,25 @@ static int ll_page_mkwrite(struct vm_fault *vmf)
}
} while (retry);
- switch (result) {
+ switch (err) {
case 0:
LASSERT(PageLocked(vmf->page));
- result = VM_FAULT_LOCKED;
+ ret = VM_FAULT_LOCKED;
break;
case -ENODATA:
case -EAGAIN:
case -EFAULT:
- result = VM_FAULT_NOPAGE;
+ ret = VM_FAULT_NOPAGE;
break;
case -ENOMEM:
- result = VM_FAULT_OOM;
+ ret = VM_FAULT_OOM;
break;
default:
- result = VM_FAULT_SIGBUS;
+ ret = VM_FAULT_SIGBUS;
break;
}
- return result;
+ return ret;
}
/**
--
1.9.1
^ permalink raw reply related [flat|nested] 6+ messages in thread
* [lustre-devel] [PATCH] staging: lustre: Change return type to vm_fault_t
2018-04-21 22:17 [lustre-devel] [PATCH] staging: lustre: Change return type to vm_fault_t Souptick Joarder
@ 2018-04-22 3:20 ` Matthew Wilcox
2018-04-23 16:42 ` Souptick Joarder
0 siblings, 1 reply; 6+ messages in thread
From: Matthew Wilcox @ 2018-04-22 3:20 UTC (permalink / raw)
To: lustre-devel
On Sun, Apr 22, 2018 at 03:47:24AM +0530, Souptick Joarder wrote:
> @@ -261,7 +261,7 @@ static inline int to_fault_error(int result)
> * \retval VM_FAULT_ERROR on general error
> * \retval NOPAGE_OOM not have memory for allocate new page
> */
> -static int ll_fault0(struct vm_area_struct *vma, struct vm_fault *vmf)
> +static vm_fault_t ll_fault0(struct vm_area_struct *vma, struct vm_fault *vmf)
> {
> struct lu_env *env;
> struct cl_io *io;
Did you compile-test this with the sparse changes? Because I can see
a problem here:
env = cl_env_get(&refcheck);
if (IS_ERR(env))
return PTR_ERR(env);
> @@ -269,7 +269,7 @@ static int ll_fault0(struct vm_area_struct *vma, struct vm_fault *vmf)
> struct page *vmpage;
> unsigned long ra_flags;
> int result = 0;
> - int fault_ret = 0;
> + vm_fault_t fault_ret = 0;
What odd indentation ...
^ permalink raw reply [flat|nested] 6+ messages in thread
* [lustre-devel] [PATCH] staging: lustre: Change return type to vm_fault_t
2018-04-22 3:20 ` Matthew Wilcox
@ 2018-04-23 16:42 ` Souptick Joarder
2018-04-23 17:35 ` Matthew Wilcox
0 siblings, 1 reply; 6+ messages in thread
From: Souptick Joarder @ 2018-04-23 16:42 UTC (permalink / raw)
To: lustre-devel
On Sun, Apr 22, 2018 at 8:50 AM, Matthew Wilcox <willy@infradead.org> wrote:
> On Sun, Apr 22, 2018 at 03:47:24AM +0530, Souptick Joarder wrote:
>> @@ -261,7 +261,7 @@ static inline int to_fault_error(int result)
>> * \retval VM_FAULT_ERROR on general error
>> * \retval NOPAGE_OOM not have memory for allocate new page
>> */
>> -static int ll_fault0(struct vm_area_struct *vma, struct vm_fault *vmf)
>> +static vm_fault_t ll_fault0(struct vm_area_struct *vma, struct vm_fault *vmf)
>> {
>> struct lu_env *env;
>> struct cl_io *io;
>
> Did you compile-test this with the sparse changes? Because I can see
> a problem here:
Yes, compile-tested. Sparse didn't throw any warning/error.
>
> env = cl_env_get(&refcheck);
> if (IS_ERR(env))
> return PTR_ERR(env);
>
>> @@ -269,7 +269,7 @@ static int ll_fault0(struct vm_area_struct *vma, struct vm_fault *vmf)
>> struct page *vmpage;
>> unsigned long ra_flags;
>> int result = 0;
>> - int fault_ret = 0;
>> + vm_fault_t fault_ret = 0;
>
> What odd indentation ...
Sorry, will correct it.
>
^ permalink raw reply [flat|nested] 6+ messages in thread
* [lustre-devel] [PATCH] staging: lustre: Change return type to vm_fault_t
2018-04-23 16:42 ` Souptick Joarder
@ 2018-04-23 17:35 ` Matthew Wilcox
2018-04-23 18:08 ` Souptick Joarder
0 siblings, 1 reply; 6+ messages in thread
From: Matthew Wilcox @ 2018-04-23 17:35 UTC (permalink / raw)
To: lustre-devel
On Mon, Apr 23, 2018 at 10:12:30PM +0530, Souptick Joarder wrote:
> On Sun, Apr 22, 2018 at 8:50 AM, Matthew Wilcox <willy@infradead.org> wrote:
> > On Sun, Apr 22, 2018 at 03:47:24AM +0530, Souptick Joarder wrote:
> >> @@ -261,7 +261,7 @@ static inline int to_fault_error(int result)
> >> * \retval VM_FAULT_ERROR on general error
> >> * \retval NOPAGE_OOM not have memory for allocate new page
> >> */
> >> -static int ll_fault0(struct vm_area_struct *vma, struct vm_fault *vmf)
> >> +static vm_fault_t ll_fault0(struct vm_area_struct *vma, struct vm_fault *vmf)
> >> {
> >> struct lu_env *env;
> >> struct cl_io *io;
> >
> > Did you compile-test this with the sparse changes? Because I can see
> > a problem here:
>
> Yes, compile-tested. Sparse didn't throw any warning/error.
I think you need to check your setup ... I get this:
drivers/staging/lustre/lustre/llite/llite_mmap.c:277:31: warning: incorrect type in return expression (different base types)
drivers/staging/lustre/lustre/llite/llite_mmap.c:277:31: expected restricted vm_fault_t
drivers/staging/lustre/lustre/llite/llite_mmap.c:277:31: got long
^ permalink raw reply [flat|nested] 6+ messages in thread
* [lustre-devel] [PATCH] staging: lustre: Change return type to vm_fault_t
2018-04-23 17:35 ` Matthew Wilcox
@ 2018-04-23 18:08 ` Souptick Joarder
2018-04-23 19:15 ` Matthew Wilcox
0 siblings, 1 reply; 6+ messages in thread
From: Souptick Joarder @ 2018-04-23 18:08 UTC (permalink / raw)
To: lustre-devel
On Mon, Apr 23, 2018 at 11:05 PM, Matthew Wilcox <willy@infradead.org> wrote:
> On Mon, Apr 23, 2018 at 10:12:30PM +0530, Souptick Joarder wrote:
>> On Sun, Apr 22, 2018 at 8:50 AM, Matthew Wilcox <willy@infradead.org> wrote:
>> > On Sun, Apr 22, 2018 at 03:47:24AM +0530, Souptick Joarder wrote:
>> >> @@ -261,7 +261,7 @@ static inline int to_fault_error(int result)
>> >> * \retval VM_FAULT_ERROR on general error
>> >> * \retval NOPAGE_OOM not have memory for allocate new page
>> >> */
>> >> -static int ll_fault0(struct vm_area_struct *vma, struct vm_fault *vmf)
>> >> +static vm_fault_t ll_fault0(struct vm_area_struct *vma, struct vm_fault *vmf)
>> >> {
>> >> struct lu_env *env;
>> >> struct cl_io *io;
>> >
>> > Did you compile-test this with the sparse changes? Because I can see
>> > a problem here:
>>
>> Yes, compile-tested. Sparse didn't throw any warning/error.
>
> I think you need to check your setup ... I get this:
>
> drivers/staging/lustre/lustre/llite/llite_mmap.c:277:31: warning: incorrect type in return expression (different base types)
> drivers/staging/lustre/lustre/llite/llite_mmap.c:277:31: expected restricted vm_fault_t
> drivers/staging/lustre/lustre/llite/llite_mmap.c:277:31: got long
What I am trying is -
after applying the patch in 4.17-rc1, enable the configuration
for this driver and do "make c=1/2 -j8"
Let me verify again.
^ permalink raw reply [flat|nested] 6+ messages in thread
* [lustre-devel] [PATCH] staging: lustre: Change return type to vm_fault_t
2018-04-23 18:08 ` Souptick Joarder
@ 2018-04-23 19:15 ` Matthew Wilcox
0 siblings, 0 replies; 6+ messages in thread
From: Matthew Wilcox @ 2018-04-23 19:15 UTC (permalink / raw)
To: lustre-devel
On Mon, Apr 23, 2018 at 11:38:17PM +0530, Souptick Joarder wrote:
> On Mon, Apr 23, 2018 at 11:05 PM, Matthew Wilcox <willy@infradead.org> wrote:
> > I think you need to check your setup ... I get this:
> >
> > drivers/staging/lustre/lustre/llite/llite_mmap.c:277:31: warning: incorrect type in return expression (different base types)
> > drivers/staging/lustre/lustre/llite/llite_mmap.c:277:31: expected restricted vm_fault_t
> > drivers/staging/lustre/lustre/llite/llite_mmap.c:277:31: got long
>
> What I am trying is -
> after applying the patch in 4.17-rc1, enable the configuration
> for this driver and do "make c=1/2 -j8"
>
> Let me verify again.
Yep, but you need to add the sparse annotations to make vm_fault_t a
separate type. In case you've lost that patch ...
diff --git a/include/linux/mm.h b/include/linux/mm.h
index ad06d42adb1a..9ac6d2eb633f 100644
--- a/include/linux/mm.h
+++ b/include/linux/mm.h
@@ -1174,52 +1175,6 @@ static inline void clear_page_pfmemalloc(struct page *page)
page->index = 0;
}
-/*
- * Different kinds of faults, as returned by handle_mm_fault().
- * Used to decide whether a process gets delivered SIGBUS or
- * just gets major/minor fault counters bumped up.
- */
-
-#define VM_FAULT_OOM 0x0001
-#define VM_FAULT_SIGBUS 0x0002
-#define VM_FAULT_MAJOR 0x0004
-#define VM_FAULT_WRITE 0x0008 /* Special case for get_user_pages */
-#define VM_FAULT_HWPOISON 0x0010 /* Hit poisoned small page */
-#define VM_FAULT_HWPOISON_LARGE 0x0020 /* Hit poisoned large page. Index encoded in upper bits */
-#define VM_FAULT_SIGSEGV 0x0040
-
-#define VM_FAULT_NOPAGE 0x0100 /* ->fault installed the pte, not return page */
-#define VM_FAULT_LOCKED 0x0200 /* ->fault locked the returned page */
-#define VM_FAULT_RETRY 0x0400 /* ->fault blocked, must retry */
-#define VM_FAULT_FALLBACK 0x0800 /* huge page fault failed, fall back to small */
-#define VM_FAULT_DONE_COW 0x1000 /* ->fault has fully handled COW */
-#define VM_FAULT_NEEDDSYNC 0x2000 /* ->fault did not modify page tables
- * and needs fsync() to complete (for
- * synchronous page faults in DAX) */
-
-#define VM_FAULT_ERROR (VM_FAULT_OOM | VM_FAULT_SIGBUS | VM_FAULT_SIGSEGV | \
- VM_FAULT_HWPOISON | VM_FAULT_HWPOISON_LARGE | \
- VM_FAULT_FALLBACK)
-
-#define VM_FAULT_RESULT_TRACE \
- { VM_FAULT_OOM, "OOM" }, \
- { VM_FAULT_SIGBUS, "SIGBUS" }, \
- { VM_FAULT_MAJOR, "MAJOR" }, \
- { VM_FAULT_WRITE, "WRITE" }, \
- { VM_FAULT_HWPOISON, "HWPOISON" }, \
- { VM_FAULT_HWPOISON_LARGE, "HWPOISON_LARGE" }, \
- { VM_FAULT_SIGSEGV, "SIGSEGV" }, \
- { VM_FAULT_NOPAGE, "NOPAGE" }, \
- { VM_FAULT_LOCKED, "LOCKED" }, \
- { VM_FAULT_RETRY, "RETRY" }, \
- { VM_FAULT_FALLBACK, "FALLBACK" }, \
- { VM_FAULT_DONE_COW, "DONE_COW" }, \
- { VM_FAULT_NEEDDSYNC, "NEEDDSYNC" }
-
-/* Encode hstate index for a hwpoisoned large page */
-#define VM_FAULT_SET_HINDEX(x) ((x) << 12)
-#define VM_FAULT_GET_HINDEX(x) (((x) >> 12) & 0xf)
-
/*
* Can be called by the pagefault handler when it gets a VM_FAULT_OOM.
*/
diff --git a/include/linux/mm_types.h b/include/linux/mm_types.h
index fd1af6b9591d..5265f425fe88 100644
--- a/include/linux/mm_types.h
+++ b/include/linux/mm_types.h
@@ -610,6 +610,54 @@ static inline bool mm_tlb_flush_nested(struct mm_struct *mm)
struct vm_fault;
+/*
+ * Different kinds of faults, as returned from fault handlers.
+ * Used to decide whether a process gets delivered SIGBUS or
+ * just gets major/minor fault counters bumped up.
+ */
+typedef __bitwise unsigned int vm_fault_t;
+enum {
+ VM_FAULT_OOM = (__force vm_fault_t)0x000001, /* Out Of Memory */
+ VM_FAULT_SIGBUS = (__force vm_fault_t)0x000002, /* Bad access */
+ VM_FAULT_MAJOR = (__force vm_fault_t)0x000004, /* Page read from storage */
+ VM_FAULT_WRITE = (__force vm_fault_t)0x000008, /* Special case for get_user_pages */
+ VM_FAULT_HWPOISON = (__force vm_fault_t)0x000010, /* Hit poisoned small page */
+ VM_FAULT_HWPOISON_LARGE = (__force vm_fault_t)0x000020, /* Hit poisoned large page. Index encoded in upper bits */
+ VM_FAULT_SIGSEGV = (__force vm_fault_t)0x000040,
+ VM_FAULT_NOPAGE = (__force vm_fault_t)0x000100, /* ->fault installed the pte, not return page */
+ VM_FAULT_LOCKED = (__force vm_fault_t)0x000200, /* ->fault locked the returned page */
+ VM_FAULT_RETRY = (__force vm_fault_t)0x000400, /* ->fault blocked, must retry */
+ VM_FAULT_FALLBACK = (__force vm_fault_t)0x000800, /* huge page fault failed, fall back to small */
+ VM_FAULT_DONE_COW = (__force vm_fault_t)0x001000, /* ->fault has fully handled COW */
+ VM_FAULT_NEEDDSYNC = (__force vm_fault_t)0x002000, /* ->fault did not modify page tables
+ * and needs fsync() to complete (for
+ * synchronous page faults in DAX) */
+ VM_FAULT_HINDEX_MASK = (__force vm_fault_t)0x0f0000,
+};
+
+/* Encode hstate index for a hwpoisoned large page */
+#define VM_FAULT_SET_HINDEX(x) ((x) << 16)
+#define VM_FAULT_GET_HINDEX(x) (((x) >> 16) & 0xf)
+
+#define VM_FAULT_ERROR (VM_FAULT_OOM | VM_FAULT_SIGBUS | VM_FAULT_SIGSEGV | \
+ VM_FAULT_HWPOISON | VM_FAULT_HWPOISON_LARGE | \
+ VM_FAULT_FALLBACK)
+
+#define VM_FAULT_RESULT_TRACE \
+ { VM_FAULT_OOM, "OOM" }, \
+ { VM_FAULT_SIGBUS, "SIGBUS" }, \
+ { VM_FAULT_MAJOR, "MAJOR" }, \
+ { VM_FAULT_WRITE, "WRITE" }, \
+ { VM_FAULT_HWPOISON, "HWPOISON" }, \
+ { VM_FAULT_HWPOISON_LARGE, "HWPOISON_LARGE" }, \
+ { VM_FAULT_SIGSEGV, "SIGSEGV" }, \
+ { VM_FAULT_NOPAGE, "NOPAGE" }, \
+ { VM_FAULT_LOCKED, "LOCKED" }, \
+ { VM_FAULT_RETRY, "RETRY" }, \
+ { VM_FAULT_FALLBACK, "FALLBACK" }, \
+ { VM_FAULT_DONE_COW, "DONE_COW" }, \
+ { VM_FAULT_NEEDDSYNC, "NEEDDSYNC" }
+
struct vm_special_mapping {
const char *name; /* The name, e.g. "[vdso]". */
^ permalink raw reply related [flat|nested] 6+ messages in thread
end of thread, other threads:[~2018-04-23 19:15 UTC | newest]
Thread overview: 6+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2018-04-21 22:17 [lustre-devel] [PATCH] staging: lustre: Change return type to vm_fault_t Souptick Joarder
2018-04-22 3:20 ` Matthew Wilcox
2018-04-23 16:42 ` Souptick Joarder
2018-04-23 17:35 ` Matthew Wilcox
2018-04-23 18:08 ` Souptick Joarder
2018-04-23 19:15 ` Matthew Wilcox
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.