Re: [PATCH v2] nfs: add dummy definition for nfsd_file

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On 23/04/2025 at 09:32, NeilBrown wrote:
> On Wed, 23 Apr 2025, Pali Rohár wrote:
>> On Wednesday 23 April 2025 07:54:40 NeilBrown wrote:
>>> On Wed, 23 Apr 2025, Pali Rohár wrote:

(...)

>>> Actually I do object to this fix (though I've been busy and hadn't had
>>> much change to look at it properly).
>>> The fix is ugly.  At the very least it should be wrapping in an 
>>>    #if  GCC_VERSION  < whatever

I acknowledge that the fix is a bit ugly, but Mike is the only one who
has proposed a solution so far.

One other solution would be to directly modify the rcupdate helpers. I
am not sure of rcupdate's internals, but as far as I understand, in C,
attributes or qualifier can be either before or after the type. For
example,

  const char *

is the same as

  char const *

The only thing which matters is to have the qualifier or the attribute
before the * (otherwise, it will apply to the pointed value and not to
the pointer itself).

Below patch solves the build problem:

--- a/include/linux/rcupdate.h
+++ b/include/linux/rcupdate.h
@@ -522,29 +522,29 @@ static inline bool lockdep_assert_rcu_helper(bool c)

#define __rcu_access_pointer(p, local, space) \
({ \
-       typeof(*p) *local = (typeof(*p) *__force)READ_ONCE(p); \
+       typeof(p) local = (__force typeof(p))READ_ONCE(p); \
        rcu_check_sparse(p, space); \
-       ((typeof(*p) __force __kernel *)(local)); \
+       (__force __kernel typeof(p))(local); \
})
#define __rcu_dereference_check(p, local, c, space) \
({ \
        /* Dependency order vs. p above. */ \
-       typeof(*p) *local = (typeof(*p) *__force)READ_ONCE(p); \
+       typeof(p) local = (__force typeof(p))READ_ONCE(p); \
        RCU_LOCKDEP_WARN(!(c), "suspicious rcu_dereference_check() usage"); \
        rcu_check_sparse(p, space); \
-       ((typeof(*p) __force __kernel *)(local)); \
+       (__force __kernel typeof(p))(local);    \
})
#define __rcu_dereference_protected(p, local, c, space) \
({ \
        RCU_LOCKDEP_WARN(!(c), "suspicious rcu_dereference_protected() usage"); \
        rcu_check_sparse(p, space); \
-       ((typeof(*p) __force __kernel *)(p)); \
+       (__force __kernel typeof(p))(p); \
})
#define __rcu_dereference_raw(p, local) \
({ \
        /* Dependency order vs. p above. */ \
        typeof(p) local = READ_ONCE(p); \
-       ((typeof(*p) __force __kernel *)(local)); \
+       (__force __kernel typeof(p))(local); \
})
#define rcu_dereference_raw(p) __rcu_dereference_raw(p, __UNIQUE_ID(rcu))

---

Does the above make more sense? If so, I can formalize it and submit
it.


Yours sincerely,
Vincent Mailhol




[Index of Archives]     [Linux Filesystem Development]     [Linux USB Development]     [Linux Media Development]     [Video for Linux]     [Linux NILFS]     [Linux Audio Users]     [Yosemite Info]     [Linux SCSI]

  Powered by Linux