#define KSMBD_SHARE_INVALID_UID        ((__u16)-1)
 #define KSMBD_SHARE_INVALID_GID        ((__u16)-1)
 
-static inline int share_config_create_mode(struct ksmbd_share_config *share,
-                                          umode_t posix_mode)
+static inline umode_t
+share_config_create_mode(struct ksmbd_share_config *share,
+                        umode_t posix_mode)
 {
-       if (!share->force_create_mode) {
-               if (!posix_mode)
-                       return share->create_mask;
-               else
-                       return posix_mode & share->create_mask;
-       }
-       return share->force_create_mode & share->create_mask;
+       umode_t mode = (posix_mode ?: (umode_t)-1) & share->create_mask;
+
+       return mode | share->force_create_mode;
 }
 
-static inline int share_config_directory_mode(struct ksmbd_share_config *share,
-                                             umode_t posix_mode)
+static inline umode_t
+share_config_directory_mode(struct ksmbd_share_config *share,
+                           umode_t posix_mode)
 {
-       if (!share->force_directory_mode) {
-               if (!posix_mode)
-                       return share->directory_mask;
-               else
-                       return posix_mode & share->directory_mask;
-       }
+       umode_t mode = (posix_mode ?: (umode_t)-1) & share->directory_mask;
 
-       return share->force_directory_mode & share->directory_mask;
+       return mode | share->force_directory_mode;
 }
 
 static inline int test_share_config_flag(struct ksmbd_share_config *share,