Re: [PATCH] Staging: dgnc: Fix long line coding style issues in dgnc_cls.h

2014-12-03 Thread Valdis . Kletnieks
On Wed, 03 Dec 2014 17:07:28 +, Sean Cleator said:
 A patch to fix the rest of the long line warnings in the dgnc_cls.h file
 found by the checkpatch.pl tool

  struct cls_uart_struct {
   u8 txrx;/* WR  RHR/THR - Holding Reg */
   u8 ier; /* WR  IER - Interrupt Enable Reg */
 - u8 isr_fcr; /* WR  ISR/FCR - Interrupt Status Reg/Fifo 
 Control Reg */
 + u8 isr_fcr; /*
 +  * WR  ISR/FCR - Interrupt Status Reg/Fifo
 +  * Control Reg
 +  */
   u8 lcr; /* WR  LCR - Line Control Reg */
   u8 mcr; /* WR  MCR - Modem Control Reg */
   u8 lsr; /* WR  LSR - Line Status Reg */

It may shut up the warning, but is this really an improvement?


pgp5MVOkyQD0L.pgp
Description: PGP signature
___
devel mailing list
de...@linuxdriverproject.org
http://driverdev.linuxdriverproject.org/mailman/listinfo/driverdev-devel


Re: [PATCH 89/94] Linux 3.16-rc5

2014-07-15 Thread Valdis . Kletnieks
On Tue, 15 Jul 2014 20:01:44 +0300, Sam Asadi said:
 From: Linus Torvalds torva...@linux-foundation.org


 Signed-off-by: sam-the-6 asadi.sam...@gmail.com
 ---
  Makefile |2 +-
  1 file changed, 1 insertion(+), 1 deletion(-)

 diff --git a/Makefile b/Makefile
 index 2167084..f3c543d 100644
 --- a/Makefile
 +++ b/Makefile
 @@ -1,7 +1,7 @@
  VERSION = 3
  PATCHLEVEL = 16
  SUBLEVEL = 0
 -EXTRAVERSION = -rc4
 +EXTRAVERSION = -rc5
  NAME = Shuffling Zombie Juror

Moral of the story - always test send a stream of patches to yourself
first :)



pgppzGQlLBUR1.pgp
Description: PGP signature
___
devel mailing list
de...@linuxdriverproject.org
http://driverdev.linuxdriverproject.org/mailman/listinfo/driverdev-devel


[PATCH] staging/rtl8192u - check for skb alloc failure

2014-09-08 Thread Valdis Kletnieks
It's possible for dev_alloc_skb() to fail. Propagate the error to the caller,
so it can clean up and drop the packet. The sender should end up retransmitting
the packet, hopefully at a time we're prepared to allocate skb's again.

Reported-By: Nicholas Krause xerofo...@gmail.com
Signed-Off-By: Valdis Kletnieks valdis.kletni...@vt.edu

--- a/drivers/staging/rtl8192u/ieee80211/ieee80211_rx.c 2014-09-05 
15:51:00.005660044 -0400
+++ b/drivers/staging/rtl8192u/ieee80211/ieee80211_rx.c 2014-09-08 
17:42:16.773748142 -0400
@@ -847,6 +847,8 @@ static u8 parse_subframe(struct sk_buff
 #else
/* Allocate new skb for releasing to upper layer */
sub_skb = dev_alloc_skb(nSubframe_Length + 12);
+   if (!sub_skb)
+   return 0;
skb_reserve(sub_skb, 12);
data_ptr = (u8 *)skb_put(sub_skb, nSubframe_Length);
memcpy(data_ptr, skb-data, nSubframe_Length);


___
devel mailing list
de...@linuxdriverproject.org
http://driverdev.linuxdriverproject.org/mailman/listinfo/driverdev-devel


Re: [PATCH] staging: media: lirc: lirc_zilog: Fix for possible null pointer dereference

2015-01-29 Thread Valdis . Kletnieks
On Thu, 29 Jan 2015 19:48:08 +0100, Rickard Strandqvist said:
 Fix a possible null pointer dereference, there is
 otherwise a risk of a possible null pointer dereference.

 This was found using a static code analysis program called cppcheck

 Signed-off-by: Rickard Strandqvist rickard_strandqv...@spectrumdigital.se
 ---
  drivers/staging/media/lirc/lirc_zilog.c |4 +---
  1 file changed, 1 insertion(+), 3 deletions(-)

   /* find our IR struct */
   struct IR *ir = filep-private_data;

 - if (ir == NULL) {
 - dev_err(ir-l.dev, close: no private_data attached to the 
 file!\n);

Yes, the dev_err() call is an obvious thinko.

However, I'm not sure whether removing it entirely is right either.  If
there *should* be a struct IR * passed there, maybe some other printk()
should be issued, or even a WARN_ON(!ir), or something?


pgpVPFpeMF6Av.pgp
Description: PGP signature
___
devel mailing list
de...@linuxdriverproject.org
http://driverdev.linuxdriverproject.org/mailman/listinfo/driverdev-devel


Re: [PATCH] staging: media: lirc: lirc_zilog: Fix for possible null pointer dereference

2015-01-30 Thread Valdis . Kletnieks
On Fri, 30 Jan 2015 16:00:02 +0300, Dan Carpenter said:

   - if (ir == NULL) {
   - dev_err(ir-l.dev, close: no private_data attached to the file
!\n);
 
  Yes, the dev_err() call is an obvious thinko.
 
  However, I'm not sure whether removing it entirely is right either.  If
  there *should* be a struct IR * passed there, maybe some other printk()
  should be issued, or even a WARN_ON(!ir), or something?

 We set filep-private_data to non-NULL in open() so I don't think it can
 be NULL here.

Then probably the *right* fix is to remove the *entire* if statement, as
we can't end up doing the 'return -ENODEV'


pgp7tr5UMVJa1.pgp
Description: PGP signature
___
devel mailing list
de...@linuxdriverproject.org
http://driverdev.linuxdriverproject.org/mailman/listinfo/driverdev-devel


Re: [PATCH] staging: dgnc: Replace macro with flow control statement by a function

2015-07-06 Thread Valdis . Kletnieks
On Mon, 06 Jul 2015 18:50:12 +0530, Ravi Teja Darbha said:
 Why would you use a macro to avoid code duplication?

The macro does end up putting code in each place it's used.
However, the actual code is in one place rather than open-coded
in multiple places that can diverge over time (somebody patching 2 of
3 instances, and missing 1, for example).


pgphviufHeQGQ.pgp
Description: PGP signature
___
devel mailing list
de...@linuxdriverproject.org
http://driverdev.linuxdriverproject.org/mailman/listinfo/driverdev-devel


Re: [PATCH] Warnings : Fixed 80 character length warning in rtw_ap.c

2015-07-07 Thread Valdis . Kletnieks
On Mon, 06 Jul 2015 21:53:26 -0400, Sreenath Madasu said:
 When the checkpatch.pl script was run, it showed lines with length
 more than 80 characters in rtw_ap.c file. Fixed line number 382 by
 breaking it up into two lines within 80 characters.


 - stainfo_offset = rtw_stainfo_offset(pstapriv, 
 psta);
 + stainfo_offset =
 + rtw_stainfo_offset(pstapriv, psta);
   if (stainfo_offset_valid(stainfo_offset))
   chk_alive_list[chk_alive_num++] = 
 stainfo_offset;

Umm... Sreenath?

There's 97 more occurrences of the same problem in that file.

All:  Is it time to kill that checkpatch test, or hide it behind a non-default
flag, to prevent code churn?



pgp_b5RCqkCz8.pgp
Description: PGP signature
___
devel mailing list
de...@linuxdriverproject.org
http://driverdev.linuxdriverproject.org/mailman/listinfo/driverdev-devel


Re: [PATCH] Warnings : Fixed 80 character length warning in rtw_ap.c

2015-07-07 Thread Valdis . Kletnieks
On Tue, 07 Jul 2015 21:08:10 -0400, Sreenath Madasu said:
 The kernelnewbies.org guide said For your first patch, only pick one
 warning. That is the reason why I fixed one warning.

They mean don't fix lines over 80 characters *and* missing-blank
warnings in the same patch.


pgpoBhFQVf2aM.pgp
Description: PGP signature
___
devel mailing list
de...@linuxdriverproject.org
http://driverdev.linuxdriverproject.org/mailman/listinfo/driverdev-devel


Re: [PATCH] Warnings : Fixed 80 character length warning in rtw_ap.c

2015-07-07 Thread Valdis . Kletnieks
On Tue, 07 Jul 2015 13:38:47 -0700, Joe Perches said:

 The longest line in this file is 158 chars, that's
 probably excessive,  awk shows 35 lines  80 chars.

That doesn't count tabs. Checkpatch throws 98 warnings.


pgpyA7aIF0_ni.pgp
Description: PGP signature
___
devel mailing list
de...@linuxdriverproject.org
http://driverdev.linuxdriverproject.org/mailman/listinfo/driverdev-devel


[PATCH v2 4/6] Fix another C compiler whine: set but not used

2015-12-11 Thread Valdis Kletnieks
  CC [M]  drivers/staging/lustre/lustre/libcfs/module.o
drivers/staging/lustre/lustre/libcfs/module.c: In function 
'lustre_insert_debugfs':
drivers/staging/lustre/lustre/libcfs/module.c:670:17: warning: variable 'entry' 
set but not used [-Wunused-but-set-variable]
  struct dentry *entry;
 ^

Just ignore the dentry returned, and add a comment that we *know*
we're not really leaking the dentry because something else will be able
to reap it via recursion.

Signed-off-by: Valdis Kletnieks <valdis.kletni...@vt.edu>
---
 drivers/staging/lustre/lustre/libcfs/module.c | 15 +++
 1 file changed, 7 insertions(+), 8 deletions(-)

diff --git a/drivers/staging/lustre/lustre/libcfs/module.c 
b/drivers/staging/lustre/lustre/libcfs/module.c
index 96d9d4651a51..4438dc426b54 100644
--- a/drivers/staging/lustre/lustre/libcfs/module.c
+++ b/drivers/staging/lustre/lustre/libcfs/module.c
@@ -667,8 +667,6 @@ static const struct file_operations 
lnet_debugfs_file_operations = {
 void lustre_insert_debugfs(struct ctl_table *table,
   const struct lnet_debugfs_symlink_def *symlinks)
 {
-   struct dentry *entry;
-
if (lnet_debugfs_root == NULL)
lnet_debugfs_root = debugfs_create_dir("lnet", NULL);
 
@@ -676,15 +674,17 @@ void lustre_insert_debugfs(struct ctl_table *table,
if (IS_ERR_OR_NULL(lnet_debugfs_root))
return;
 
+   /* We don't save the dentry returned in next two calls, because
+* we don't call debugfs_remove() but rather remove_recursive()
+*/
for (; table->procname; table++)
-   entry = debugfs_create_file(table->procname, table->mode,
-   lnet_debugfs_root, table,
-   _debugfs_file_operations);
+   debugfs_create_file(table->procname, table->mode,
+   lnet_debugfs_root, table,
+   _debugfs_file_operations);
 
for (; symlinks && symlinks->name; symlinks++)
-   entry = debugfs_create_symlink(symlinks->name,
-  lnet_debugfs_root,
-  symlinks->target);
+   debugfs_create_symlink(symlinks->name, lnet_debugfs_root,
+  symlinks->target);
 
 }
 EXPORT_SYMBOL_GPL(lustre_insert_debugfs);
-- 
2.6.3

___
devel mailing list
de...@linuxdriverproject.org
http://driverdev.linuxdriverproject.org/mailman/listinfo/driverdev-devel


[PATCH v2 2/6] Fix set-but-unused whinge.

2015-12-11 Thread Valdis Kletnieks
drivers/staging/lustre/lustre/fid/lproc_fid.c: In function 
'ldebugfs_fid_write_common':
drivers/staging/lustre/lustre/fid/lproc_fid.c:67:6: warning: variable 'rc' set 
but not used [-Wunused-but-set-variable]
  int rc;

We fix it by *using* the return code to help bulletproof it.  It says it's
test code - it should be *more* bulletproof than production, not less.

Signed-off-by: Valdis Kletnieks <valdis.kletni...@vt.edu>
---
 drivers/staging/lustre/lustre/fid/lproc_fid.c | 1 +
 1 file changed, 1 insertion(+)

diff --git a/drivers/staging/lustre/lustre/fid/lproc_fid.c 
b/drivers/staging/lustre/lustre/fid/lproc_fid.c
index ce90c1c54a63..eff011f30fa5 100644
--- a/drivers/staging/lustre/lustre/fid/lproc_fid.c
+++ b/drivers/staging/lustre/lustre/fid/lproc_fid.c
@@ -85,6 +85,8 @@ ldebugfs_fid_write_common(const char __user *buffer, size_t 
count,
rc = sscanf(kernbuf, "[%llx - %llx]\n",
(unsigned long long *)_start,
(unsigned long long *)_end);
+   if (rc != 2)
+   return -EINVAL;
if (!range_is_sane() || range_is_zero() ||
tmp.lsr_start < range->lsr_start || tmp.lsr_end > range->lsr_end)
return -EINVAL;
-- 
2.6.3

___
devel mailing list
de...@linuxdriverproject.org
http://driverdev.linuxdriverproject.org/mailman/listinfo/driverdev-devel


[PATCH v2 5/6] Nuke an unsigned >= 0 assert

2015-12-11 Thread Valdis Kletnieks
Writing asserts for almost-never-can-happen things can be valuable.
Writing an assert that tests that an "unsigned int" hasn't gone negative
isn't.

And it generates an *ugly* message:

drivers/staging/lustre/lustre/llite/rw.c:763:20: warning: comparison of 
unsigned expression >= 0 is always true [-Wtype-limits]
  LASSERTF(reserved >= 0, "reserved %lu\n", reserved);
^
include/linux/compiler.h:137:45: note: in definition of macro 'unlikely'
 #  define unlikely(x) (__builtin_constant_p(x) ? !!(x) : __branch_check__(x, 
0))
 ^
drivers/staging/lustre/lustre/llite/rw.c:763:2: note: in expansion of macro 
'LASSERTF'
  LASSERTF(reserved >= 0, "reserved %lu\n", reserved);
  ^
drivers/staging/lustre/lustre/llite/rw.c:763:20: warning: comparison of 
unsigned expression >= 0 is always true [-Wtype-limits]
  LASSERTF(reserved >= 0, "reserved %lu\n", reserved);
^
include/linux/compiler.h:137:53: note: in definition of macro 'unlikely'
 #  define unlikely(x) (__builtin_constant_p(x) ? !!(x) : __branch_check__(x, 
0))
 ^
drivers/staging/lustre/lustre/llite/rw.c:763:2: note: in expansion of macro 
'LASSERTF'
  LASSERTF(reserved >= 0, "reserved %lu\n", reserved);
  ^
drivers/staging/lustre/lustre/llite/rw.c:763:20: warning: comparison of 
unsigned expression >= 0 is always true [-Wtype-limits]
  LASSERTF(reserved >= 0, "reserved %lu\n", reserved);
^
include/linux/compiler.h:110:47: note: in definition of macro 'likely_notrace'
 #define likely_notrace(x) __builtin_expect(!!(x), 1)
   ^
include/linux/compiler.h:137:58: note: in expansion of macro '__branch_check__'
 #  define unlikely(x) (__builtin_constant_p(x) ? !!(x) : __branch_check__(x, 
0))
  ^
drivers/staging/lustre/lustre/llite/../include/linux/../../../include/linux/libcfs/libcfs_private.h:58:6:
 note: in expansion of macro 'unlikely'
  if (unlikely(!(cond))) { \
  ^
drivers/staging/lustre/lustre/llite/rw.c:763:2: note: in expansion of macro 
'LASSERTF'
  LASSERTF(reserved >= 0, "reserved %lu\n", reserved);
  ^

Umm, thank you, GCC.  We'll delete the problem line so we never see that spew 
again.

Signed-off-by: Valdis Kletnieks <valdis.kletni...@vt.edu>
---
 drivers/staging/lustre/lustre/llite/rw.c | 1 -
 1 file changed, 1 deletion(-)

diff --git a/drivers/staging/lustre/lustre/llite/rw.c 
b/drivers/staging/lustre/lustre/llite/rw.c
index f79193fa2fb7..39390aab9da2 100644
--- a/drivers/staging/lustre/lustre/llite/rw.c
+++ b/drivers/staging/lustre/lustre/llite/rw.c
@@ -764,7 +764,6 @@ int ll_readahead(const struct lu_env *env, struct cl_io *io,
ret = ll_read_ahead_pages(env, io, queue,
  ria, , mapping, _end);
 
-   LASSERTF(reserved >= 0, "reserved %lu\n", reserved);
if (reserved != 0)
ll_ra_count_put(ll_i2sbi(inode), reserved);
 
-- 
2.6.3

___
devel mailing list
de...@linuxdriverproject.org
http://driverdev.linuxdriverproject.org/mailman/listinfo/driverdev-devel


[PATCH v2 1/6] staging/lustre: Silence warning about 'inline'

2015-12-11 Thread Valdis Kletnieks
Low-hanging fruit first:

  CC [M]  drivers/staging/lustre/lustre/fid/fid_request.o
In file included from 
drivers/staging/lustre/lustre/fid/../include/lustre_net.h:66:0,
 from 
drivers/staging/lustre/lustre/fid/../include/lustre_lib.h:64,
 from drivers/staging/lustre/lustre/fid/../include/obd.h:52,
 from drivers/staging/lustre/lustre/fid/fid_request.c:48:
drivers/staging/lustre/lustre/fid/../include/lu_object.h:765:1: warning: 
'inline' is not at beginning of declaration [-Wold-style-declaration]
 static const inline struct lu_device_operations *
 ^

So we just swap inline and const.  272 warnings gone. :)

Signed-off-by: Valdis Kletnieks <valdis.kletni...@vt.edu>
---
 drivers/staging/lustre/lustre/include/lu_object.h | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/drivers/staging/lustre/lustre/include/lu_object.h 
b/drivers/staging/lustre/lustre/include/lu_object.h
index fa78689748a9..176724f60c1b 100644
--- a/drivers/staging/lustre/lustre/include/lu_object.h
+++ b/drivers/staging/lustre/lustre/include/lu_object.h
@@ -756,7 +756,7 @@ static inline const struct lu_fid *lu_object_fid(const 
struct lu_object *o)
 /**
  * return device operations vector for this object
  */
-static const inline struct lu_device_operations *
+static inline const struct lu_device_operations *
 lu_object_ops(const struct lu_object *o)
 {
return o->lo_dev->ld_ops;
-- 
2.6.3

___
devel mailing list
de...@linuxdriverproject.org
http://driverdev.linuxdriverproject.org/mailman/listinfo/driverdev-devel


[PATCH v2 3/6] Clean up another C warnining: set but not used

2015-12-11 Thread Valdis Kletnieks
drivers/staging/lustre/lustre/fid/../include/lustre_cfg.h: In function 
'lustre_cfg_free':
drivers/staging/lustre/lustre/fid/../include/lustre_cfg.h:253:6: warning: 
variable 'len' set but not used [-Wunused-but-set-variable]
  int len;

Yep, we're just gonna call kfree, no need to calculate len. Bye-bye.

Signed-off-by: Valdis Kletnieks <valdis.kletni...@vt.edu>
---
 drivers/staging/lustre/lustre/include/lustre_cfg.h |  4 --
 1 file changed, 4 deletions(-)

diff --git a/drivers/staging/lustre/lustre/include/lustre_cfg.h 
b/drivers/staging/lustre/lustre/include/lustre_cfg.h
index eb6b292b7b25..d30d8b054c92 100644
--- a/drivers/staging/lustre/lustre/include/lustre_cfg.h
+++ b/drivers/staging/lustre/lustre/include/lustre_cfg.h
@@ -252,10 +252,6 @@ static inline struct lustre_cfg *lustre_cfg_new(int cmd,
 
 static inline void lustre_cfg_free(struct lustre_cfg *lcfg)
 {
-   int len;
-
-   len = lustre_cfg_len(lcfg->lcfg_bufcount, lcfg->lcfg_buflens);
-
kfree(lcfg);
return;
 }
___
devel mailing list
de...@linuxdriverproject.org
http://driverdev.linuxdriverproject.org/mailman/listinfo/driverdev-devel


[PATCH v2 0/6] Patch series to make lustre safe(r) for W=1 compiles

2015-12-11 Thread Valdis Kletnieks
Start of a batch series to clean up the Lustre tree. Other people have
done some sparse and checkpatch cleanups, but I found a bunch of
stuff building with W=1. There's probably more, but this was the
really low-hanging obvious fruit.

Valdis Kletnieks (6):
  staging/lustre: Silence warning about 'inline'
  staging/lustre: Fix set-but-unused whinge.
  staging/lustre: Clean up another C warnining: set but not used
  staging/lustre: Fix another C compiler whine: set but not used
  staging/lustre: Nuke an unsigned >= 0 assert
  staging/lustre: Nuke another unsigned >= 0 assert

 drivers/staging/lustre/lustre/fid/lproc_fid.c  |  1 +
 drivers/staging/lustre/lustre/include/lu_object.h  |  2 +-
 drivers/staging/lustre/lustre/include/lustre_cfg.h |  4 --
 drivers/staging/lustre/lustre/libcfs/module.c  | 15 
 drivers/staging/lustre/lustre/llite/rw.c   |  1 -
 drivers/staging/lustre/lustre/ptlrpc/sec_bulk.c|  1 -
 6 files changed, 9 insertions(+), 15 deletions(-)

-- 
2.6.3

___
devel mailing list
de...@linuxdriverproject.org
http://driverdev.linuxdriverproject.org/mailman/listinfo/driverdev-devel


[PATCH v2 6/6] Nuke another unsigned >= 0 assert

2015-12-11 Thread Valdis Kletnieks
Clean up another case of the compiler remininding the programmer they
are an idiot:

drivers/staging/lustre/lustre/ptlrpc/sec_bulk.c:308:34: warning: comparison of 
unsigned expression >= 0 is always true [-Wtype-limits]
  LASSERT(page_pools.epp_waitqlen >= 0);

Just lose the assert, and save a page of compiler spew.

Signed-off-by: Valdis Kletnieks <valdis.kletni...@vt.edu>
---
 drivers/staging/lustre/lustre/ptlrpc/sec_bulk.c | 1 -
 1 file changed, 1 deletion(-)

diff --git a/drivers/staging/lustre/lustre/ptlrpc/sec_bulk.c 
b/drivers/staging/lustre/lustre/ptlrpc/sec_bulk.c
index cd8a9987f7ac..1f326673f089 100644
--- a/drivers/staging/lustre/lustre/ptlrpc/sec_bulk.c
+++ b/drivers/staging/lustre/lustre/ptlrpc/sec_bulk.c
@@ -304,7 +304,6 @@ static unsigned long enc_pools_cleanup(struct page 
***pools, int npools)
 static inline void enc_pools_wakeup(void)
 {
assert_spin_locked(_pools.epp_lock);
-   LASSERT(page_pools.epp_waitqlen >= 0);
 
if (unlikely(page_pools.epp_waitqlen)) {
LASSERT(waitqueue_active(_pools.epp_waitq));
-- 
2.6.3

___
devel mailing list
de...@linuxdriverproject.org
http://driverdev.linuxdriverproject.org/mailman/listinfo/driverdev-devel


[PATCH v3 1/6] drivers/staging/lustre: Silence warning about 'inline'

2015-12-22 Thread Valdis Kletnieks
Low-hanging fruit first:

  CC [M]  drivers/staging/lustre/lustre/fid/fid_request.o
In file included from 
drivers/staging/lustre/lustre/fid/../include/lustre_net.h:66:0,
 from 
drivers/staging/lustre/lustre/fid/../include/lustre_lib.h:64,
 from drivers/staging/lustre/lustre/fid/../include/obd.h:52,
 from drivers/staging/lustre/lustre/fid/fid_request.c:48:
drivers/staging/lustre/lustre/fid/../include/lu_object.h:765:1: warning: 
'inline' is not at beginning of declaration [-Wold-style-declaration]
 static const inline struct lu_device_operations *
 ^

So we just swap inline and const.  272 warnings gone. :)

Signed-off-by: Valdis Kletnieks <valdis.kletni...@vt.edu>
---
 drivers/staging/lustre/lustre/include/lu_object.h | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/drivers/staging/lustre/lustre/include/lu_object.h 
b/drivers/staging/lustre/lustre/include/lu_object.h
index fa78689748a9..176724f60c1b 100644
--- a/drivers/staging/lustre/lustre/include/lu_object.h
+++ b/drivers/staging/lustre/lustre/include/lu_object.h
@@ -756,7 +756,7 @@ static inline const struct lu_fid *lu_object_fid(const 
struct lu_object *o)
 /**
  * return device operations vector for this object
  */
-static const inline struct lu_device_operations *
+static inline const struct lu_device_operations *
 lu_object_ops(const struct lu_object *o)
 {
return o->lo_dev->ld_ops;
-- 
2.6.3

___
devel mailing list
de...@linuxdriverproject.org
http://driverdev.linuxdriverproject.org/mailman/listinfo/driverdev-devel


[PATCH v3 4/6] drivers/staging/lustre: Fix another C compiler whine: set but not used

2015-12-22 Thread Valdis Kletnieks
  CC [M]  drivers/staging/lustre/lustre/libcfs/module.o
drivers/staging/lustre/lustre/libcfs/module.c: In function 
'lustre_insert_debugfs':
drivers/staging/lustre/lustre/libcfs/module.c:670:17: warning: variable 'entry' 
set but not used [-Wunused-but-set-variable]
  struct dentry *entry;
 ^

Just ignore the dentry returned, and add a comment that we *know*
we're not really leaking the dentry because something else will be able
to reap it via recursion.

Signed-off-by: Valdis Kletnieks <valdis.kletni...@vt.edu>
---
 drivers/staging/lustre/lustre/libcfs/module.c | 15 +++
 1 file changed, 7 insertions(+), 8 deletions(-)

diff --git a/drivers/staging/lustre/lustre/libcfs/module.c 
b/drivers/staging/lustre/lustre/libcfs/module.c
index 96d9d4651a51..4438dc426b54 100644
--- a/drivers/staging/lustre/lustre/libcfs/module.c
+++ b/drivers/staging/lustre/lustre/libcfs/module.c
@@ -667,8 +667,6 @@ static const struct file_operations 
lnet_debugfs_file_operations = {
 void lustre_insert_debugfs(struct ctl_table *table,
   const struct lnet_debugfs_symlink_def *symlinks)
 {
-   struct dentry *entry;
-
if (lnet_debugfs_root == NULL)
lnet_debugfs_root = debugfs_create_dir("lnet", NULL);
 
@@ -676,15 +674,17 @@ void lustre_insert_debugfs(struct ctl_table *table,
if (IS_ERR_OR_NULL(lnet_debugfs_root))
return;
 
+   /* We don't save the dentry returned in next two calls, because
+* we don't call debugfs_remove() but rather remove_recursive()
+*/
for (; table->procname; table++)
-   entry = debugfs_create_file(table->procname, table->mode,
-   lnet_debugfs_root, table,
-   _debugfs_file_operations);
+   debugfs_create_file(table->procname, table->mode,
+   lnet_debugfs_root, table,
+   _debugfs_file_operations);
 
for (; symlinks && symlinks->name; symlinks++)
-   entry = debugfs_create_symlink(symlinks->name,
-  lnet_debugfs_root,
-  symlinks->target);
+   debugfs_create_symlink(symlinks->name, lnet_debugfs_root,
+  symlinks->target);
 
 }
 EXPORT_SYMBOL_GPL(lustre_insert_debugfs);
-- 
2.6.3

___
devel mailing list
de...@linuxdriverproject.org
http://driverdev.linuxdriverproject.org/mailman/listinfo/driverdev-devel


[PATCH v3 3/6] drivers/staging/lustre: Clean up another C warnining: set but not used

2015-12-22 Thread Valdis Kletnieks
drivers/staging/lustre/lustre/fid/../include/lustre_cfg.h: In function 
'lustre_cfg_free':
drivers/staging/lustre/lustre/fid/../include/lustre_cfg.h:253:6: warning: 
variable 'len' set but not used [-Wunused-but-set-variable]
  int len;

Yep, we're just gonna call kfree, no need to calculate len. Bye-bye.

Signed-off-by: Valdis Kletnieks <valdis.kletni...@vt.edu>
---
 drivers/staging/lustre/lustre/include/lustre_cfg.h |  4 --
 1 file changed, 4 deletions(-)

diff --git a/drivers/staging/lustre/lustre/include/lustre_cfg.h 
b/drivers/staging/lustre/lustre/include/lustre_cfg.h
index eb6b292b7b25..d30d8b054c92 100644
--- a/drivers/staging/lustre/lustre/include/lustre_cfg.h
+++ b/drivers/staging/lustre/lustre/include/lustre_cfg.h
@@ -252,10 +252,6 @@ static inline struct lustre_cfg *lustre_cfg_new(int cmd,
 
 static inline void lustre_cfg_free(struct lustre_cfg *lcfg)
 {
-   int len;
-
-   len = lustre_cfg_len(lcfg->lcfg_bufcount, lcfg->lcfg_buflens);
-
kfree(lcfg);
return;
 }
___
devel mailing list
de...@linuxdriverproject.org
http://driverdev.linuxdriverproject.org/mailman/listinfo/driverdev-devel


[PATCH v3 0/6] Patch series to make lustre safe(r) for W=1 compiles

2015-12-22 Thread Valdis Kletnieks
Start of a batch series to clean up the Lustre tree. Other people have
done some sparse and checkpatch cleanups, but I found a bunch of
stuff building with W=1. There's probably more, but this was the
really low-hanging obvious fruit.

Valdis Kletnieks (6):
  drivers/staging/lustre: Silence warning about 'inline'
  drivers/staging/lustre: Fix set-but-unused whinge.
  drivers/staging/lustre: Clean up another C warnining: set but not used
  drivers/staging/lustre: Fix another C compiler whine: set but not used
  drivers/staging/lustre: Nuke an unsigned >= 0 assert
  drivers/staging/lustre: Nuke another unsigned >= 0 assert

 drivers/staging/lustre/lustre/fid/lproc_fid.c  |  1 +
 drivers/staging/lustre/lustre/include/lu_object.h  |  2 +-
 drivers/staging/lustre/lustre/include/lustre_cfg.h |  4 --
 drivers/staging/lustre/lustre/libcfs/module.c  | 15 
 drivers/staging/lustre/lustre/llite/rw.c   |  1 -
 drivers/staging/lustre/lustre/ptlrpc/sec_bulk.c|  1 -
 6 files changed, 9 insertions(+), 15 deletions(-)

V2: Add Greg HK to recipient list
V3: fix missing prefix in Subject: lines...
-- 
2.6.3

___
devel mailing list
de...@linuxdriverproject.org
http://driverdev.linuxdriverproject.org/mailman/listinfo/driverdev-devel


[PATCH v3 6/6] drivers/staging/lustre: Nuke another unsigned >= 0 assert

2015-12-22 Thread Valdis Kletnieks
Clean up another case of the compiler remininding the programmer they
are an idiot:

drivers/staging/lustre/lustre/ptlrpc/sec_bulk.c:308:34: warning: comparison of 
unsigned expression >= 0 is always true [-Wtype-limits]
  LASSERT(page_pools.epp_waitqlen >= 0);

Just lose the assert, and save a page of compiler spew.

Signed-off-by: Valdis Kletnieks <valdis.kletni...@vt.edu>
---
 drivers/staging/lustre/lustre/ptlrpc/sec_bulk.c | 1 -
 1 file changed, 1 deletion(-)

diff --git a/drivers/staging/lustre/lustre/ptlrpc/sec_bulk.c 
b/drivers/staging/lustre/lustre/ptlrpc/sec_bulk.c
index cd8a9987f7ac..1f326673f089 100644
--- a/drivers/staging/lustre/lustre/ptlrpc/sec_bulk.c
+++ b/drivers/staging/lustre/lustre/ptlrpc/sec_bulk.c
@@ -304,7 +304,6 @@ static unsigned long enc_pools_cleanup(struct page 
***pools, int npools)
 static inline void enc_pools_wakeup(void)
 {
assert_spin_locked(_pools.epp_lock);
-   LASSERT(page_pools.epp_waitqlen >= 0);
 
if (unlikely(page_pools.epp_waitqlen)) {
LASSERT(waitqueue_active(_pools.epp_waitq));
-- 
2.6.3

___
devel mailing list
de...@linuxdriverproject.org
http://driverdev.linuxdriverproject.org/mailman/listinfo/driverdev-devel


[PATCH v3 2/6] drivers/staging/lustre: Fix set-but-unused whinge.

2015-12-22 Thread Valdis Kletnieks
drivers/staging/lustre/lustre/fid/lproc_fid.c: In function 
'ldebugfs_fid_write_common':
drivers/staging/lustre/lustre/fid/lproc_fid.c:67:6: warning: variable 'rc' set 
but not used [-Wunused-but-set-variable]
  int rc;

We fix it by *using* the return code to help bulletproof it.  It says it's
test code - it should be *more* bulletproof than production, not less.

Signed-off-by: Valdis Kletnieks <valdis.kletni...@vt.edu>
---
 drivers/staging/lustre/lustre/fid/lproc_fid.c | 1 +
 1 file changed, 1 insertion(+)

diff --git a/drivers/staging/lustre/lustre/fid/lproc_fid.c 
b/drivers/staging/lustre/lustre/fid/lproc_fid.c
index ce90c1c54a63..eff011f30fa5 100644
--- a/drivers/staging/lustre/lustre/fid/lproc_fid.c
+++ b/drivers/staging/lustre/lustre/fid/lproc_fid.c
@@ -85,6 +85,8 @@ ldebugfs_fid_write_common(const char __user *buffer, size_t 
count,
rc = sscanf(kernbuf, "[%llx - %llx]\n",
(unsigned long long *)_start,
(unsigned long long *)_end);
+   if (rc != 2)
+   return -EINVAL;
if (!range_is_sane() || range_is_zero() ||
tmp.lsr_start < range->lsr_start || tmp.lsr_end > range->lsr_end)
return -EINVAL;
-- 
2.6.3

___
devel mailing list
de...@linuxdriverproject.org
http://driverdev.linuxdriverproject.org/mailman/listinfo/driverdev-devel


[PATCH v3 5/6] drivers/staging/lustre: Nuke an unsigned >= 0 assert

2015-12-22 Thread Valdis Kletnieks
Writing asserts for almost-never-can-happen things can be valuable.
Writing an assert that tests that an "unsigned int" hasn't gone negative
isn't.

And it generates an *ugly* message:

drivers/staging/lustre/lustre/llite/rw.c:763:20: warning: comparison of 
unsigned expression >= 0 is always true [-Wtype-limits]
  LASSERTF(reserved >= 0, "reserved %lu\n", reserved);
^
include/linux/compiler.h:137:45: note: in definition of macro 'unlikely'
 #  define unlikely(x) (__builtin_constant_p(x) ? !!(x) : __branch_check__(x, 
0))
 ^
drivers/staging/lustre/lustre/llite/rw.c:763:2: note: in expansion of macro 
'LASSERTF'
  LASSERTF(reserved >= 0, "reserved %lu\n", reserved);
  ^
drivers/staging/lustre/lustre/llite/rw.c:763:20: warning: comparison of 
unsigned expression >= 0 is always true [-Wtype-limits]
  LASSERTF(reserved >= 0, "reserved %lu\n", reserved);
^
include/linux/compiler.h:137:53: note: in definition of macro 'unlikely'
 #  define unlikely(x) (__builtin_constant_p(x) ? !!(x) : __branch_check__(x, 
0))
 ^
drivers/staging/lustre/lustre/llite/rw.c:763:2: note: in expansion of macro 
'LASSERTF'
  LASSERTF(reserved >= 0, "reserved %lu\n", reserved);
  ^
drivers/staging/lustre/lustre/llite/rw.c:763:20: warning: comparison of 
unsigned expression >= 0 is always true [-Wtype-limits]
  LASSERTF(reserved >= 0, "reserved %lu\n", reserved);
^
include/linux/compiler.h:110:47: note: in definition of macro 'likely_notrace'
 #define likely_notrace(x) __builtin_expect(!!(x), 1)
   ^
include/linux/compiler.h:137:58: note: in expansion of macro '__branch_check__'
 #  define unlikely(x) (__builtin_constant_p(x) ? !!(x) : __branch_check__(x, 
0))
  ^
drivers/staging/lustre/lustre/llite/../include/linux/../../../include/linux/libcfs/libcfs_private.h:58:6:
 note: in expansion of macro 'unlikely'
  if (unlikely(!(cond))) { \
  ^
drivers/staging/lustre/lustre/llite/rw.c:763:2: note: in expansion of macro 
'LASSERTF'
  LASSERTF(reserved >= 0, "reserved %lu\n", reserved);
  ^

Umm, thank you, GCC.  We'll delete the problem line so we never see that spew 
again.

Signed-off-by: Valdis Kletnieks <valdis.kletni...@vt.edu>
---
 drivers/staging/lustre/lustre/llite/rw.c | 1 -
 1 file changed, 1 deletion(-)

diff --git a/drivers/staging/lustre/lustre/llite/rw.c 
b/drivers/staging/lustre/lustre/llite/rw.c
index f79193fa2fb7..39390aab9da2 100644
--- a/drivers/staging/lustre/lustre/llite/rw.c
+++ b/drivers/staging/lustre/lustre/llite/rw.c
@@ -764,7 +764,6 @@ int ll_readahead(const struct lu_env *env, struct cl_io *io,
ret = ll_read_ahead_pages(env, io, queue,
  ria, , mapping, _end);
 
-   LASSERTF(reserved >= 0, "reserved %lu\n", reserved);
if (reserved != 0)
ll_ra_count_put(ll_i2sbi(inode), reserved);
 
-- 
2.6.3

___
devel mailing list
de...@linuxdriverproject.org
http://driverdev.linuxdriverproject.org/mailman/listinfo/driverdev-devel


Re: [PATCH v3] staging: netlogic: Fixed alignment of parentheseis checkpatch warning

2016-03-20 Thread Valdis . Kletnieks
On Sat, 19 Mar 2016 19:22:09 -0700, Joe Perches said:
> On Sun, 2016-03-20 at 07:48 +0530, Parth Sane wrote:
> > Hi,
> > Thanks for pointing out that the changes have been done. Nevertheless
> > this was a good learning exercise. How do I check which changes have
> > already been done?
>
> Use this tree:
>
> http://git.kernel.org/cgit/linux/kernel/git/next/linux-next.git

And note that doing a 'git clone' of this won't do what you want..

What you *want* to do:

$ git clone git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
$ git remote add linux-next 
git://git.kernel.org/pub/scm/linux/kernel/git/next/linux-next.git
$ git fetch --tags linux-next

This will get you a tree that you can actually work with...
... # later on (linux-next is updated most weekdays)
$ git remote update
to find out what the current tree looks like.

You do *not* want to use 'git pull' against linux-next because it rebases
every night



pgpwqRLrDiv5V.pgp
Description: PGP signature
___
devel mailing list
de...@linuxdriverproject.org
http://driverdev.linuxdriverproject.org/mailman/listinfo/driverdev-devel


Re: [PATCH] staging: rtl8192u: fix line over 80 characters

2018-06-16 Thread valdis . kletnieks
On Sat, 16 Jun 2018 15:00:31 +0900, Hyunil Kim said:
> *fix checkpatch.pl warnings:
>  WARNING: line over 80 characters

> + if (((ieee->wpa_ie[0] == 0xdd) &&
> + (!memcmp(&(ieee->wpa_ie[14]), ccmp_ie, 4))) ||
> + ((ieee->wpa_ie[0] == 0x30) &&
> + (!memcmp(>wpa_ie[10], ccmp_rsn_ie, 4

Ouch. The && and || at ends of line mean a lot of parenthesis counting to
figure out which goes with which.  Use additional indentation to help
understanding.

+   if (((ieee->wpa_ie[0] == 0xdd) &&
+   (!memcmp(&(ieee->wpa_ie[14]), ccmp_ie, 4))) ||
+   ((ieee->wpa_ie[0] == 0x30) &&
+   (!memcmp(>wpa_ie[10], ccmp_rsn_ie, 4

Or perhaps

+   if (((ieee->wpa_ie[0] == 0xdd) &&
+   (!memcmp(&(ieee->wpa_ie[14]), ccmp_ie, 4)))
+|| ((ieee->wpa_ie[0] == 0x30) &&
+   (!memcmp(>wpa_ie[10], ccmp_rsn_ie, 4





pgpq1eSzNkPsj.pgp
Description: PGP signature
___
devel mailing list
de...@linuxdriverproject.org
http://driverdev.linuxdriverproject.org/mailman/listinfo/driverdev-devel


Re: [PATCH] staging: wilc1000: Remove unnecessary pointer check

2018-09-20 Thread valdis . kletnieks
On Thu, 20 Sep 2018 14:26:49 -0700, Nathan Chancellor said:
> Clang warns that the address of a pointer will always evaluated as true
> in a boolean context:
>
> drivers/staging/wilc1000/linux_wlan.c:267:20: warning: address of
> 'vif->ndev->dev' will always evaluate to 'true'
> [-Wpointer-bool-conversion]
> if (!(>ndev->dev))
> ~  ~~~^~~
> 1 warning generated.
>
> Since this statement always evaluates to false due to the logical not,
> remove it.

Often, "just nuke it because it's now dead code" isn't the best answer...

At one time, that was likely intended to be checking whether ->dev was a null
pointer, to make sure we don't pass request_firmware() a null pointer and oops
the kernel, or other things that go pear-shaped

So the question becomes:   Is it safe to just remove it, or was it intended to
test for something that could  legitimately be null if we've hit an error along
the way (which means we should fix the condition to be proper and acceptable
to both gcc and clang)?




pgp4pmbVEHQuh.pgp
Description: PGP signature
___
devel mailing list
de...@linuxdriverproject.org
http://driverdev.linuxdriverproject.org/mailman/listinfo/driverdev-devel


[PATCH] fix error handling in drivers/staging/rtl8192u/ieee80211/ieee80211_module.c

2018-09-26 Thread valdis . kletnieks
John notes that if the kzalloc of ieee->pHTInfo fails, we fail to call
ieee80211_networks_free().  In addition, that function has an un-needed check
before kfree().

Reported-by: John Whitmore 
Signed-off-by: Valdis Kletnieks 
---
diff --git a/drivers/staging/rtl8192u/ieee80211/ieee80211_module.c 
b/drivers/staging/rtl8192u/ieee80211/ieee80211_module.c
index 90a097f2cd4e..97ff0371b5bb 100644
--- a/drivers/staging/rtl8192u/ieee80211/ieee80211_module.c
+++ b/drivers/staging/rtl8192u/ieee80211/ieee80211_module.c
@@ -78,8 +78,6 @@ static inline int ieee80211_networks_allocate(struct 
ieee80211_device *ieee)
 
 static inline void ieee80211_networks_free(struct ieee80211_device *ieee)
 {
-   if (!ieee->networks)
-   return;
kfree(ieee->networks);
ieee->networks = NULL;
 }
@@ -180,6 +178,7 @@ struct net_device *alloc_ieee80211(int sizeof_priv)
return dev;
 
  failed:
+   ieee80211_networks_free(ieee);
if (dev)
free_netdev(dev);
 

___
devel mailing list
de...@linuxdriverproject.org
http://driverdev.linuxdriverproject.org/mailman/listinfo/driverdev-devel


Re: [PATCH] staging:iio:ad7152: Rename misspelled RESEVERD -> RESERVED

2019-01-27 Thread valdis . kletnieks
On Fri, 25 Jan 2019 22:14:32 -0200, Rodrigo Ribeiro said:
> Maybe, one checkstyle patch is enough, right? Which drivers can I truly
> contribute to?

I'll give you a pointer to the "How to contribute" the Kernel Newbies list and 
IRC
channel uses:

https://lists.kernelnewbies.org/pipermail/kernelnewbies/2017-April/017765.html
___
devel mailing list
de...@linuxdriverproject.org
http://driverdev.linuxdriverproject.org/mailman/listinfo/driverdev-devel


[PATCH v2 09/10] staging: exfat: Correct return code

2019-11-03 Thread Valdis Kletnieks
Use -ENOTEMPTY rather than -EEXIST for attempting to remove
a directory that still has files in it.

Signed-off-by: Valdis Kletnieks 
---
 drivers/staging/exfat/exfat_super.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/drivers/staging/exfat/exfat_super.c 
b/drivers/staging/exfat/exfat_super.c
index a97a61a60517..e2254d45ef6e 100644
--- a/drivers/staging/exfat/exfat_super.c
+++ b/drivers/staging/exfat/exfat_super.c
@@ -2167,7 +2167,7 @@ static int ffsRemoveDir(struct inode *inode, struct 
file_id_t *fid)
clu_to_free.flags = fid->flags;
 
if (!is_dir_empty(sb, _to_free)) {
-   ret = -EEXIST;
+   ret = -ENOTEMPTY;
goto out;
}
 
-- 
2.24.0.rc1

___
devel mailing list
de...@linuxdriverproject.org
http://driverdev.linuxdriverproject.org/mailman/listinfo/driverdev-devel


[PATCH v2 05/10] staging: exfat: Clean up return codes - FFS_ERROR

2019-11-03 Thread Valdis Kletnieks
Convert FFS_ERROR to -EINVAL

Signed-off-by: Valdis Kletnieks 
---
 drivers/staging/exfat/exfat.h   |  1 -
 drivers/staging/exfat/exfat_core.c  | 10 +-
 drivers/staging/exfat/exfat_super.c | 20 ++--
 3 files changed, 15 insertions(+), 16 deletions(-)

diff --git a/drivers/staging/exfat/exfat.h b/drivers/staging/exfat/exfat.h
index 7a817405c624..443fafe1d89d 100644
--- a/drivers/staging/exfat/exfat.h
+++ b/drivers/staging/exfat/exfat.h
@@ -216,7 +216,6 @@ static inline u16 get_row_index(u16 i)
 #define FFS_SEMAPHOREERR6
 #define FFS_NOTOPENED   12
 #define FFS_MAXOPENED   13
-#define FFS_ERROR   19
 
 #define NUM_UPCASE  2918
 
diff --git a/drivers/staging/exfat/exfat_core.c 
b/drivers/staging/exfat/exfat_core.c
index 2f6e9d724625..ffcad6867ecb 100644
--- a/drivers/staging/exfat/exfat_core.c
+++ b/drivers/staging/exfat/exfat_core.c
@@ -699,7 +699,7 @@ void sync_alloc_bitmap(struct super_block *sb)
 static s32 __load_upcase_table(struct super_block *sb, sector_t sector,
   u32 num_sectors, u32 utbl_checksum)
 {
-   int i, ret = FFS_ERROR;
+   int i, ret = -EINVAL;
u32 j;
struct fs_info_t *p_fs = &(EXFAT_SB(sb)->fs_info);
struct bd_info_t *p_bd = &(EXFAT_SB(sb)->bd_info);
@@ -774,7 +774,7 @@ static s32 __load_upcase_table(struct super_block *sb, 
sector_t sector,
brelse(tmp_bh);
return FFS_SUCCESS;
}
-   ret = FFS_ERROR;
+   ret = -EINVAL;
 error:
if (tmp_bh)
brelse(tmp_bh);
@@ -784,7 +784,7 @@ static s32 __load_upcase_table(struct super_block *sb, 
sector_t sector,
 
 static s32 __load_default_upcase_table(struct super_block *sb)
 {
-   int i, ret = FFS_ERROR;
+   int i, ret = -EINVAL;
u32 j;
struct fs_info_t *p_fs = &(EXFAT_SB(sb)->fs_info);
 
@@ -1906,7 +1906,7 @@ static s32 __write_partial_entries_in_entry_set(struct 
super_block *sb,
return FFS_SUCCESS;
 err_out:
pr_debug("%s failed\n", __func__);
-   return FFS_ERROR;
+   return -EINVAL;
 }
 
 /* write back all entries in entry set */
@@ -1931,7 +1931,7 @@ s32 write_partial_entries_in_entry_set(struct super_block 
*sb,
 
/* vaidity check */
if (ep + count  > ((struct dentry_t *)>__buf) + es->num_entries)
-   return FFS_ERROR;
+   return -EINVAL;
 
dir.dir = GET_CLUSTER_FROM_SECTOR(es->sector);
dir.flags = es->alloc_flag;
diff --git a/drivers/staging/exfat/exfat_super.c 
b/drivers/staging/exfat/exfat_super.c
index dd6530aef63a..daded767182a 100644
--- a/drivers/staging/exfat/exfat_super.c
+++ b/drivers/staging/exfat/exfat_super.c
@@ -498,7 +498,7 @@ static int ffsGetVolInfo(struct super_block *sb, struct 
vol_info_t *info)
 
/* check the validity of pointer parameters */
if (!info)
-   return FFS_ERROR;
+   return -EINVAL;
 
/* acquire the lock for file system critical section */
mutex_lock(_fs->v_mutex);
@@ -561,7 +561,7 @@ static int ffsLookupFile(struct inode *inode, char *path, 
struct file_id_t *fid)
 
/* check the validity of pointer parameters */
if (!fid || !path || (*path == '\0'))
-   return FFS_ERROR;
+   return -EINVAL;
 
/* acquire the lock for file system critical section */
mutex_lock(_fs->v_mutex);
@@ -654,7 +654,7 @@ static int ffsCreateFile(struct inode *inode, char *path, 
u8 mode,
 
/* check the validity of pointer parameters */
if (!fid || !path || (*path == '\0'))
-   return FFS_ERROR;
+   return -EINVAL;
 
/* acquire the lock for file system critical section */
mutex_lock(_fs->v_mutex);
@@ -703,7 +703,7 @@ static int ffsReadFile(struct inode *inode, struct 
file_id_t *fid, void *buffer,
 
/* check the validity of pointer parameters */
if (!buffer)
-   return FFS_ERROR;
+   return -EINVAL;
 
/* acquire the lock for file system critical section */
mutex_lock(_fs->v_mutex);
@@ -835,7 +835,7 @@ static int ffsWriteFile(struct inode *inode, struct 
file_id_t *fid,
 
/* check the validity of pointer parameters */
if (!buffer)
-   return FFS_ERROR;
+   return -EINVAL;
 
/* acquire the lock for file system critical section */
mutex_lock(_fs->v_mutex);
@@ -1241,7 +1241,7 @@ static int ffsMoveFile(struct inode *old_parent_inode, 
struct file_id_t *fid,
 
/* check the validity of pointer parameters */
if (!new_path || (*new_path == '\0'))
-   return FFS_ERROR;
+   return -EINVAL;
 
/* acquire the lock for file system critical section */
mutex_lock(_fs->v_mutex);
@@ -1464,7 +1464,7 @@ static int ffsSetAttr(stru

[PATCH 10/10] errno.h: Provide EFSCORRUPTED for everybody

2019-11-03 Thread Valdis Kletnieks
There's currently 6 filesystems that have the same #define. Move it
into errno.h so it's defined in just one place.

Signed-off-by: Valdis Kletnieks 
Acked-by: Darrick J. Wong 
Reviewed-by: Jan Kara 
Acked-by: Theodore Ts'o 
---
 drivers/staging/exfat/exfat.h| 2 --
 fs/erofs/internal.h  | 2 --
 fs/ext4/ext4.h   | 1 -
 fs/f2fs/f2fs.h   | 1 -
 fs/xfs/xfs_linux.h   | 1 -
 include/linux/jbd2.h | 1 -
 include/uapi/asm-generic/errno.h | 1 +
 7 files changed, 1 insertion(+), 8 deletions(-)

diff --git a/drivers/staging/exfat/exfat.h b/drivers/staging/exfat/exfat.h
index 72cf40e123de..58b091a077e8 100644
--- a/drivers/staging/exfat/exfat.h
+++ b/drivers/staging/exfat/exfat.h
@@ -30,8 +30,6 @@
 #undef DEBUG
 #endif
 
-#define EFSCORRUPTED   EUCLEAN /* Filesystem is corrupted */
-
 #define DENTRY_SIZE32  /* dir entry size */
 #define DENTRY_SIZE_BITS   5
 
diff --git a/fs/erofs/internal.h b/fs/erofs/internal.h
index 544a453f3076..3980026a8882 100644
--- a/fs/erofs/internal.h
+++ b/fs/erofs/internal.h
@@ -425,7 +425,5 @@ static inline int z_erofs_init_zip_subsystem(void) { return 
0; }
 static inline void z_erofs_exit_zip_subsystem(void) {}
 #endif /* !CONFIG_EROFS_FS_ZIP */
 
-#define EFSCORRUPTEDEUCLEAN /* Filesystem is corrupted */
-
 #endif /* __EROFS_INTERNAL_H */
 
diff --git a/fs/ext4/ext4.h b/fs/ext4/ext4.h
index 03db3e71676c..a86c2585457d 100644
--- a/fs/ext4/ext4.h
+++ b/fs/ext4/ext4.h
@@ -3396,6 +3396,5 @@ static inline int ext4_buffer_uptodate(struct buffer_head 
*bh)
 #endif /* __KERNEL__ */
 
 #define EFSBADCRC  EBADMSG /* Bad CRC detected */
-#define EFSCORRUPTED   EUCLEAN /* Filesystem is corrupted */
 
 #endif /* _EXT4_H */
diff --git a/fs/f2fs/f2fs.h b/fs/f2fs/f2fs.h
index 4024790028aa..04ebe77569a3 100644
--- a/fs/f2fs/f2fs.h
+++ b/fs/f2fs/f2fs.h
@@ -3752,6 +3752,5 @@ static inline bool is_journalled_quota(struct 
f2fs_sb_info *sbi)
 }
 
 #define EFSBADCRC  EBADMSG /* Bad CRC detected */
-#define EFSCORRUPTED   EUCLEAN /* Filesystem is corrupted */
 
 #endif /* _LINUX_F2FS_H */
diff --git a/fs/xfs/xfs_linux.h b/fs/xfs/xfs_linux.h
index ca15105681ca..3409d02a7d21 100644
--- a/fs/xfs/xfs_linux.h
+++ b/fs/xfs/xfs_linux.h
@@ -123,7 +123,6 @@ typedef __u32   xfs_nlink_t;
 
 #define ENOATTRENODATA /* Attribute not found */
 #define EWRONGFS   EINVAL  /* Mount with wrong filesystem type */
-#define EFSCORRUPTED   EUCLEAN /* Filesystem is corrupted */
 #define EFSBADCRC  EBADMSG /* Bad CRC detected */
 
 #define SYNCHRONIZE()  barrier()
diff --git a/include/linux/jbd2.h b/include/linux/jbd2.h
index 603fbc4e2f70..69411d7e0431 100644
--- a/include/linux/jbd2.h
+++ b/include/linux/jbd2.h
@@ -1657,6 +1657,5 @@ static inline tid_t  
jbd2_get_latest_transaction(journal_t *journal)
 #endif /* __KERNEL__ */
 
 #define EFSBADCRC  EBADMSG /* Bad CRC detected */
-#define EFSCORRUPTED   EUCLEAN /* Filesystem is corrupted */
 
 #endif /* _LINUX_JBD2_H */
diff --git a/include/uapi/asm-generic/errno.h b/include/uapi/asm-generic/errno.h
index cf9c51ac49f9..1d5ffdf54cb0 100644
--- a/include/uapi/asm-generic/errno.h
+++ b/include/uapi/asm-generic/errno.h
@@ -98,6 +98,7 @@
 #defineEINPROGRESS 115 /* Operation now in progress */
 #defineESTALE  116 /* Stale file handle */
 #defineEUCLEAN 117 /* Structure needs cleaning */
+#defineEFSCORRUPTEDEUCLEAN
 #defineENOTNAM 118 /* Not a XENIX named type file */
 #defineENAVAIL 119 /* No XENIX semaphores available */
 #defineEISNAM  120 /* Is a named type file */
-- 
2.24.0.rc1

___
devel mailing list
de...@linuxdriverproject.org
http://driverdev.linuxdriverproject.org/mailman/listinfo/driverdev-devel


[PATCH v2 07/10] staging: exfat: Clean up return codes - FFS_SUCCESS

2019-11-03 Thread Valdis Kletnieks
Convert FFS_SUCCESS to 0.

Signed-off-by: Valdis Kletnieks 
---
 drivers/staging/exfat/exfat.h   |   3 -
 drivers/staging/exfat/exfat_cache.c |   4 +-
 drivers/staging/exfat/exfat_core.c  | 104 ++--
 drivers/staging/exfat/exfat_super.c |  50 ++---
 4 files changed, 79 insertions(+), 82 deletions(-)

diff --git a/drivers/staging/exfat/exfat.h b/drivers/staging/exfat/exfat.h
index b3fc9bb06c24..72cf40e123de 100644
--- a/drivers/staging/exfat/exfat.h
+++ b/drivers/staging/exfat/exfat.h
@@ -208,9 +208,6 @@ static inline u16 get_row_index(u16 i)
 #define FM_REGULAR  0x00
 #define FM_SYMLINK  0x40
 
-/* return values */
-#define FFS_SUCCESS 0
-
 #define NUM_UPCASE  2918
 
 #define DOS_CUR_DIR_NAME".  "
diff --git a/drivers/staging/exfat/exfat_cache.c 
b/drivers/staging/exfat/exfat_cache.c
index 467b93630d86..28a67f8139ea 100644
--- a/drivers/staging/exfat/exfat_cache.c
+++ b/drivers/staging/exfat/exfat_cache.c
@@ -462,7 +462,7 @@ u8 *FAT_getblk(struct super_block *sb, sector_t sec)
 
FAT_cache_insert_hash(sb, bp);
 
-   if (sector_read(sb, sec, >buf_bh, 1) != FFS_SUCCESS) {
+   if (sector_read(sb, sec, >buf_bh, 1) != 0) {
FAT_cache_remove_hash(bp);
bp->drv = -1;
bp->sec = ~0;
@@ -582,7 +582,7 @@ static u8 *__buf_getblk(struct super_block *sb, sector_t 
sec)
 
buf_cache_insert_hash(sb, bp);
 
-   if (sector_read(sb, sec, >buf_bh, 1) != FFS_SUCCESS) {
+   if (sector_read(sb, sec, >buf_bh, 1) != 0) {
buf_cache_remove_hash(bp);
bp->drv = -1;
bp->sec = ~0;
diff --git a/drivers/staging/exfat/exfat_core.c 
b/drivers/staging/exfat/exfat_core.c
index ffcad6867ecb..1f0ef94bdd47 100644
--- a/drivers/staging/exfat/exfat_core.c
+++ b/drivers/staging/exfat/exfat_core.c
@@ -102,7 +102,7 @@ void fs_set_vol_flags(struct super_block *sb, u32 new_flag)
if (p_fs->vol_type == EXFAT) {
if (!p_fs->pbr_bh) {
if (sector_read(sb, p_fs->PBR_sector,
-   _fs->pbr_bh, 1) != FFS_SUCCESS)
+   _fs->pbr_bh, 1) != 0)
return;
}
 
@@ -139,7 +139,7 @@ void fs_error(struct super_block *sb)
 s32 clear_cluster(struct super_block *sb, u32 clu)
 {
sector_t s, n;
-   s32 ret = FFS_SUCCESS;
+   s32 ret = 0;
struct buffer_head *tmp_bh = NULL;
struct fs_info_t *p_fs = &(EXFAT_SB(sb)->fs_info);
struct bd_info_t *p_bd = &(EXFAT_SB(sb)->bd_info);
@@ -154,12 +154,12 @@ s32 clear_cluster(struct super_block *sb, u32 clu)
 
for (; s < n; s++) {
ret = sector_read(sb, s, _bh, 0);
-   if (ret != FFS_SUCCESS)
+   if (ret != 0)
return ret;
 
memset((char *)tmp_bh->b_data, 0x0, p_bd->sector_size);
ret = sector_write(sb, s, tmp_bh, 0);
-   if (ret != FFS_SUCCESS)
+   if (ret != 0)
break;
}
 
@@ -251,7 +251,7 @@ s32 exfat_alloc_cluster(struct super_block *sb, s32 
num_alloc,
}
}
 
-   if (set_alloc_bitmap(sb, new_clu - 2) != FFS_SUCCESS)
+   if (set_alloc_bitmap(sb, new_clu - 2) != 0)
return -EIO;
 
num_clusters++;
@@ -370,7 +370,7 @@ void exfat_free_cluster(struct super_block *sb, struct 
chain_t *p_chain,
buf_release(sb, sector + i);
}
 
-   if (clr_alloc_bitmap(sb, clu - 2) != FFS_SUCCESS)
+   if (clr_alloc_bitmap(sb, clu - 2) != 0)
break;
clu++;
 
@@ -387,7 +387,7 @@ void exfat_free_cluster(struct super_block *sb, struct 
chain_t *p_chain,
buf_release(sb, sector + i);
}
 
-   if (clr_alloc_bitmap(sb, clu - 2) != FFS_SUCCESS)
+   if (clr_alloc_bitmap(sb, clu - 2) != 0)
break;
 
if (FAT_read(sb, clu, ) == -1)
@@ -552,7 +552,7 @@ s32 load_alloc_bitmap(struct super_block *sb)
for (j = 0; j < p_fs->map_sectors; j++) {
p_fs->vol_amap[j] = NULL;
ret = sector_read(sb, sector + j, 
_fs->vol_amap[j], 1);
-   if (ret != FFS_SUCCESS) {
+   if (ret != 0) {
/*  release all buffers and 
free vol_amap */
i = 0;
 

[PATCH v2 04/10] staging: exfat: Clean up return codes - FFS_INVALIDFID

2019-11-03 Thread Valdis Kletnieks
Covert FFS_INVALIDFID to -EINVAL

Signed-off-by: Valdis Kletnieks 
---
 drivers/staging/exfat/exfat.h   |  1 -
 drivers/staging/exfat/exfat_super.c | 10 +-
 2 files changed, 5 insertions(+), 6 deletions(-)

diff --git a/drivers/staging/exfat/exfat.h b/drivers/staging/exfat/exfat.h
index 292af85e3cd2..7a817405c624 100644
--- a/drivers/staging/exfat/exfat.h
+++ b/drivers/staging/exfat/exfat.h
@@ -214,7 +214,6 @@ static inline u16 get_row_index(u16 i)
 #define FFS_NOTMOUNTED  4
 #define FFS_ALIGNMENTERR5
 #define FFS_SEMAPHOREERR6
-#define FFS_INVALIDFID  8
 #define FFS_NOTOPENED   12
 #define FFS_MAXOPENED   13
 #define FFS_ERROR   19
diff --git a/drivers/staging/exfat/exfat_super.c 
b/drivers/staging/exfat/exfat_super.c
index 7c99d1f8cba8..dd6530aef63a 100644
--- a/drivers/staging/exfat/exfat_super.c
+++ b/drivers/staging/exfat/exfat_super.c
@@ -699,7 +699,7 @@ static int ffsReadFile(struct inode *inode, struct 
file_id_t *fid, void *buffer,
 
/* check the validity of the given file id */
if (!fid)
-   return FFS_INVALIDFID;
+   return -EINVAL;
 
/* check the validity of pointer parameters */
if (!buffer)
@@ -831,7 +831,7 @@ static int ffsWriteFile(struct inode *inode, struct 
file_id_t *fid,
 
/* check the validity of the given file id */
if (!fid)
-   return FFS_INVALIDFID;
+   return -EINVAL;
 
/* check the validity of pointer parameters */
if (!buffer)
@@ -1237,7 +1237,7 @@ static int ffsMoveFile(struct inode *old_parent_inode, 
struct file_id_t *fid,
 
/* check the validity of the given file id */
if (!fid)
-   return FFS_INVALIDFID;
+   return -EINVAL;
 
/* check the validity of pointer parameters */
if (!new_path || (*new_path == '\0'))
@@ -1358,7 +1358,7 @@ static int ffsRemoveFile(struct inode *inode, struct 
file_id_t *fid)
 
/* check the validity of the given file id */
if (!fid)
-   return FFS_INVALIDFID;
+   return -EINVAL;
 
/* acquire the lock for file system critical section */
mutex_lock(_fs->v_mutex);
@@ -2145,7 +2145,7 @@ static int ffsRemoveDir(struct inode *inode, struct 
file_id_t *fid)
 
/* check the validity of the given file id */
if (!fid)
-   return FFS_INVALIDFID;
+   return -EINVAL;
 
dir.dir = fid->dir.dir;
dir.size = fid->dir.size;
-- 
2.24.0.rc1

___
devel mailing list
de...@linuxdriverproject.org
http://driverdev.linuxdriverproject.org/mailman/listinfo/driverdev-devel


[PATCH v2 03/10] staging: exfat: Clean up return codes - FFS_EOF

2019-11-03 Thread Valdis Kletnieks
Convert FFS_EOF to return 0 for a zero-length read() as per 'man 2 read'.

Signed-off-by: Valdis Kletnieks 
---
 drivers/staging/exfat/exfat.h   | 1 -
 drivers/staging/exfat/exfat_super.c | 2 +-
 2 files changed, 1 insertion(+), 2 deletions(-)

diff --git a/drivers/staging/exfat/exfat.h b/drivers/staging/exfat/exfat.h
index 286605262345..292af85e3cd2 100644
--- a/drivers/staging/exfat/exfat.h
+++ b/drivers/staging/exfat/exfat.h
@@ -217,7 +217,6 @@ static inline u16 get_row_index(u16 i)
 #define FFS_INVALIDFID  8
 #define FFS_NOTOPENED   12
 #define FFS_MAXOPENED   13
-#define FFS_EOF 15
 #define FFS_ERROR   19
 
 #define NUM_UPCASE  2918
diff --git a/drivers/staging/exfat/exfat_super.c 
b/drivers/staging/exfat/exfat_super.c
index d6d5f0fd47fd..7c99d1f8cba8 100644
--- a/drivers/staging/exfat/exfat_super.c
+++ b/drivers/staging/exfat/exfat_super.c
@@ -723,7 +723,7 @@ static int ffsReadFile(struct inode *inode, struct 
file_id_t *fid, void *buffer,
if (count == 0) {
if (rcount)
*rcount = 0;
-   ret = FFS_EOF;
+   ret = 0;
goto out;
}
 
-- 
2.24.0.rc1

___
devel mailing list
de...@linuxdriverproject.org
http://driverdev.linuxdriverproject.org/mailman/listinfo/driverdev-devel


[PATCH v2 02/10] staging: exfat: Clean up return codes - FFS_MEDIAERR

2019-11-03 Thread Valdis Kletnieks
Convert FFS_MEDIAERR to (mostly) -ENOENT and -EIO.  Some additional code surgery
needed to propogate correct error codes upwards.

Signed-off-by: Valdis Kletnieks 
---
 drivers/staging/exfat/exfat.h|   1 -
 drivers/staging/exfat/exfat_blkdev.c |  18 ++---
 drivers/staging/exfat/exfat_core.c   |  80 +-
 drivers/staging/exfat/exfat_super.c  | 117 ++-
 4 files changed, 108 insertions(+), 108 deletions(-)

diff --git a/drivers/staging/exfat/exfat.h b/drivers/staging/exfat/exfat.h
index 4f9ba235d967..286605262345 100644
--- a/drivers/staging/exfat/exfat.h
+++ b/drivers/staging/exfat/exfat.h
@@ -210,7 +210,6 @@ static inline u16 get_row_index(u16 i)
 
 /* return values */
 #define FFS_SUCCESS 0
-#define FFS_MEDIAERR1
 #define FFS_MOUNTED 3
 #define FFS_NOTMOUNTED  4
 #define FFS_ALIGNMENTERR5
diff --git a/drivers/staging/exfat/exfat_blkdev.c 
b/drivers/staging/exfat/exfat_blkdev.c
index 81d20e6241c6..0abae041f632 100644
--- a/drivers/staging/exfat/exfat_blkdev.c
+++ b/drivers/staging/exfat/exfat_blkdev.c
@@ -40,11 +40,11 @@ int bdev_read(struct super_block *sb, sector_t secno, 
struct buffer_head **bh,
long flags = sbi->debug_flags;
 
if (flags & EXFAT_DEBUGFLAGS_ERROR_RW)
-   return FFS_MEDIAERR;
+   return -EIO;
 #endif /* CONFIG_EXFAT_KERNEL_DEBUG */
 
if (!p_bd->opened)
-   return FFS_MEDIAERR;
+   return -ENODEV;
 
if (*bh)
__brelse(*bh);
@@ -62,7 +62,7 @@ int bdev_read(struct super_block *sb, sector_t secno, struct 
buffer_head **bh,
WARN(!p_fs->dev_ejected,
 "[EXFAT] No bh, device seems wrong or to be ejected.\n");
 
-   return FFS_MEDIAERR;
+   return -EIO;
 }
 
 int bdev_write(struct super_block *sb, sector_t secno, struct buffer_head *bh,
@@ -77,11 +77,11 @@ int bdev_write(struct super_block *sb, sector_t secno, 
struct buffer_head *bh,
long flags = sbi->debug_flags;
 
if (flags & EXFAT_DEBUGFLAGS_ERROR_RW)
-   return FFS_MEDIAERR;
+   return -EIO;
 #endif /* CONFIG_EXFAT_KERNEL_DEBUG */
 
if (!p_bd->opened)
-   return FFS_MEDIAERR;
+   return -ENODEV;
 
if (secno == bh->b_blocknr) {
lock_buffer(bh);
@@ -89,7 +89,7 @@ int bdev_write(struct super_block *sb, sector_t secno, struct 
buffer_head *bh,
mark_buffer_dirty(bh);
unlock_buffer(bh);
if (sync && (sync_dirty_buffer(bh) != 0))
-   return FFS_MEDIAERR;
+   return -EIO;
} else {
count = num_secs << p_bd->sector_size_bits;
 
@@ -115,7 +115,7 @@ int bdev_write(struct super_block *sb, sector_t secno, 
struct buffer_head *bh,
WARN(!p_fs->dev_ejected,
 "[EXFAT] No bh, device seems wrong or to be ejected.\n");
 
-   return FFS_MEDIAERR;
+   return -EIO;
 }
 
 int bdev_sync(struct super_block *sb)
@@ -126,11 +126,11 @@ int bdev_sync(struct super_block *sb)
long flags = sbi->debug_flags;
 
if (flags & EXFAT_DEBUGFLAGS_ERROR_RW)
-   return FFS_MEDIAERR;
+   return -EIO;
 #endif /* CONFIG_EXFAT_KERNEL_DEBUG */
 
if (!p_bd->opened)
-   return FFS_MEDIAERR;
+   return -ENODEV;
 
return sync_blockdev(sb->s_bdev);
 }
diff --git a/drivers/staging/exfat/exfat_core.c 
b/drivers/staging/exfat/exfat_core.c
index e90b54a17150..2f6e9d724625 100644
--- a/drivers/staging/exfat/exfat_core.c
+++ b/drivers/staging/exfat/exfat_core.c
@@ -252,13 +252,13 @@ s32 exfat_alloc_cluster(struct super_block *sb, s32 
num_alloc,
}
 
if (set_alloc_bitmap(sb, new_clu - 2) != FFS_SUCCESS)
-   return -1;
+   return -EIO;
 
num_clusters++;
 
if (p_chain->flags == 0x01) {
if (FAT_write(sb, new_clu, CLUSTER_32(~0)) < 0)
-   return -1;
+   return -EIO;
}
 
if (p_chain->dir == CLUSTER_32(~0)) {
@@ -266,7 +266,7 @@ s32 exfat_alloc_cluster(struct super_block *sb, s32 
num_alloc,
} else {
if (p_chain->flags == 0x01) {
if (FAT_write(sb, last_clu, new_clu) < 0)
-   return -1;
+   return -EIO;
}
}
last_clu = new_clu;
@@ -526,7 +526,7 @@ s32 load_alloc_bitmap(struct super_block *sb)
ep = (struct bmap_dentry_t *)get_entry_in_dir(sb, ,
  i, NULL);
if (!ep)
-

[PATCH v2 08/10] staging: exfat: Collapse redundant return code translations

2019-11-03 Thread Valdis Kletnieks
Now that we no longer use odd internal return codes, we can
heave the translation code over the side, and just pass the
error code back up the call chain.

Signed-off-by: Valdis Kletnieks 
---
 drivers/staging/exfat/exfat_super.c | 92 +
 1 file changed, 14 insertions(+), 78 deletions(-)

diff --git a/drivers/staging/exfat/exfat_super.c 
b/drivers/staging/exfat/exfat_super.c
index 5d538593b5f6..a97a61a60517 100644
--- a/drivers/staging/exfat/exfat_super.c
+++ b/drivers/staging/exfat/exfat_super.c
@@ -650,7 +650,7 @@ static int ffsCreateFile(struct inode *inode, char *path, 
u8 mode,
struct uni_name_t uni_name;
struct super_block *sb = inode->i_sb;
struct fs_info_t *p_fs = &(EXFAT_SB(sb)->fs_info);
-   int ret;
+   int ret = 0;
 
/* check the validity of pointer parameters */
if (!fid || !path || (*path == '\0'))
@@ -2366,19 +2366,9 @@ static int exfat_create(struct inode *dir, struct dentry 
*dentry, umode_t mode,
pr_debug("%s entered\n", __func__);
 
err = ffsCreateFile(dir, (u8 *)dentry->d_name.name, FM_REGULAR, );
-   if (err) {
-   if (err == -EINVAL)
-   err = -EINVAL;
-   else if (err == -EEXIST)
-   err = -EEXIST;
-   else if (err == -ENOSPC)
-   err = -ENOSPC;
-   else if (err == -ENAMETOOLONG)
-   err = -ENAMETOOLONG;
-   else
-   err = -EIO;
+   if (err)
goto out;
-   }
+
INC_IVERSION(dir);
curtime = current_time(dir);
dir->i_ctime = curtime;
@@ -2543,13 +2533,9 @@ static int exfat_unlink(struct inode *dir, struct dentry 
*dentry)
EXFAT_I(inode)->fid.size = i_size_read(inode);
 
err = ffsRemoveFile(dir, &(EXFAT_I(inode)->fid));
-   if (err) {
-   if (err == -EPERM)
-   err = -EPERM;
-   else
-   err = -EIO;
+   if (err)
goto out;
-   }
+
INC_IVERSION(dir);
curtime = current_time(dir);
dir->i_mtime = curtime;
@@ -2589,27 +2575,14 @@ static int exfat_symlink(struct inode *dir, struct 
dentry *dentry,
pr_debug("%s entered\n", __func__);
 
err = ffsCreateFile(dir, (u8 *)dentry->d_name.name, FM_SYMLINK, );
-   if (err) {
-   if (err == -EINVAL)
-   err = -EINVAL;
-   else if (err == -EEXIST)
-   err = -EEXIST;
-   else if (err == -ENOSPC)
-   err = -ENOSPC;
-   else
-   err = -EIO;
+   if (err)
goto out;
-   }
+
 
err = ffsWriteFile(dir, , (char *)target, len, );
 
if (err) {
ffsRemoveFile(dir, );
-
-   if (err == -ENOSPC)
-   err = -ENOSPC;
-   else
-   err = -EIO;
goto out;
}
 
@@ -2666,19 +2639,9 @@ static int exfat_mkdir(struct inode *dir, struct dentry 
*dentry, umode_t mode)
pr_debug("%s entered\n", __func__);
 
err = ffsCreateDir(dir, (u8 *)dentry->d_name.name, );
-   if (err) {
-   if (err == -EINVAL)
-   err = -EINVAL;
-   else if (err == -EEXIST)
-   err = -EEXIST;
-   else if (err == -ENOSPC)
-   err = -ENOSPC;
-   else if (err == -ENAMETOOLONG)
-   err = -ENAMETOOLONG;
-   else
-   err = -EIO;
+   if (err)
goto out;
-   }
+
INC_IVERSION(dir);
curtime = current_time(dir);
dir->i_ctime = curtime;
@@ -2727,19 +2690,9 @@ static int exfat_rmdir(struct inode *dir, struct dentry 
*dentry)
EXFAT_I(inode)->fid.size = i_size_read(inode);
 
err = ffsRemoveDir(dir, &(EXFAT_I(inode)->fid));
-   if (err) {
-   if (err == -EINVAL)
-   err = -EINVAL;
-   else if (err == -EEXIST)
-   err = -ENOTEMPTY;
-   else if (err == -ENOENT)
-   err = -ENOENT;
-   else if (err == -EBUSY)
-   err = -EBUSY;
-   else
-   err = -EIO;
+   if (err)
goto out;
-   }
+
INC_IVERSION(dir);
curtime = current_time(dir);
dir->i_mtime = curtime;
@@ -2787,21 +2740,9 @@ static int exfat_rename(struct inode *old_dir, struct 
dentry *old_dentry,
 
err = ffsMoveFile(old_dir, &(EXFAT_I(old_inode)->fid), new_dir,
  new_dentry);
-   if (err) {
-   if (err == -EPERM)
-   err = -EPERM;
-   else if (err ==

[PATCH v2 06/10] staging: exfat: Clean up return codes - remove unused codes

2019-11-03 Thread Valdis Kletnieks
There are 6 FFS_* error values not used at all. Remove them.

Signed-off-by: Valdis Kletnieks 
---
 drivers/staging/exfat/exfat.h | 6 --
 1 file changed, 6 deletions(-)

diff --git a/drivers/staging/exfat/exfat.h b/drivers/staging/exfat/exfat.h
index 443fafe1d89d..b3fc9bb06c24 100644
--- a/drivers/staging/exfat/exfat.h
+++ b/drivers/staging/exfat/exfat.h
@@ -210,12 +210,6 @@ static inline u16 get_row_index(u16 i)
 
 /* return values */
 #define FFS_SUCCESS 0
-#define FFS_MOUNTED 3
-#define FFS_NOTMOUNTED  4
-#define FFS_ALIGNMENTERR5
-#define FFS_SEMAPHOREERR6
-#define FFS_NOTOPENED   12
-#define FFS_MAXOPENED   13
 
 #define NUM_UPCASE  2918
 
-- 
2.24.0.rc1

___
devel mailing list
de...@linuxdriverproject.org
http://driverdev.linuxdriverproject.org/mailman/listinfo/driverdev-devel


[PATCH v2 01/10] staging: exfat: Clean up return codes - FFS_FORMATERR

2019-11-03 Thread Valdis Kletnieks
Convert FFS_FORMATERR to -EFSCORRUPTED

Signed-off-by: Valdis Kletnieks 
---
 drivers/staging/exfat/exfat.h  | 3 ++-
 drivers/staging/exfat/exfat_core.c | 8 
 2 files changed, 6 insertions(+), 5 deletions(-)

diff --git a/drivers/staging/exfat/exfat.h b/drivers/staging/exfat/exfat.h
index acb73f47a253..4f9ba235d967 100644
--- a/drivers/staging/exfat/exfat.h
+++ b/drivers/staging/exfat/exfat.h
@@ -30,6 +30,8 @@
 #undef DEBUG
 #endif
 
+#define EFSCORRUPTED   EUCLEAN /* Filesystem is corrupted */
+
 #define DENTRY_SIZE32  /* dir entry size */
 #define DENTRY_SIZE_BITS   5
 
@@ -209,7 +211,6 @@ static inline u16 get_row_index(u16 i)
 /* return values */
 #define FFS_SUCCESS 0
 #define FFS_MEDIAERR1
-#define FFS_FORMATERR   2
 #define FFS_MOUNTED 3
 #define FFS_NOTMOUNTED  4
 #define FFS_ALIGNMENTERR5
diff --git a/drivers/staging/exfat/exfat_core.c 
b/drivers/staging/exfat/exfat_core.c
index b23fbf3ebaa5..e90b54a17150 100644
--- a/drivers/staging/exfat/exfat_core.c
+++ b/drivers/staging/exfat/exfat_core.c
@@ -573,7 +573,7 @@ s32 load_alloc_bitmap(struct super_block *sb)
return FFS_MEDIAERR;
}
 
-   return FFS_FORMATERR;
+   return -EFSCORRUPTED;
 }
 
 void free_alloc_bitmap(struct super_block *sb)
@@ -3016,7 +3016,7 @@ s32 fat16_mount(struct super_block *sb, struct 
pbr_sector_t *p_pbr)
struct bd_info_t *p_bd = &(EXFAT_SB(sb)->bd_info);
 
if (p_bpb->num_fats == 0)
-   return FFS_FORMATERR;
+   return -EFSCORRUPTED;
 
num_root_sectors = GET16(p_bpb->num_root_entries) << DENTRY_SIZE_BITS;
num_root_sectors = ((num_root_sectors - 1) >>
@@ -3078,7 +3078,7 @@ s32 fat32_mount(struct super_block *sb, struct 
pbr_sector_t *p_pbr)
struct bd_info_t *p_bd = &(EXFAT_SB(sb)->bd_info);
 
if (p_bpb->num_fats == 0)
-   return FFS_FORMATERR;
+   return -EFSCORRUPTED;
 
p_fs->sectors_per_clu = p_bpb->sectors_per_clu;
p_fs->sectors_per_clu_bits = ilog2(p_bpb->sectors_per_clu);
@@ -3157,7 +3157,7 @@ s32 exfat_mount(struct super_block *sb, struct 
pbr_sector_t *p_pbr)
struct bd_info_t *p_bd = &(EXFAT_SB(sb)->bd_info);
 
if (p_bpb->num_fats == 0)
-   return FFS_FORMATERR;
+   return -EFSCORRUPTED;
 
p_fs->sectors_per_clu = 1 << p_bpb->sectors_per_clu_bits;
p_fs->sectors_per_clu_bits = p_bpb->sectors_per_clu_bits;
-- 
2.24.0.rc1

___
devel mailing list
de...@linuxdriverproject.org
http://driverdev.linuxdriverproject.org/mailman/listinfo/driverdev-devel


[PATCH v2 00/10] staging: exfat: Clean up return codes, revisited

2019-11-03 Thread Valdis Kletnieks
The rest of the conversion from internal error numbers to the
standard values used in the rest of the kernel.

Patch 10/10 is logically separate, merging multiple #defines
into one place in errno.h.  It's included in the series because
it depends on patch 1/10.

Valdis Kletnieks (10):
  staging: exfat: Clean up return codes - FFS_FORMATERR
  staging: exfat: Clean up return codes - FFS_MEDIAERR
  staging: exfat: Clean up return codes - FFS_EOF
  staging: exfat: Clean up return codes - FFS_INVALIDFID
  staging: exfat: Clean up return codes - FFS_ERROR
  staging: exfat: Clean up return codes - remove unused codes
  staging: exfat: Clean up return codes - FFS_SUCCESS
  staging: exfat: Collapse redundant return code translations
  staging: exfat: Correct return code
  errno.h: Provide EFSCORRUPTED for everybody

 drivers/staging/exfat/exfat.h|  14 --
 drivers/staging/exfat/exfat_blkdev.c |  18 +-
 drivers/staging/exfat/exfat_cache.c  |   4 +-
 drivers/staging/exfat/exfat_core.c   | 202 +-
 drivers/staging/exfat/exfat_super.c  | 293 +++
 fs/erofs/internal.h  |   2 -
 fs/ext4/ext4.h   |   1 -
 fs/f2fs/f2fs.h   |   1 -
 fs/xfs/xfs_linux.h   |   1 -
 include/linux/jbd2.h |   1 -
 include/uapi/asm-generic/errno.h |   1 +
 11 files changed, 228 insertions(+), 310 deletions(-)

-- 
2.24.0.rc1

___
devel mailing list
de...@linuxdriverproject.org
http://driverdev.linuxdriverproject.org/mailman/listinfo/driverdev-devel


[RFC] errno.h: Provide EFSCORRUPTED for everybody

2019-10-30 Thread Valdis Kletnieks
Three questions: (a) ACK/NAK on this patch, (b) should it be all in one
patch, or one to add to errno.h and 6 patches for 6 filesystems?), and
(c) if one patch, who gets to shepherd it through?


There's currently 6 filesystems that have the same #define. Move it
into errno.h so it's defined in just one place.

Signed-off-by: Valdis Kletnieks 
---
 drivers/staging/exfat/exfat.h| 2 --
 fs/erofs/internal.h  | 2 --
 fs/ext4/ext4.h   | 1 -
 fs/f2fs/f2fs.h   | 1 -
 fs/xfs/xfs_linux.h   | 1 -
 include/linux/jbd2.h | 1 -
 include/uapi/asm-generic/errno.h | 1 +
 7 files changed, 1 insertion(+), 8 deletions(-)

diff --git a/drivers/staging/exfat/exfat.h b/drivers/staging/exfat/exfat.h
index 84de1123e178..3cf7e54af0b7 100644
--- a/drivers/staging/exfat/exfat.h
+++ b/drivers/staging/exfat/exfat.h
@@ -30,8 +30,6 @@
 #undef DEBUG
 #endif
 
-#define EFSCORRUPTED   EUCLEAN /* Filesystem is corrupted */
-
 #define DENTRY_SIZE32  /* dir entry size */
 #define DENTRY_SIZE_BITS   5
 
diff --git a/fs/erofs/internal.h b/fs/erofs/internal.h
index 544a453f3076..3980026a8882 100644
--- a/fs/erofs/internal.h
+++ b/fs/erofs/internal.h
@@ -425,7 +425,5 @@ static inline int z_erofs_init_zip_subsystem(void) { return 
0; }
 static inline void z_erofs_exit_zip_subsystem(void) {}
 #endif /* !CONFIG_EROFS_FS_ZIP */
 
-#define EFSCORRUPTEDEUCLEAN /* Filesystem is corrupted */
-
 #endif /* __EROFS_INTERNAL_H */
 
diff --git a/fs/ext4/ext4.h b/fs/ext4/ext4.h
index 03db3e71676c..a86c2585457d 100644
--- a/fs/ext4/ext4.h
+++ b/fs/ext4/ext4.h
@@ -3396,6 +3396,5 @@ static inline int ext4_buffer_uptodate(struct buffer_head 
*bh)
 #endif /* __KERNEL__ */
 
 #define EFSBADCRC  EBADMSG /* Bad CRC detected */
-#define EFSCORRUPTED   EUCLEAN /* Filesystem is corrupted */
 
 #endif /* _EXT4_H */
diff --git a/fs/f2fs/f2fs.h b/fs/f2fs/f2fs.h
index 4024790028aa..04ebe77569a3 100644
--- a/fs/f2fs/f2fs.h
+++ b/fs/f2fs/f2fs.h
@@ -3752,6 +3752,5 @@ static inline bool is_journalled_quota(struct 
f2fs_sb_info *sbi)
 }
 
 #define EFSBADCRC  EBADMSG /* Bad CRC detected */
-#define EFSCORRUPTED   EUCLEAN /* Filesystem is corrupted */
 
 #endif /* _LINUX_F2FS_H */
diff --git a/fs/xfs/xfs_linux.h b/fs/xfs/xfs_linux.h
index ca15105681ca..3409d02a7d21 100644
--- a/fs/xfs/xfs_linux.h
+++ b/fs/xfs/xfs_linux.h
@@ -123,7 +123,6 @@ typedef __u32   xfs_nlink_t;
 
 #define ENOATTRENODATA /* Attribute not found */
 #define EWRONGFS   EINVAL  /* Mount with wrong filesystem type */
-#define EFSCORRUPTED   EUCLEAN /* Filesystem is corrupted */
 #define EFSBADCRC  EBADMSG /* Bad CRC detected */
 
 #define SYNCHRONIZE()  barrier()
diff --git a/include/linux/jbd2.h b/include/linux/jbd2.h
index 564793c24d12..1ecd3859d040 100644
--- a/include/linux/jbd2.h
+++ b/include/linux/jbd2.h
@@ -1657,6 +1657,5 @@ static inline tid_t  
jbd2_get_latest_transaction(journal_t *journal)
 #endif /* __KERNEL__ */
 
 #define EFSBADCRC  EBADMSG /* Bad CRC detected */
-#define EFSCORRUPTED   EUCLEAN /* Filesystem is corrupted */
 
 #endif /* _LINUX_JBD2_H */
diff --git a/include/uapi/asm-generic/errno.h b/include/uapi/asm-generic/errno.h
index cf9c51ac49f9..1d5ffdf54cb0 100644
--- a/include/uapi/asm-generic/errno.h
+++ b/include/uapi/asm-generic/errno.h
@@ -98,6 +98,7 @@
 #defineEINPROGRESS 115 /* Operation now in progress */
 #defineESTALE  116 /* Stale file handle */
 #defineEUCLEAN 117 /* Structure needs cleaning */
+#defineEFSCORRUPTEDEUCLEAN
 #defineENOTNAM 118 /* Not a XENIX named type file */
 #defineENAVAIL 119 /* No XENIX semaphores available */
 #defineEISNAM  120 /* Is a named type file */
-- 
2.24.0.rc1

___
devel mailing list
de...@linuxdriverproject.org
http://driverdev.linuxdriverproject.org/mailman/listinfo/driverdev-devel


[PATCH 01/12] staging: exfat: Remove FAT/VFAT mount support, part 1

2019-11-12 Thread Valdis Kletnieks
Remove the top-level mount functionality, to make this driver handle
only exfat file systems.

Signed-off-by: Valdis Kletnieks 
---
 drivers/staging/exfat/Kconfig   |   9 --
 drivers/staging/exfat/exfat.h   |   2 -
 drivers/staging/exfat/exfat_core.c  | 193 
 drivers/staging/exfat/exfat_super.c |   8 +-
 4 files changed, 1 insertion(+), 211 deletions(-)

diff --git a/drivers/staging/exfat/Kconfig b/drivers/staging/exfat/Kconfig
index ce32dfe33bec..0130019cbec2 100644
--- a/drivers/staging/exfat/Kconfig
+++ b/drivers/staging/exfat/Kconfig
@@ -6,15 +6,6 @@ config EXFAT_FS
help
  This adds support for the exFAT file system.
 
-config EXFAT_DONT_MOUNT_VFAT
-   bool "Prohibit mounting of fat/vfat filesystems by exFAT"
-   depends on EXFAT_FS
-   default y
-   help
- By default, the exFAT driver will only mount exFAT filesystems, and 
refuse
- to mount fat/vfat filesystems.  Set this to 'n' to allow the exFAT 
driver
- to mount these filesystems.
-
 config EXFAT_DISCARD
bool "enable discard support"
depends on EXFAT_FS
diff --git a/drivers/staging/exfat/exfat.h b/drivers/staging/exfat/exfat.h
index 72cf40e123de..68f79e13af2b 100644
--- a/drivers/staging/exfat/exfat.h
+++ b/drivers/staging/exfat/exfat.h
@@ -915,8 +915,6 @@ s32 resolve_path(struct inode *inode, char *path, struct 
chain_t *p_dir,
 s32 resolve_name(u8 *name, u8 **arg);
 
 /* file operation functions */
-s32 fat16_mount(struct super_block *sb, struct pbr_sector_t *p_pbr);
-s32 fat32_mount(struct super_block *sb, struct pbr_sector_t *p_pbr);
 s32 exfat_mount(struct super_block *sb, struct pbr_sector_t *p_pbr);
 s32 create_dir(struct inode *inode, struct chain_t *p_dir,
   struct uni_name_t *p_uniname, struct file_id_t *fid);
diff --git a/drivers/staging/exfat/exfat_core.c 
b/drivers/staging/exfat/exfat_core.c
index 1f0ef94bdd47..89bed7460162 100644
--- a/drivers/staging/exfat/exfat_core.c
+++ b/drivers/staging/exfat/exfat_core.c
@@ -1284,57 +1284,6 @@ s32 exfat_init_dir_entry(struct super_block *sb, struct 
chain_t *p_dir,
return 0;
 }
 
-static s32 fat_init_ext_entry(struct super_block *sb, struct chain_t *p_dir,
- s32 entry, s32 num_entries,
- struct uni_name_t *p_uniname,
- struct dos_name_t *p_dosname)
-{
-   int i;
-   sector_t sector;
-   u8 chksum;
-   u16 *uniname = p_uniname->name;
-   struct dos_dentry_t *dos_ep;
-   struct ext_dentry_t *ext_ep;
-
-   dos_ep = (struct dos_dentry_t *)get_entry_in_dir(sb, p_dir, entry,
-);
-   if (!dos_ep)
-   return -EIO;
-
-   dos_ep->lcase = p_dosname->name_case;
-   memcpy(dos_ep->name, p_dosname->name, DOS_NAME_LENGTH);
-   buf_modify(sb, sector);
-
-   if ((--num_entries) > 0) {
-   chksum = calc_checksum_1byte((void *)dos_ep->name,
-DOS_NAME_LENGTH, 0);
-
-   for (i = 1; i < num_entries; i++) {
-   ext_ep = (struct ext_dentry_t *)get_entry_in_dir(sb,
-p_dir,
-entry 
- i,
-
);
-   if (!ext_ep)
-   return -EIO;
-
-   init_ext_entry(ext_ep, i, chksum, uniname);
-   buf_modify(sb, sector);
-   uniname += 13;
-   }
-
-   ext_ep = (struct ext_dentry_t *)get_entry_in_dir(sb, p_dir,
-entry - i,
-);
-   if (!ext_ep)
-   return -EIO;
-
-   init_ext_entry(ext_ep, i + 0x40, chksum, uniname);
-   buf_modify(sb, sector);
-   }
-
-   return 0;
-}
-
 static s32 exfat_init_ext_entry(struct super_block *sb, struct chain_t *p_dir,
s32 entry, s32 num_entries,
struct uni_name_t *p_uniname,
@@ -2981,148 +2930,6 @@ s32 resolve_path(struct inode *inode, char *path, 
struct chain_t *p_dir,
 /*
  *  File Operation Functions
  */
-static struct fs_func fat_fs_func = {
-   .alloc_cluster = fat_alloc_cluster,
-   .free_cluster = fat_free_cluster,
-   .count_used_clusters = fat_count_used_clusters,
-
-   .init_dir_entry = fat_init_dir_entry,
-   .init_ext_entry = fat_init_ext_entry,
-   .find_dir_entry = fat_find_dir_entry,
-   .delete_dir_entry = fat_delete_dir_entry,
-   .get_uni_name_from_ext_entry = fat_get_uni_name_from_ext_entry,
- 

[PATCH 07/12] staging: exfat: Clean up the namespace pollution part 3

2019-11-12 Thread Valdis Kletnieks
These functions are only used in the local file, make them static

Signed-off-by: Valdis Kletnieks 
---
 drivers/staging/exfat/exfat.h  | 6 --
 drivers/staging/exfat/exfat_core.c | 8 
 2 files changed, 4 insertions(+), 10 deletions(-)

diff --git a/drivers/staging/exfat/exfat.h b/drivers/staging/exfat/exfat.h
index 5044523ccb97..407dbb017c5f 100644
--- a/drivers/staging/exfat/exfat.h
+++ b/drivers/staging/exfat/exfat.h
@@ -758,8 +758,6 @@ void fs_set_vol_flags(struct super_block *sb, u32 new_flag);
 void fs_error(struct super_block *sb);
 
 /* cluster management functions */
-s32 clear_cluster(struct super_block *sb, u32 clu);
-u32 find_last_cluster(struct super_block *sb, struct chain_t *p_chain);
 s32 count_num_clusters(struct super_block *sb, struct chain_t *dir);
 void exfat_chain_cont_cluster(struct super_block *sb, u32 chain, s32 len);
 
@@ -782,8 +780,6 @@ void init_strm_entry(struct strm_dentry_t *ep, u8 flags, 
u32 start_clu,
 u64 size);
 void init_name_entry(struct name_dentry_t *ep, u16 *uniname);
 
-s32 find_location(struct super_block *sb, struct chain_t *p_dir, s32 entry,
- sector_t *sector, s32 *offset);
 struct dentry_t *get_entry_in_dir(struct super_block *sb, struct chain_t 
*p_dir,
  s32 entry, sector_t *sector);
 struct entry_set_cache_t *get_entry_set_in_dir(struct super_block *sb,
@@ -797,8 +793,6 @@ s32 write_partial_entries_in_entry_set(struct super_block 
*sb,
   struct dentry_t *ep, u32 count);
 s32 search_deleted_or_unused_entry(struct super_block *sb,
   struct chain_t *p_dir, s32 num_entries);
-s32 find_empty_entry(struct inode *inode, struct chain_t *p_dir,
-s32 num_entries);
 s32 count_dos_name_entries(struct super_block *sb, struct chain_t *p_dir,
   u32 type);
 void update_dir_checksum(struct super_block *sb, struct chain_t *p_dir,
diff --git a/drivers/staging/exfat/exfat_core.c 
b/drivers/staging/exfat/exfat_core.c
index 5a01fc25f31d..3ea51d12c38d 100644
--- a/drivers/staging/exfat/exfat_core.c
+++ b/drivers/staging/exfat/exfat_core.c
@@ -125,7 +125,7 @@ void fs_error(struct super_block *sb)
  *  Cluster Management Functions
  */
 
-s32 clear_cluster(struct super_block *sb, u32 clu)
+static s32 clear_cluster(struct super_block *sb, u32 clu)
 {
sector_t s, n;
s32 ret = 0;
@@ -294,7 +294,7 @@ static void exfat_free_cluster(struct super_block *sb, 
struct chain_t *p_chain,
p_fs->used_clusters -= num_clusters;
 }
 
-u32 find_last_cluster(struct super_block *sb, struct chain_t *p_chain)
+static u32 find_last_cluster(struct super_block *sb, struct chain_t *p_chain)
 {
u32 clu, next;
struct fs_info_t *p_fs = &(EXFAT_SB(sb)->fs_info);
@@ -1186,7 +1186,7 @@ static s32 _walk_fat_chain(struct super_block *sb, struct 
chain_t *p_dir,
return 0;
 }
 
-s32 find_location(struct super_block *sb, struct chain_t *p_dir, s32 entry,
+static s32 find_location(struct super_block *sb, struct chain_t *p_dir, s32 
entry,
  sector_t *sector, s32 *offset)
 {
s32 off, ret;
@@ -1583,7 +1583,7 @@ s32 search_deleted_or_unused_entry(struct super_block *sb,
return -1;
 }
 
-s32 find_empty_entry(struct inode *inode, struct chain_t *p_dir, s32 
num_entries)
+static s32 find_empty_entry(struct inode *inode, struct chain_t *p_dir, s32 
num_entries)
 {
s32 ret, dentry;
u32 last_clu;
-- 
2.24.0

___
devel mailing list
de...@linuxdriverproject.org
http://driverdev.linuxdriverproject.org/mailman/listinfo/driverdev-devel


[PATCH 03/12] staging: exfat: Remove FAT/VFAT mount support, part 3

2019-11-12 Thread Valdis Kletnieks
In this patch, we straighten out most of the cases where the
code was testing 'p_fs->vol_type == EXFAT' and '!= EXFAT'

There's still some ?: ops and a few places where the code
is doing checks for '.' and '..' that require looking at,
but those are future patches

Signed-off-by: Valdis Kletnieks 
---
 drivers/staging/exfat/exfat_cache.c | 207 ++-
 drivers/staging/exfat/exfat_core.c  | 205 ++-
 drivers/staging/exfat/exfat_super.c | 297 +++-
 3 files changed, 148 insertions(+), 561 deletions(-)

diff --git a/drivers/staging/exfat/exfat_cache.c 
b/drivers/staging/exfat/exfat_cache.c
index 28a67f8139ea..1d344c5f3e15 100644
--- a/drivers/staging/exfat/exfat_cache.c
+++ b/drivers/staging/exfat/exfat_cache.c
@@ -202,107 +202,22 @@ static int __FAT_read(struct super_block *sb, u32 loc, 
u32 *content)
struct fs_info_t *p_fs = &(EXFAT_SB(sb)->fs_info);
struct bd_info_t *p_bd = &(EXFAT_SB(sb)->bd_info);
 
-   if (p_fs->vol_type == FAT12) {
-   sec = p_fs->FAT1_start_sector +
-   ((loc + (loc >> 1)) >> p_bd->sector_size_bits);
-   off = (loc + (loc >> 1)) & p_bd->sector_size_mask;
-
-   if (off == (p_bd->sector_size - 1)) {
-   fat_sector = FAT_getblk(sb, sec);
-   if (!fat_sector)
-   return -1;
-
-   _content = (u32)fat_sector[off];
-
-   fat_sector = FAT_getblk(sb, ++sec);
-   if (!fat_sector)
-   return -1;
-
-   _content |= (u32)fat_sector[0] << 8;
-   } else {
-   fat_sector = FAT_getblk(sb, sec);
-   if (!fat_sector)
-   return -1;
-
-   fat_entry = _sector[off];
-   _content = GET16(fat_entry);
-   }
-
-   if (loc & 1)
-   _content >>= 4;
-
-   _content &= 0x0FFF;
-
-   if (_content >= CLUSTER_16(0x0FF8)) {
-   *content = CLUSTER_32(~0);
-   return 0;
-   }
-   *content = CLUSTER_32(_content);
-   return 0;
-   } else if (p_fs->vol_type == FAT16) {
-   sec = p_fs->FAT1_start_sector +
-   (loc >> (p_bd->sector_size_bits - 1));
-   off = (loc << 1) & p_bd->sector_size_mask;
-
-   fat_sector = FAT_getblk(sb, sec);
-   if (!fat_sector)
-   return -1;
-
-   fat_entry = _sector[off];
-
-   _content = GET16_A(fat_entry);
-
-   _content &= 0x;
-
-   if (_content >= CLUSTER_16(0xFFF8)) {
-   *content = CLUSTER_32(~0);
-   return 0;
-   }
-   *content = CLUSTER_32(_content);
-   return 0;
-   } else if (p_fs->vol_type == FAT32) {
-   sec = p_fs->FAT1_start_sector +
-   (loc >> (p_bd->sector_size_bits - 2));
-   off = (loc << 2) & p_bd->sector_size_mask;
-
-   fat_sector = FAT_getblk(sb, sec);
-   if (!fat_sector)
-   return -1;
+   sec = p_fs->FAT1_start_sector +
+   (loc >> (p_bd->sector_size_bits - 2));
+   off = (loc << 2) & p_bd->sector_size_mask;
 
-   fat_entry = _sector[off];
+   fat_sector = FAT_getblk(sb, sec);
+   if (!fat_sector)
+   return -1;
 
-   _content = GET32_A(fat_entry);
+   fat_entry = _sector[off];
+   _content = GET32_A(fat_entry);
 
-   _content &= 0x0FFF;
-
-   if (_content >= CLUSTER_32(0x0FF8)) {
-   *content = CLUSTER_32(~0);
-   return 0;
-   }
-   *content = CLUSTER_32(_content);
-   return 0;
-   } else if (p_fs->vol_type == EXFAT) {
-   sec = p_fs->FAT1_start_sector +
-   (loc >> (p_bd->sector_size_bits - 2));
-   off = (loc << 2) & p_bd->sector_size_mask;
-
-   fat_sector = FAT_getblk(sb, sec);
-   if (!fat_sector)
-   return -1;
-
-   fat_entry = _sector[off];
-   _content = GET32_A(fat_entry);
-
-   if (_content >= CLUSTER_32(0xFFF8)) {
-   *content = CLUSTER_32(~0);
-   return 0;
-   }
-   *content = CLUSTER_32(_content);
+   if (_content >= CLUSTER_32(0xFFF8)) {
+   *content = CLUSTER_32(~0);

[PATCH 12/12] staging: exfat: Clean up the namespace pollution part 8

2019-11-12 Thread Valdis Kletnieks
Rename all the FAT_* functions to exfat_fat_*.

Signed-off-by: Valdis Kletnieks 
---
 drivers/staging/exfat/exfat.h   | 12 +-
 drivers/staging/exfat/exfat_cache.c | 26 +++---
 drivers/staging/exfat/exfat_core.c  | 34 ++---
 drivers/staging/exfat/exfat_super.c | 30 -
 4 files changed, 51 insertions(+), 51 deletions(-)

diff --git a/drivers/staging/exfat/exfat.h b/drivers/staging/exfat/exfat.h
index 6a9cb6c68d28..2aac1e000977 100644
--- a/drivers/staging/exfat/exfat.h
+++ b/drivers/staging/exfat/exfat.h
@@ -739,12 +739,12 @@ void nls_cstring_to_uniname(struct super_block *sb,
 /* buffer cache management */
 void exfat_buf_init(struct super_block *sb);
 void exfat_buf_shutdown(struct super_block *sb);
-int FAT_read(struct super_block *sb, u32 loc, u32 *content);
-s32 FAT_write(struct super_block *sb, u32 loc, u32 content);
-u8 *FAT_getblk(struct super_block *sb, sector_t sec);
-void FAT_modify(struct super_block *sb, sector_t sec);
-void FAT_release_all(struct super_block *sb);
-void FAT_sync(struct super_block *sb);
+int exfat_fat_read(struct super_block *sb, u32 loc, u32 *content);
+s32 exfat_fat_write(struct super_block *sb, u32 loc, u32 content);
+u8 *exfat_fat_getblk(struct super_block *sb, sector_t sec);
+void exfat_fat_modify(struct super_block *sb, sector_t sec);
+void exfat_fat_release_all(struct super_block *sb);
+void exfat_fat_sync(struct super_block *sb);
 u8 *exfat_buf_getblk(struct super_block *sb, sector_t sec);
 void exfat_buf_modify(struct super_block *sb, sector_t sec);
 void exfat_buf_lock(struct super_block *sb, sector_t sec);
diff --git a/drivers/staging/exfat/exfat_cache.c 
b/drivers/staging/exfat/exfat_cache.c
index 835871b2a3d0..3fd5604058a9 100644
--- a/drivers/staging/exfat/exfat_cache.c
+++ b/drivers/staging/exfat/exfat_cache.c
@@ -193,7 +193,7 @@ void exfat_buf_shutdown(struct super_block *sb)
 {
 }
 
-static int __FAT_read(struct super_block *sb, u32 loc, u32 *content)
+static int __exfat_fat_read(struct super_block *sb, u32 loc, u32 *content)
 {
s32 off;
u32 _content;
@@ -206,7 +206,7 @@ static int __FAT_read(struct super_block *sb, u32 loc, u32 
*content)
(loc >> (p_bd->sector_size_bits - 2));
off = (loc << 2) & p_bd->sector_size_mask;
 
-   fat_sector = FAT_getblk(sb, sec);
+   fat_sector = exfat_fat_getblk(sb, sec);
if (!fat_sector)
return -1;
 
@@ -226,18 +226,18 @@ static int __FAT_read(struct super_block *sb, u32 loc, 
u32 *content)
  * returns 0 on success
  *-1 on error
  */
-int FAT_read(struct super_block *sb, u32 loc, u32 *content)
+int exfat_fat_read(struct super_block *sb, u32 loc, u32 *content)
 {
s32 ret;
 
mutex_lock(_mutex);
-   ret = __FAT_read(sb, loc, content);
+   ret = __exfat_fat_read(sb, loc, content);
mutex_unlock(_mutex);
 
return ret;
 }
 
-static s32 __FAT_write(struct super_block *sb, u32 loc, u32 content)
+static s32 __exfat_fat_write(struct super_block *sb, u32 loc, u32 content)
 {
s32 off;
sector_t sec;
@@ -249,7 +249,7 @@ static s32 __FAT_write(struct super_block *sb, u32 loc, u32 
content)
 (p_bd->sector_size_bits - 2));
off = (loc << 2) & p_bd->sector_size_mask;
 
-   fat_sector = FAT_getblk(sb, sec);
+   fat_sector = exfat_fat_getblk(sb, sec);
if (!fat_sector)
return -1;
 
@@ -257,22 +257,22 @@ static s32 __FAT_write(struct super_block *sb, u32 loc, 
u32 content)
 
SET32_A(fat_entry, content);
 
-   FAT_modify(sb, sec);
+   exfat_fat_modify(sb, sec);
return 0;
 }
 
-int FAT_write(struct super_block *sb, u32 loc, u32 content)
+int exfat_fat_write(struct super_block *sb, u32 loc, u32 content)
 {
s32 ret;
 
mutex_lock(_mutex);
-   ret = __FAT_write(sb, loc, content);
+   ret = __exfat_fat_write(sb, loc, content);
mutex_unlock(_mutex);
 
return ret;
 }
 
-u8 *FAT_getblk(struct super_block *sb, sector_t sec)
+u8 *exfat_fat_getblk(struct super_block *sb, sector_t sec)
 {
struct buf_cache_t *bp;
struct fs_info_t *p_fs = &(EXFAT_SB(sb)->fs_info);
@@ -307,7 +307,7 @@ u8 *FAT_getblk(struct super_block *sb, sector_t sec)
return bp->buf_bh->b_data;
 }
 
-void FAT_modify(struct super_block *sb, sector_t sec)
+void exfat_fat_modify(struct super_block *sb, sector_t sec)
 {
struct buf_cache_t *bp;
 
@@ -316,7 +316,7 @@ void FAT_modify(struct super_block *sb, sector_t sec)
sector_write(sb, sec, bp->buf_bh, 0);
 }
 
-void FAT_release_all(struct super_block *sb)
+void exfat_fat_release_all(struct super_block *sb)
 {
struct buf_cache_t *bp;
struct fs_info_t *p_fs = &(EXFAT_SB(sb)->fs_info);
@@ -341,7 +341,7 @@ void FAT_release_all(struct super_block *sb)
mutex_unlo

[PATCH 11/12] staging: exfat: Clean up the namespace pollution part 7

2019-11-12 Thread Valdis Kletnieks
Global functions called 'buf*' are a linkage editor disaster waiting to
happen.  Rename our buf_* functions to exfat_buf_*

Signed-off-by: Valdis Kletnieks 
---
 drivers/staging/exfat/exfat.h   | 18 +++---
 drivers/staging/exfat/exfat_cache.c | 22 +++
 drivers/staging/exfat/exfat_core.c  | 96 ++---
 drivers/staging/exfat/exfat_super.c | 12 ++--
 4 files changed, 74 insertions(+), 74 deletions(-)

diff --git a/drivers/staging/exfat/exfat.h b/drivers/staging/exfat/exfat.h
index 188ea1bd7162..6a9cb6c68d28 100644
--- a/drivers/staging/exfat/exfat.h
+++ b/drivers/staging/exfat/exfat.h
@@ -737,21 +737,21 @@ void nls_cstring_to_uniname(struct super_block *sb,
bool *p_lossy);
 
 /* buffer cache management */
-void buf_init(struct super_block *sb);
-void buf_shutdown(struct super_block *sb);
+void exfat_buf_init(struct super_block *sb);
+void exfat_buf_shutdown(struct super_block *sb);
 int FAT_read(struct super_block *sb, u32 loc, u32 *content);
 s32 FAT_write(struct super_block *sb, u32 loc, u32 content);
 u8 *FAT_getblk(struct super_block *sb, sector_t sec);
 void FAT_modify(struct super_block *sb, sector_t sec);
 void FAT_release_all(struct super_block *sb);
 void FAT_sync(struct super_block *sb);
-u8 *buf_getblk(struct super_block *sb, sector_t sec);
-void buf_modify(struct super_block *sb, sector_t sec);
-void buf_lock(struct super_block *sb, sector_t sec);
-void buf_unlock(struct super_block *sb, sector_t sec);
-void buf_release(struct super_block *sb, sector_t sec);
-void buf_release_all(struct super_block *sb);
-void buf_sync(struct super_block *sb);
+u8 *exfat_buf_getblk(struct super_block *sb, sector_t sec);
+void exfat_buf_modify(struct super_block *sb, sector_t sec);
+void exfat_buf_lock(struct super_block *sb, sector_t sec);
+void exfat_buf_unlock(struct super_block *sb, sector_t sec);
+void exfat_buf_release(struct super_block *sb, sector_t sec);
+void exfat_buf_release_all(struct super_block *sb);
+void exfat_buf_sync(struct super_block *sb);
 
 /* fs management functions */
 void fs_set_vol_flags(struct super_block *sb, u32 new_flag);
diff --git a/drivers/staging/exfat/exfat_cache.c 
b/drivers/staging/exfat/exfat_cache.c
index 1d344c5f3e15..835871b2a3d0 100644
--- a/drivers/staging/exfat/exfat_cache.c
+++ b/drivers/staging/exfat/exfat_cache.c
@@ -128,7 +128,7 @@ static void buf_cache_remove_hash(struct buf_cache_t *bp)
(bp->hash_next)->hash_prev = bp->hash_prev;
 }
 
-void buf_init(struct super_block *sb)
+void exfat_buf_init(struct super_block *sb)
 {
struct fs_info_t *p_fs = &(EXFAT_SB(sb)->fs_info);
 
@@ -189,7 +189,7 @@ void buf_init(struct super_block *sb)
buf_cache_insert_hash(sb, _fs->buf_cache_array[i]);
 }
 
-void buf_shutdown(struct super_block *sb)
+void exfat_buf_shutdown(struct super_block *sb)
 {
 }
 
@@ -392,7 +392,7 @@ static struct buf_cache_t *buf_cache_get(struct super_block 
*sb, sector_t sec)
return bp;
 }
 
-static u8 *__buf_getblk(struct super_block *sb, sector_t sec)
+static u8 *__exfat_buf_getblk(struct super_block *sb, sector_t sec)
 {
struct buf_cache_t *bp;
struct fs_info_t *p_fs = &(EXFAT_SB(sb)->fs_info);
@@ -427,18 +427,18 @@ static u8 *__buf_getblk(struct super_block *sb, sector_t 
sec)
return bp->buf_bh->b_data;
 }
 
-u8 *buf_getblk(struct super_block *sb, sector_t sec)
+u8 *exfat_buf_getblk(struct super_block *sb, sector_t sec)
 {
u8 *buf;
 
mutex_lock(_mutex);
-   buf = __buf_getblk(sb, sec);
+   buf = __exfat_buf_getblk(sb, sec);
mutex_unlock(_mutex);
 
return buf;
 }
 
-void buf_modify(struct super_block *sb, sector_t sec)
+void exfat_buf_modify(struct super_block *sb, sector_t sec)
 {
struct buf_cache_t *bp;
 
@@ -454,7 +454,7 @@ void buf_modify(struct super_block *sb, sector_t sec)
mutex_unlock(_mutex);
 }
 
-void buf_lock(struct super_block *sb, sector_t sec)
+void exfat_buf_lock(struct super_block *sb, sector_t sec)
 {
struct buf_cache_t *bp;
 
@@ -470,7 +470,7 @@ void buf_lock(struct super_block *sb, sector_t sec)
mutex_unlock(_mutex);
 }
 
-void buf_unlock(struct super_block *sb, sector_t sec)
+void exfat_buf_unlock(struct super_block *sb, sector_t sec)
 {
struct buf_cache_t *bp;
 
@@ -486,7 +486,7 @@ void buf_unlock(struct super_block *sb, sector_t sec)
mutex_unlock(_mutex);
 }
 
-void buf_release(struct super_block *sb, sector_t sec)
+void exfat_buf_release(struct super_block *sb, sector_t sec)
 {
struct buf_cache_t *bp;
struct fs_info_t *p_fs = &(EXFAT_SB(sb)->fs_info);
@@ -510,7 +510,7 @@ void buf_release(struct super_block *sb, sector_t sec)
mutex_unlock(_mutex);
 }
 
-void buf_release_all(struct super_block *sb)
+void exfat_buf_release_all(struct super_block *sb)
 {
struct buf_cache_t *bp;
struct fs_info_t *p_fs = &(EXFAT_SB(sb)->fs_info);
@@ -535,7 +535,7 

[PATCH 02/12] staging: exfat: Remove FAT/VFAT mount support, part 2

2019-11-12 Thread Valdis Kletnieks
Remove no longer referenced FAT/VFAT routines.

Signed-off-by: Valdis Kletnieks 
---
 drivers/staging/exfat/exfat.h  |  44 --
 drivers/staging/exfat/exfat_core.c | 619 -
 2 files changed, 663 deletions(-)

diff --git a/drivers/staging/exfat/exfat.h b/drivers/staging/exfat/exfat.h
index 68f79e13af2b..9ea865f607af 100644
--- a/drivers/staging/exfat/exfat.h
+++ b/drivers/staging/exfat/exfat.h
@@ -766,17 +766,12 @@ void fs_error(struct super_block *sb);
 
 /* cluster management functions */
 s32 clear_cluster(struct super_block *sb, u32 clu);
-s32 fat_alloc_cluster(struct super_block *sb, s32 num_alloc,
- struct chain_t *p_chain);
 s32 exfat_alloc_cluster(struct super_block *sb, s32 num_alloc,
struct chain_t *p_chain);
-void fat_free_cluster(struct super_block *sb, struct chain_t *p_chain,
- s32 do_relse);
 void exfat_free_cluster(struct super_block *sb, struct chain_t *p_chain,
s32 do_relse);
 u32 find_last_cluster(struct super_block *sb, struct chain_t *p_chain);
 s32 count_num_clusters(struct super_block *sb, struct chain_t *dir);
-s32 fat_count_used_clusters(struct super_block *sb);
 s32 exfat_count_used_clusters(struct super_block *sb);
 void exfat_chain_cont_cluster(struct super_block *sb, u32 chain, s32 len);
 
@@ -793,63 +788,36 @@ s32 load_upcase_table(struct super_block *sb);
 void free_upcase_table(struct super_block *sb);
 
 /* dir entry management functions */
-u32 fat_get_entry_type(struct dentry_t *p_entry);
 u32 exfat_get_entry_type(struct dentry_t *p_entry);
-void fat_set_entry_type(struct dentry_t *p_entry, u32 type);
 void exfat_set_entry_type(struct dentry_t *p_entry, u32 type);
-u32 fat_get_entry_attr(struct dentry_t *p_entry);
 u32 exfat_get_entry_attr(struct dentry_t *p_entry);
-void fat_set_entry_attr(struct dentry_t *p_entry, u32 attr);
 void exfat_set_entry_attr(struct dentry_t *p_entry, u32 attr);
-u8 fat_get_entry_flag(struct dentry_t *p_entry);
 u8 exfat_get_entry_flag(struct dentry_t *p_entry);
-void fat_set_entry_flag(struct dentry_t *p_entry, u8 flag);
 void exfat_set_entry_flag(struct dentry_t *p_entry, u8 flag);
-u32 fat_get_entry_clu0(struct dentry_t *p_entry);
 u32 exfat_get_entry_clu0(struct dentry_t *p_entry);
-void fat_set_entry_clu0(struct dentry_t *p_entry, u32 start_clu);
 void exfat_set_entry_clu0(struct dentry_t *p_entry, u32 start_clu);
-u64 fat_get_entry_size(struct dentry_t *p_entry);
 u64 exfat_get_entry_size(struct dentry_t *p_entry);
-void fat_set_entry_size(struct dentry_t *p_entry, u64 size);
 void exfat_set_entry_size(struct dentry_t *p_entry, u64 size);
 struct timestamp_t *tm_current(struct timestamp_t *tm);
-void fat_get_entry_time(struct dentry_t *p_entry, struct timestamp_t *tp,
-   u8 mode);
 void exfat_get_entry_time(struct dentry_t *p_entry, struct timestamp_t *tp,
  u8 mode);
-void fat_set_entry_time(struct dentry_t *p_entry, struct timestamp_t *tp,
-   u8 mode);
 void exfat_set_entry_time(struct dentry_t *p_entry, struct timestamp_t *tp,
  u8 mode);
-s32 fat_init_dir_entry(struct super_block *sb, struct chain_t *p_dir, s32 
entry,
-  u32 type, u32 start_clu, u64 size);
 s32 exfat_init_dir_entry(struct super_block *sb, struct chain_t *p_dir,
 s32 entry, u32 type, u32 start_clu, u64 size);
-s32 fat_init_ext_dir_entry(struct super_block *sb, struct chain_t *p_dir,
-  s32 entry, s32 num_entries,
-  struct uni_name_t *p_uniname,
-  struct dos_name_t *p_dosname);
 s32 exfat_init_ext_dir_entry(struct super_block *sb, struct chain_t *p_dir,
 s32 entry, s32 num_entries,
 struct uni_name_t *p_uniname,
struct dos_name_t *p_dosname);
-void init_dos_entry(struct dos_dentry_t *ep, u32 type, u32 start_clu);
-void init_ext_entry(struct ext_dentry_t *ep, s32 order, u8 chksum,
-   u16 *uniname);
 void init_file_entry(struct file_dentry_t *ep, u32 type);
 void init_strm_entry(struct strm_dentry_t *ep, u8 flags, u32 start_clu,
 u64 size);
 void init_name_entry(struct name_dentry_t *ep, u16 *uniname);
-void fat_delete_dir_entry(struct super_block *sb, struct chain_t *p_dir,
- s32 entry, s32 order, s32 num_entries);
 void exfat_delete_dir_entry(struct super_block *sb, struct chain_t *p_dir,
s32 entry, s32 order, s32 num_entries);
 
 s32 find_location(struct super_block *sb, struct chain_t *p_dir, s32 entry,
  sector_t *sector, s32 *offset);
-struct dentry_t *get_entry_with_sector(struct super_block *sb, sector_t sector,
-  s32 offset);
 struct dentry_t *get_entry_in_dir(struct super_block *sb, struct chain_t 
*p_dir

[PATCH 04/12] staging: exfat: Remove FAT/VFAT mount support, part 4

2019-11-12 Thread Valdis Kletnieks
The code simplification from the previous patch rendered a few more
routines unreferenced, so heave them over the side as well.

Signed-off-by: Valdis Kletnieks 
---
 drivers/staging/exfat/exfat.h  |  19 ---
 drivers/staging/exfat/exfat_core.c | 137 
 drivers/staging/exfat/exfat_nls.c  | 192 -
 3 files changed, 348 deletions(-)

diff --git a/drivers/staging/exfat/exfat.h b/drivers/staging/exfat/exfat.h
index 9ea865f607af..470e409ef536 100644
--- a/drivers/staging/exfat/exfat.h
+++ b/drivers/staging/exfat/exfat.h
@@ -729,14 +729,7 @@ static inline struct exfat_inode_info *EXFAT_I(struct 
inode *inode)
 
 /* NLS management function */
 u16 nls_upper(struct super_block *sb, u16 a);
-int nls_dosname_cmp(struct super_block *sb, u8 *a, u8 *b);
 int nls_uniname_cmp(struct super_block *sb, u16 *a, u16 *b);
-void nls_uniname_to_dosname(struct super_block *sb,
-   struct dos_name_t *p_dosname,
-   struct uni_name_t *p_uniname, bool *p_lossy);
-void nls_dosname_to_uniname(struct super_block *sb,
-   struct uni_name_t *p_uniname,
-   struct dos_name_t *p_dosname);
 void nls_uniname_to_cstring(struct super_block *sb, u8 *p_cstring,
struct uni_name_t *p_uniname);
 void nls_cstring_to_uniname(struct super_block *sb,
@@ -805,10 +798,6 @@ void exfat_set_entry_time(struct dentry_t *p_entry, struct 
timestamp_t *tp,
  u8 mode);
 s32 exfat_init_dir_entry(struct super_block *sb, struct chain_t *p_dir,
 s32 entry, u32 type, u32 start_clu, u64 size);
-s32 exfat_init_ext_dir_entry(struct super_block *sb, struct chain_t *p_dir,
-s32 entry, s32 num_entries,
-struct uni_name_t *p_uniname,
-   struct dos_name_t *p_dosname);
 void init_file_entry(struct file_dentry_t *ep, u32 type);
 void init_strm_entry(struct strm_dentry_t *ep, u8 flags, u32 start_clu,
 u64 size);
@@ -850,25 +839,17 @@ bool is_dir_empty(struct super_block *sb, struct chain_t 
*p_dir);
 s32 get_num_entries_and_dos_name(struct super_block *sb, struct chain_t *p_dir,
 struct uni_name_t *p_uniname, s32 *entries,
 struct dos_name_t *p_dosname);
-void get_uni_name_from_dos_entry(struct super_block *sb,
-struct dos_dentry_t *ep,
-struct uni_name_t *p_uniname, u8 mode);
 void exfat_get_uni_name_from_ext_entry(struct super_block *sb,
   struct chain_t *p_dir, s32 entry,
   u16 *uniname);
 s32 extract_uni_name_from_name_entry(struct name_dentry_t *ep,
 u16 *uniname, s32 order);
-s32 fat_generate_dos_name(struct super_block *sb, struct chain_t *p_dir,
- struct dos_name_t *p_dosname);
-void fat_attach_count_to_dos_name(u8 *dosname, s32 count);
-s32 fat_calc_num_entries(struct uni_name_t *p_uniname);
 s32 exfat_calc_num_entries(struct uni_name_t *p_uniname);
 u16 calc_checksum_2byte(void *data, s32 len, u16 chksum, s32 type);
 
 /* name resolution functions */
 s32 resolve_path(struct inode *inode, char *path, struct chain_t *p_dir,
 struct uni_name_t *p_uniname);
-s32 resolve_name(u8 *name, u8 **arg);
 
 /* file operation functions */
 s32 exfat_mount(struct super_block *sb, struct pbr_sector_t *p_pbr);
diff --git a/drivers/staging/exfat/exfat_core.c 
b/drivers/staging/exfat/exfat_core.c
index 77b826dfdeda..c3454e883e3c 100644
--- a/drivers/staging/exfat/exfat_core.c
+++ b/drivers/staging/exfat/exfat_core.c
@@ -1976,21 +1976,6 @@ s32 get_num_entries_and_dos_name(struct super_block *sb, 
struct chain_t *p_dir,
return 0;
 }
 
-void get_uni_name_from_dos_entry(struct super_block *sb,
-struct dos_dentry_t *ep,
-struct uni_name_t *p_uniname, u8 mode)
-{
-   struct dos_name_t dos_name;
-
-   if (mode == 0x0)
-   dos_name.name_case = 0x0;
-   else
-   dos_name.name_case = ep->lcase;
-
-   memcpy(dos_name.name, ep->name, DOS_NAME_LENGTH);
-   nls_dosname_to_uniname(sb, p_uniname, _name);
-}
-
 void exfat_get_uni_name_from_ext_entry(struct super_block *sb,
   struct chain_t *p_dir, s32 entry,
   u16 *uniname)
@@ -2045,128 +2030,6 @@ s32 extract_uni_name_from_name_entry(struct 
name_dentry_t *ep, u16 *uniname,
return len;
 }
 
-s32 fat_generate_dos_name(struct super_block *sb, struct chain_t *p_dir,
- struct dos_name_t *p_dosname)
-{
-   int i, j, count = 0;
-   bool count_begin = false;
-   s32 dentries_per_clu;
-   u32 type;
-   u8 bmap[128/* 1 ~ 1023 */];
-   

[PATCH 06/12] staging: exfat: Clean up the namespace pollution part 2

2019-11-12 Thread Valdis Kletnieks
Rename all the bdev_* to exfat_bdev_*

Signed-off-by: Valdis Kletnieks 
---
 drivers/staging/exfat/exfat.h| 10 +-
 drivers/staging/exfat/exfat_blkdev.c | 10 +-
 drivers/staging/exfat/exfat_core.c   |  8 
 drivers/staging/exfat/exfat_super.c  | 16 
 4 files changed, 22 insertions(+), 22 deletions(-)

diff --git a/drivers/staging/exfat/exfat.h b/drivers/staging/exfat/exfat.h
index 5efba3d4259b..5044523ccb97 100644
--- a/drivers/staging/exfat/exfat.h
+++ b/drivers/staging/exfat/exfat.h
@@ -842,13 +842,13 @@ int multi_sector_read(struct super_block *sb, sector_t 
sec,
 int multi_sector_write(struct super_block *sb, sector_t sec,
   struct buffer_head *bh, s32 num_secs, bool sync);
 
-void bdev_open(struct super_block *sb);
-void bdev_close(struct super_block *sb);
-int bdev_read(struct super_block *sb, sector_t secno,
+void exfat_bdev_open(struct super_block *sb);
+void exfat_bdev_close(struct super_block *sb);
+int exfat_bdev_read(struct super_block *sb, sector_t secno,
  struct buffer_head **bh, u32 num_secs, bool read);
-int bdev_write(struct super_block *sb, sector_t secno,
+int exfat_bdev_write(struct super_block *sb, sector_t secno,
   struct buffer_head *bh, u32 num_secs, bool sync);
-int bdev_sync(struct super_block *sb);
+int exfat_bdev_sync(struct super_block *sb);
 
 extern const u8 uni_upcase[];
 #endif /* _EXFAT_H */
diff --git a/drivers/staging/exfat/exfat_blkdev.c 
b/drivers/staging/exfat/exfat_blkdev.c
index 0abae041f632..7bcd98b13109 100644
--- a/drivers/staging/exfat/exfat_blkdev.c
+++ b/drivers/staging/exfat/exfat_blkdev.c
@@ -8,7 +8,7 @@
 #include 
 #include "exfat.h"
 
-void bdev_open(struct super_block *sb)
+void exfat_bdev_open(struct super_block *sb)
 {
struct bd_info_t *p_bd = &(EXFAT_SB(sb)->bd_info);
 
@@ -23,14 +23,14 @@ void bdev_open(struct super_block *sb)
p_bd->opened = true;
 }
 
-void bdev_close(struct super_block *sb)
+void exfat_bdev_close(struct super_block *sb)
 {
struct bd_info_t *p_bd = &(EXFAT_SB(sb)->bd_info);
 
p_bd->opened = false;
 }
 
-int bdev_read(struct super_block *sb, sector_t secno, struct buffer_head **bh,
+int exfat_bdev_read(struct super_block *sb, sector_t secno, struct buffer_head 
**bh,
  u32 num_secs, bool read)
 {
struct bd_info_t *p_bd = &(EXFAT_SB(sb)->bd_info);
@@ -65,7 +65,7 @@ int bdev_read(struct super_block *sb, sector_t secno, struct 
buffer_head **bh,
return -EIO;
 }
 
-int bdev_write(struct super_block *sb, sector_t secno, struct buffer_head *bh,
+int exfat_bdev_write(struct super_block *sb, sector_t secno, struct 
buffer_head *bh,
   u32 num_secs, bool sync)
 {
s32 count;
@@ -118,7 +118,7 @@ int bdev_write(struct super_block *sb, sector_t secno, 
struct buffer_head *bh,
return -EIO;
 }
 
-int bdev_sync(struct super_block *sb)
+int exfat_bdev_sync(struct super_block *sb)
 {
struct bd_info_t *p_bd = &(EXFAT_SB(sb)->bd_info);
 #ifdef CONFIG_EXFAT_KERNEL_DEBUG
diff --git a/drivers/staging/exfat/exfat_core.c 
b/drivers/staging/exfat/exfat_core.c
index 2dc07e81bad0..5a01fc25f31d 100644
--- a/drivers/staging/exfat/exfat_core.c
+++ b/drivers/staging/exfat/exfat_core.c
@@ -2569,7 +2569,7 @@ int sector_read(struct super_block *sb, sector_t sec, 
struct buffer_head **bh,
}
 
if (!p_fs->dev_ejected) {
-   ret = bdev_read(sb, sec, bh, 1, read);
+   ret = exfat_bdev_read(sb, sec, bh, 1, read);
if (ret != 0)
p_fs->dev_ejected = 1;
}
@@ -2598,7 +2598,7 @@ int sector_write(struct super_block *sb, sector_t sec, 
struct buffer_head *bh,
}
 
if (!p_fs->dev_ejected) {
-   ret = bdev_write(sb, sec, bh, 1, sync);
+   ret = exfat_bdev_write(sb, sec, bh, 1, sync);
if (ret != 0)
p_fs->dev_ejected = 1;
}
@@ -2621,7 +2621,7 @@ int multi_sector_read(struct super_block *sb, sector_t 
sec,
}
 
if (!p_fs->dev_ejected) {
-   ret = bdev_read(sb, sec, bh, num_secs, read);
+   ret = exfat_bdev_read(sb, sec, bh, num_secs, read);
if (ret != 0)
p_fs->dev_ejected = 1;
}
@@ -2649,7 +2649,7 @@ int multi_sector_write(struct super_block *sb, sector_t 
sec,
}
 
if (!p_fs->dev_ejected) {
-   ret = bdev_write(sb, sec, bh, num_secs, sync);
+   ret = exfat_bdev_write(sb, sec, bh, num_secs, sync);
if (ret != 0)
p_fs->dev_ejected = 1;
}
diff --git a/drivers/staging/exfat/exfat_super.c 
b/drivers/staging/exfat/exfat_super.c
index cf094458b5d2..7309053105d8 100644
--- a/drivers/staging/exfat/exfat_super.c
+++ b/drivers/staging/exfat/exfat_super.c
@@ -289,7 +289,7 @@ static DEFINE_MUTEX(z_mute

[PATCH 08/12] staging: exfat: Clean up the namespace pollution part 4

2019-11-12 Thread Valdis Kletnieks
Relocating these functions to before first use lets us make them static

Signed-off-by: Valdis Kletnieks 
---
 drivers/staging/exfat/exfat.h  |  4 --
 drivers/staging/exfat/exfat_core.c | 78 +++---
 2 files changed, 39 insertions(+), 43 deletions(-)

diff --git a/drivers/staging/exfat/exfat.h b/drivers/staging/exfat/exfat.h
index 407dbb017c5f..48267dd11e9d 100644
--- a/drivers/staging/exfat/exfat.h
+++ b/drivers/staging/exfat/exfat.h
@@ -775,10 +775,6 @@ void free_upcase_table(struct super_block *sb);
 
 /* dir entry management functions */
 struct timestamp_t *tm_current(struct timestamp_t *tm);
-void init_file_entry(struct file_dentry_t *ep, u32 type);
-void init_strm_entry(struct strm_dentry_t *ep, u8 flags, u32 start_clu,
-u64 size);
-void init_name_entry(struct name_dentry_t *ep, u16 *uniname);
 
 struct dentry_t *get_entry_in_dir(struct super_block *sb, struct chain_t 
*p_dir,
  s32 entry, sector_t *sector);
diff --git a/drivers/staging/exfat/exfat_core.c 
b/drivers/staging/exfat/exfat_core.c
index 3ea51d12c38d..24700b251acb 100644
--- a/drivers/staging/exfat/exfat_core.c
+++ b/drivers/staging/exfat/exfat_core.c
@@ -971,6 +971,45 @@ static void exfat_set_entry_time(struct dentry_t *p_entry, 
struct timestamp_t *t
}
 }
 
+static void init_file_entry(struct file_dentry_t *ep, u32 type)
+{
+   struct timestamp_t tm, *tp;
+
+   exfat_set_entry_type((struct dentry_t *)ep, type);
+
+   tp = tm_current();
+   exfat_set_entry_time((struct dentry_t *)ep, tp, TM_CREATE);
+   exfat_set_entry_time((struct dentry_t *)ep, tp, TM_MODIFY);
+   exfat_set_entry_time((struct dentry_t *)ep, tp, TM_ACCESS);
+   ep->create_time_ms = 0;
+   ep->modify_time_ms = 0;
+   ep->access_time_ms = 0;
+}
+
+static void init_strm_entry(struct strm_dentry_t *ep, u8 flags, u32 start_clu, 
u64 size)
+{
+   exfat_set_entry_type((struct dentry_t *)ep, TYPE_STREAM);
+   ep->flags = flags;
+   SET32_A(ep->start_clu, start_clu);
+   SET64_A(ep->valid_size, size);
+   SET64_A(ep->size, size);
+}
+
+static void init_name_entry(struct name_dentry_t *ep, u16 *uniname)
+{
+   int i;
+
+   exfat_set_entry_type((struct dentry_t *)ep, TYPE_EXTEND);
+   ep->flags = 0x0;
+
+   for (i = 0; i < 30; i++, i++) {
+   SET16_A(ep->unicode_0_14 + i, *uniname);
+   if (*uniname == 0x0)
+   break;
+   uniname++;
+   }
+}
+
 static s32 exfat_init_dir_entry(struct super_block *sb, struct chain_t *p_dir,
 s32 entry, u32 type, u32 start_clu, u64 size)
 {
@@ -1047,45 +1086,6 @@ static s32 exfat_init_ext_entry(struct super_block *sb, 
struct chain_t *p_dir,
return 0;
 }
 
-void init_file_entry(struct file_dentry_t *ep, u32 type)
-{
-   struct timestamp_t tm, *tp;
-
-   exfat_set_entry_type((struct dentry_t *)ep, type);
-
-   tp = tm_current();
-   exfat_set_entry_time((struct dentry_t *)ep, tp, TM_CREATE);
-   exfat_set_entry_time((struct dentry_t *)ep, tp, TM_MODIFY);
-   exfat_set_entry_time((struct dentry_t *)ep, tp, TM_ACCESS);
-   ep->create_time_ms = 0;
-   ep->modify_time_ms = 0;
-   ep->access_time_ms = 0;
-}
-
-void init_strm_entry(struct strm_dentry_t *ep, u8 flags, u32 start_clu, u64 
size)
-{
-   exfat_set_entry_type((struct dentry_t *)ep, TYPE_STREAM);
-   ep->flags = flags;
-   SET32_A(ep->start_clu, start_clu);
-   SET64_A(ep->valid_size, size);
-   SET64_A(ep->size, size);
-}
-
-void init_name_entry(struct name_dentry_t *ep, u16 *uniname)
-{
-   int i;
-
-   exfat_set_entry_type((struct dentry_t *)ep, TYPE_EXTEND);
-   ep->flags = 0x0;
-
-   for (i = 0; i < 30; i++, i++) {
-   SET16_A(ep->unicode_0_14 + i, *uniname);
-   if (*uniname == 0x0)
-   break;
-   uniname++;
-   }
-}
-
 static void exfat_delete_dir_entry(struct super_block *sb, struct chain_t 
*p_dir,
s32 entry, s32 order, s32 num_entries)
 {
-- 
2.24.0

___
devel mailing list
de...@linuxdriverproject.org
http://driverdev.linuxdriverproject.org/mailman/listinfo/driverdev-devel


[PATCH 09/12] staging: exfat: Clean up the namespace pollution part 5

2019-11-12 Thread Valdis Kletnieks
Some more functions that can be moved and made static

Signed-off-by: Valdis Kletnieks 
---
 drivers/staging/exfat/exfat.h  |   3 -
 drivers/staging/exfat/exfat_core.c | 182 ++---
 2 files changed, 91 insertions(+), 94 deletions(-)

diff --git a/drivers/staging/exfat/exfat.h b/drivers/staging/exfat/exfat.h
index 48267dd11e9d..c41fc3ec9f29 100644
--- a/drivers/staging/exfat/exfat.h
+++ b/drivers/staging/exfat/exfat.h
@@ -764,9 +764,6 @@ void exfat_chain_cont_cluster(struct super_block *sb, u32 
chain, s32 len);
 /* allocation bitmap management functions */
 s32 load_alloc_bitmap(struct super_block *sb);
 void free_alloc_bitmap(struct super_block *sb);
-s32 set_alloc_bitmap(struct super_block *sb, u32 clu);
-s32 clr_alloc_bitmap(struct super_block *sb, u32 clu);
-u32 test_alloc_bitmap(struct super_block *sb, u32 clu);
 void sync_alloc_bitmap(struct super_block *sb);
 
 /* upcase table management functions */
diff --git a/drivers/staging/exfat/exfat_core.c 
b/drivers/staging/exfat/exfat_core.c
index 24700b251acb..8d38f70c9726 100644
--- a/drivers/staging/exfat/exfat_core.c
+++ b/drivers/staging/exfat/exfat_core.c
@@ -156,6 +156,97 @@ static s32 clear_cluster(struct super_block *sb, u32 clu)
return ret;
 }
 
+static s32 set_alloc_bitmap(struct super_block *sb, u32 clu)
+{
+   int i, b;
+   sector_t sector;
+   struct fs_info_t *p_fs = &(EXFAT_SB(sb)->fs_info);
+   struct bd_info_t *p_bd = &(EXFAT_SB(sb)->bd_info);
+
+   i = clu >> (p_bd->sector_size_bits + 3);
+   b = clu & ((p_bd->sector_size << 3) - 1);
+
+   sector = START_SECTOR(p_fs->map_clu) + i;
+
+   exfat_bitmap_set((u8 *)p_fs->vol_amap[i]->b_data, b);
+
+   return sector_write(sb, sector, p_fs->vol_amap[i], 0);
+}
+
+static s32 clr_alloc_bitmap(struct super_block *sb, u32 clu)
+{
+   int i, b;
+   sector_t sector;
+#ifdef CONFIG_EXFAT_DISCARD
+   struct exfat_sb_info *sbi = EXFAT_SB(sb);
+   struct exfat_mount_options *opts = >options;
+   int ret;
+#endif /* CONFIG_EXFAT_DISCARD */
+   struct fs_info_t *p_fs = &(EXFAT_SB(sb)->fs_info);
+   struct bd_info_t *p_bd = &(EXFAT_SB(sb)->bd_info);
+
+   i = clu >> (p_bd->sector_size_bits + 3);
+   b = clu & ((p_bd->sector_size << 3) - 1);
+
+   sector = START_SECTOR(p_fs->map_clu) + i;
+
+   exfat_bitmap_clear((u8 *)p_fs->vol_amap[i]->b_data, b);
+
+   return sector_write(sb, sector, p_fs->vol_amap[i], 0);
+
+#ifdef CONFIG_EXFAT_DISCARD
+   if (opts->discard) {
+   ret = sb_issue_discard(sb, START_SECTOR(clu),
+  (1 << p_fs->sectors_per_clu_bits),
+  GFP_NOFS, 0);
+   if (ret == -EOPNOTSUPP) {
+   pr_warn("discard not supported by device, disabling");
+   opts->discard = 0;
+   }
+   }
+#endif /* CONFIG_EXFAT_DISCARD */
+}
+
+static u32 test_alloc_bitmap(struct super_block *sb, u32 clu)
+{
+   int i, map_i, map_b;
+   u32 clu_base, clu_free;
+   u8 k, clu_mask;
+   struct fs_info_t *p_fs = &(EXFAT_SB(sb)->fs_info);
+   struct bd_info_t *p_bd = &(EXFAT_SB(sb)->bd_info);
+
+   clu_base = (clu & ~(0x7)) + 2;
+   clu_mask = (1 << (clu - clu_base + 2)) - 1;
+
+   map_i = clu >> (p_bd->sector_size_bits + 3);
+   map_b = (clu >> 3) & p_bd->sector_size_mask;
+
+   for (i = 2; i < p_fs->num_clusters; i += 8) {
+   k = *(((u8 *)p_fs->vol_amap[map_i]->b_data) + map_b);
+   if (clu_mask > 0) {
+   k |= clu_mask;
+   clu_mask = 0;
+   }
+   if (k < 0xFF) {
+   clu_free = clu_base + free_bit[k];
+   if (clu_free < p_fs->num_clusters)
+   return clu_free;
+   }
+   clu_base += 8;
+
+   if (((++map_b) >= p_bd->sector_size) ||
+   (clu_base >= p_fs->num_clusters)) {
+   if ((++map_i) >= p_fs->map_sectors) {
+   clu_base = 2;
+   map_i = 0;
+   }
+   map_b = 0;
+   }
+   }
+
+   return CLUSTER_32(~0);
+}
+
 static s32 exfat_alloc_cluster(struct super_block *sb, s32 num_alloc,
struct chain_t *p_chain)
 {
@@ -468,97 +559,6 @@ void free_alloc_bitmap(struct super_block *sb)
p_fs->vol_amap = NULL;
 }
 
-s32 set_alloc_bitmap(struct super_block *sb, u32 clu)
-{
-   int i, b;
-   sector_t sector;
-   struct fs_info_t *p_fs = &(EXFAT_SB(sb)->fs_info);
-   struct bd_info_t *p_bd = &(EXFAT_SB(sb)->bd_info);
-
- 

[PATCH 10/12] staging: exfat: Clean up the namespace pollution part 6

2019-11-12 Thread Valdis Kletnieks
Move a few more things so we can make them static and clear exfat.h out.
At this point, pretty much everything that can be static is static.
(Note: FAT_sync(), buf_sync(), and sync_alloc_bitmap() aren't called
anyplace, but aren't static because (a) that will toss an error and
(b) they probably *should* be getting called someplace

Signed-off-by: Valdis Kletnieks 
---
 drivers/staging/exfat/exfat.h  |   8 --
 drivers/staging/exfat/exfat_core.c | 170 ++---
 2 files changed, 85 insertions(+), 93 deletions(-)

diff --git a/drivers/staging/exfat/exfat.h b/drivers/staging/exfat/exfat.h
index c41fc3ec9f29..188ea1bd7162 100644
--- a/drivers/staging/exfat/exfat.h
+++ b/drivers/staging/exfat/exfat.h
@@ -780,12 +780,6 @@ struct entry_set_cache_t *get_entry_set_in_dir(struct 
super_block *sb,
   u32 type,
   struct dentry_t **file_ep);
 void release_entry_set(struct entry_set_cache_t *es);
-s32 write_whole_entry_set(struct super_block *sb, struct entry_set_cache_t 
*es);
-s32 write_partial_entries_in_entry_set(struct super_block *sb,
-  struct entry_set_cache_t *es,
-  struct dentry_t *ep, u32 count);
-s32 search_deleted_or_unused_entry(struct super_block *sb,
-  struct chain_t *p_dir, s32 num_entries);
 s32 count_dos_name_entries(struct super_block *sb, struct chain_t *p_dir,
   u32 type);
 void update_dir_checksum(struct super_block *sb, struct chain_t *p_dir,
@@ -798,8 +792,6 @@ bool is_dir_empty(struct super_block *sb, struct chain_t 
*p_dir);
 s32 get_num_entries_and_dos_name(struct super_block *sb, struct chain_t *p_dir,
 struct uni_name_t *p_uniname, s32 *entries,
 struct dos_name_t *p_dosname);
-s32 extract_uni_name_from_name_entry(struct name_dentry_t *ep,
-u16 *uniname, s32 order);
 u16 calc_checksum_2byte(void *data, s32 len, u16 chksum, s32 type);
 
 /* name resolution functions */
diff --git a/drivers/staging/exfat/exfat_core.c 
b/drivers/staging/exfat/exfat_core.c
index 8d38f70c9726..3cc13aaaed24 100644
--- a/drivers/staging/exfat/exfat_core.c
+++ b/drivers/staging/exfat/exfat_core.c
@@ -1140,6 +1140,73 @@ void update_dir_checksum(struct super_block *sb, struct 
chain_t *p_dir,
buf_unlock(sb, sector);
 }
 
+static s32 __write_partial_entries_in_entry_set(struct super_block *sb,
+   struct entry_set_cache_t *es,
+   sector_t sec, s32 off, u32 
count)
+{
+   s32 num_entries, buf_off = (off - es->offset);
+   u32 remaining_byte_in_sector, copy_entries;
+   struct fs_info_t *p_fs = &(EXFAT_SB(sb)->fs_info);
+   struct bd_info_t *p_bd = &(EXFAT_SB(sb)->bd_info);
+   u32 clu;
+   u8 *buf, *esbuf = (u8 *)>__buf;
+
+   pr_debug("%s entered es %p sec %llu off %d count %d\n",
+__func__, es, (unsigned long long)sec, off, count);
+   num_entries = count;
+
+   while (num_entries) {
+   /* white per sector base */
+   remaining_byte_in_sector = (1 << p_bd->sector_size_bits) - off;
+   copy_entries = min_t(s32,
+remaining_byte_in_sector >> 
DENTRY_SIZE_BITS,
+num_entries);
+   buf = buf_getblk(sb, sec);
+   if (!buf)
+   goto err_out;
+   pr_debug("es->buf %p buf_off %u\n", esbuf, buf_off);
+   pr_debug("copying %d entries from %p to sector %llu\n",
+copy_entries, (esbuf + buf_off),
+(unsigned long long)sec);
+   memcpy(buf + off, esbuf + buf_off,
+  copy_entries << DENTRY_SIZE_BITS);
+   buf_modify(sb, sec);
+   num_entries -= copy_entries;
+
+   if (num_entries) {
+   /* get next sector */
+   if (IS_LAST_SECTOR_IN_CLUSTER(sec)) {
+   clu = GET_CLUSTER_FROM_SECTOR(sec);
+   if (es->alloc_flag == 0x03) {
+   clu++;
+   } else {
+   if (FAT_read(sb, clu, ) == -1)
+   goto err_out;
+   }
+   sec = START_SECTOR(clu);
+   } else {
+   sec++;
+   }
+   off = 0;
+   buf_off += copy_entries << DENTRY_SIZE_BITS;
+   }
+   }
+
+   pr_debug("%s exit

[PATCH 05/12] staging: exfat: Clean up the namespace pollution part 1

2019-11-12 Thread Valdis Kletnieks
Everything referenced in the struct fs_func exfat_fs_func is located
in that same .c file.  Make them static and remove from exfat.h

Signed-off-by: Valdis Kletnieks 
---
 drivers/staging/exfat/exfat.h  | 32 ---
 drivers/staging/exfat/exfat_core.c | 42 +++---
 2 files changed, 21 insertions(+), 53 deletions(-)

diff --git a/drivers/staging/exfat/exfat.h b/drivers/staging/exfat/exfat.h
index 470e409ef536..5efba3d4259b 100644
--- a/drivers/staging/exfat/exfat.h
+++ b/drivers/staging/exfat/exfat.h
@@ -759,13 +759,8 @@ void fs_error(struct super_block *sb);
 
 /* cluster management functions */
 s32 clear_cluster(struct super_block *sb, u32 clu);
-s32 exfat_alloc_cluster(struct super_block *sb, s32 num_alloc,
-   struct chain_t *p_chain);
-void exfat_free_cluster(struct super_block *sb, struct chain_t *p_chain,
-   s32 do_relse);
 u32 find_last_cluster(struct super_block *sb, struct chain_t *p_chain);
 s32 count_num_clusters(struct super_block *sb, struct chain_t *dir);
-s32 exfat_count_used_clusters(struct super_block *sb);
 void exfat_chain_cont_cluster(struct super_block *sb, u32 chain, s32 len);
 
 /* allocation bitmap management functions */
@@ -781,29 +776,11 @@ s32 load_upcase_table(struct super_block *sb);
 void free_upcase_table(struct super_block *sb);
 
 /* dir entry management functions */
-u32 exfat_get_entry_type(struct dentry_t *p_entry);
-void exfat_set_entry_type(struct dentry_t *p_entry, u32 type);
-u32 exfat_get_entry_attr(struct dentry_t *p_entry);
-void exfat_set_entry_attr(struct dentry_t *p_entry, u32 attr);
-u8 exfat_get_entry_flag(struct dentry_t *p_entry);
-void exfat_set_entry_flag(struct dentry_t *p_entry, u8 flag);
-u32 exfat_get_entry_clu0(struct dentry_t *p_entry);
-void exfat_set_entry_clu0(struct dentry_t *p_entry, u32 start_clu);
-u64 exfat_get_entry_size(struct dentry_t *p_entry);
-void exfat_set_entry_size(struct dentry_t *p_entry, u64 size);
 struct timestamp_t *tm_current(struct timestamp_t *tm);
-void exfat_get_entry_time(struct dentry_t *p_entry, struct timestamp_t *tp,
- u8 mode);
-void exfat_set_entry_time(struct dentry_t *p_entry, struct timestamp_t *tp,
- u8 mode);
-s32 exfat_init_dir_entry(struct super_block *sb, struct chain_t *p_dir,
-s32 entry, u32 type, u32 start_clu, u64 size);
 void init_file_entry(struct file_dentry_t *ep, u32 type);
 void init_strm_entry(struct strm_dentry_t *ep, u8 flags, u32 start_clu,
 u64 size);
 void init_name_entry(struct name_dentry_t *ep, u16 *uniname);
-void exfat_delete_dir_entry(struct super_block *sb, struct chain_t *p_dir,
-   s32 entry, s32 order, s32 num_entries);
 
 s32 find_location(struct super_block *sb, struct chain_t *p_dir, s32 entry,
  sector_t *sector, s32 *offset);
@@ -822,11 +799,6 @@ s32 search_deleted_or_unused_entry(struct super_block *sb,
   struct chain_t *p_dir, s32 num_entries);
 s32 find_empty_entry(struct inode *inode, struct chain_t *p_dir,
 s32 num_entries);
-s32 exfat_find_dir_entry(struct super_block *sb, struct chain_t *p_dir,
-struct uni_name_t *p_uniname, s32 num_entries,
-struct dos_name_t *p_dosname, u32 type);
-s32 exfat_count_ext_entries(struct super_block *sb, struct chain_t *p_dir,
-   s32 entry, struct dentry_t *p_entry);
 s32 count_dos_name_entries(struct super_block *sb, struct chain_t *p_dir,
   u32 type);
 void update_dir_checksum(struct super_block *sb, struct chain_t *p_dir,
@@ -839,12 +811,8 @@ bool is_dir_empty(struct super_block *sb, struct chain_t 
*p_dir);
 s32 get_num_entries_and_dos_name(struct super_block *sb, struct chain_t *p_dir,
 struct uni_name_t *p_uniname, s32 *entries,
 struct dos_name_t *p_dosname);
-void exfat_get_uni_name_from_ext_entry(struct super_block *sb,
-  struct chain_t *p_dir, s32 entry,
-  u16 *uniname);
 s32 extract_uni_name_from_name_entry(struct name_dentry_t *ep,
 u16 *uniname, s32 order);
-s32 exfat_calc_num_entries(struct uni_name_t *p_uniname);
 u16 calc_checksum_2byte(void *data, s32 len, u16 chksum, s32 type);
 
 /* name resolution functions */
diff --git a/drivers/staging/exfat/exfat_core.c 
b/drivers/staging/exfat/exfat_core.c
index c3454e883e3c..2dc07e81bad0 100644
--- a/drivers/staging/exfat/exfat_core.c
+++ b/drivers/staging/exfat/exfat_core.c
@@ -156,7 +156,7 @@ s32 clear_cluster(struct super_block *sb, u32 clu)
return ret;
 }
 
-s32 exfat_alloc_cluster(struct super_block *sb, s32 num_alloc,
+static s32 exfat_alloc_cluster(struct super_block *sb, s32 num_alloc,
struct chain_t

[PATCH 00/12] staging: exfat: Heave FAT/VFAT over the side

2019-11-12 Thread Valdis Kletnieks
The first 4 patches iteratively remove more and more of the
FAT/VFAT code.

The second 8 patches make a lot of functions static, and
renames many of the rest to avoid namespace pollution.

Valdis Kletnieks (12):
  staging: exfat: Remove FAT/VFAT mount support, part 1
  staging: exfat: Remove FAT/VFAT mount support, part 2
  staging: exfat: Remove FAT/VFAT mount support, part 3
  staging: exfat: Remove FAT/VFAT mount support, part 4
  staging: exfat: Clean up the namespace pollution part 1
  staging: exfat: Clean up the namespace pollution part 2
  staging: exfat: Clean up the namespace pollution part 3
  staging: exfat: Clean up the namespace pollution part 4
  staging: exfat: Clean up the namespace pollution part 5
  staging: exfat: Clean up the namespace pollution part 6
  staging: exfat: Clean up the namespace pollution part 7
  staging: exfat: Clean up the namespace pollution part 8

 drivers/staging/exfat/Kconfig|9 -
 drivers/staging/exfat/exfat.h|  160 +--
 drivers/staging/exfat/exfat_blkdev.c |   10 +-
 drivers/staging/exfat/exfat_cache.c  |  251 +---
 drivers/staging/exfat/exfat_core.c   | 1896 ++
 drivers/staging/exfat/exfat_nls.c|  192 ---
 drivers/staging/exfat/exfat_super.c  |  359 ++---
 7 files changed, 595 insertions(+), 2282 deletions(-)

-- 
2.24.0

___
devel mailing list
de...@linuxdriverproject.org
http://driverdev.linuxdriverproject.org/mailman/listinfo/driverdev-devel


[PATCH] staging: exfat: Update the TODO file

2019-11-12 Thread Valdis Kletnieks
Updating with the current laundry list of things that need attention.

Signed-off-by: Valdis Kletnieks 
---
 drivers/staging/exfat/TODO | 70 --
 1 file changed, 59 insertions(+), 11 deletions(-)

diff --git a/drivers/staging/exfat/TODO b/drivers/staging/exfat/TODO
index b60e50b9cf4e..a283ce534cf4 100644
--- a/drivers/staging/exfat/TODO
+++ b/drivers/staging/exfat/TODO
@@ -1,17 +1,22 @@
+A laundry list of things that need looking at, most of which will
+require more work than the average checkpatch cleanup...
+
+Note that some of these entries may not be bugs - they're things
+that need to be looked at, and *possibly* fixed.
+
+Clean up the ffsCamelCase function names.
+
+Fix (thing)->flags to not use magic numbers - multiple offenders
+
+Sort out all the s32/u32/u8 nonsense - most of these should be plain int.
+
 exfat_core.c - ffsReadFile - the goto err_out seem to leak a brelse().
 same for ffsWriteFile.
 
-exfat_core.c - fs_sync(sb,0) all over the place looks fishy as hell.
-There's only one place that calls it with a non-zero argument.
-Randomly removing fs_sync() calls is *not* the right answer, especially
-if the removal then leaves a call to fs_set_vol_flags(VOL_CLEAN), as that
-says the file system is clean and synced when we *know* it isn't.
-The proper fix here is to go through and actually analyze how DELAYED_SYNC
-should work, and any time we're setting VOL_CLEAN, ensure the file system
-has in fact been synced to disk.  In other words, changing the 'false' to
-'true' is probably more correct. Also, it's likely that the one current
-place where it actually does an bdev_sync isn't sufficient in the DELAYED_SYNC
-case.
+All the calls to fs_sync() need to be looked at, particularly in the
+context of EXFAT_DELAYED_SYNC. Currently, if that's defined, we only
+flush to disk when sync() gets called.  We should be doing at least
+metadata flushes at appropriate times.
 
 ffsTruncateFile -  if (old_size <= new_size) {
 That doesn't look right. How did it ever work? Are they relying on lazy
@@ -19,3 +24,46 @@ block allocation when actual writes happen? If nothing else, 
it never
 does the 'fid->size = new_size' and do the inode update
 
 ffsSetAttr() is just dangling in the breeze, not wired up at all...
+
+Convert global mutexes to a per-superblock mutex.
+
+Right now, we load exactly one UTF-8 table. Check to see
+if that plays nice with different codepage and iocharset values
+for simultanous mounts of different devices
+
+exfat_rmdir() checks for -EBUSY but ffsRemoveDir() doesn't return it.
+In fact, there's a complete lack of -EBUSY testing anywhere.
+
+There's probably a few missing checks for -EEXIST
+
+check return codes of sync_dirty_buffer()
+
+Why is remove_file doing a num_entries++??
+
+Double check a lot of can't-happen parameter checks (for null pointers for
+things that have only one call site and can't pass a null, etc).
+
+All the DEBUG stuff can probably be tossed, including the ioctl(). Either
+that, or convert to a proper fault-injection system.
+
+exfat_remount does exactly one thing.  Fix to actually deal with remount
+options, particularly handling R/O correctly.  For that matter, allow
+R/O mounts in the first place.
+
+Figure out why the VFAT code used multi_sector_(read|write) but the
+exfat code doesn't use it. The difference matters on SSDs with wear leveling.
+
+exfat_fat_sync(), exfat_buf_sync(), and sync_alloc_bitmap()
+aren't called anyplace
+
+Create helper function for exfat_set_entry_time() and exfat_set_entry_type()
+because it's sort of ugly to be calling the same functionn directly and
+other code calling through the fs_func struc ponters...
+
+clean up the remaining vol_type checks, which are of two types:
+some are ?: operators with magic numbers, and the rest are places
+where we're doing stuff with '.' and '..'.
+
+Patches to:
+   Greg Kroah-Hartman 
+   Valdis Kletnieks 
-- 
2.24.0

___
devel mailing list
de...@linuxdriverproject.org
http://driverdev.linuxdriverproject.org/mailman/listinfo/driverdev-devel


[PATCH v3 5/9] staging: exfat: Clean up return codes - FFS_ERROR

2019-11-11 Thread Valdis Kletnieks
Convert FFS_ERROR to -EINVAL

Signed-off-by: Valdis Kletnieks 
---
 drivers/staging/exfat/exfat.h   |  1 -
 drivers/staging/exfat/exfat_core.c  | 10 +-
 drivers/staging/exfat/exfat_super.c | 20 ++--
 3 files changed, 15 insertions(+), 16 deletions(-)

diff --git a/drivers/staging/exfat/exfat.h b/drivers/staging/exfat/exfat.h
index 7a817405c624..443fafe1d89d 100644
--- a/drivers/staging/exfat/exfat.h
+++ b/drivers/staging/exfat/exfat.h
@@ -216,7 +216,6 @@ static inline u16 get_row_index(u16 i)
 #define FFS_SEMAPHOREERR6
 #define FFS_NOTOPENED   12
 #define FFS_MAXOPENED   13
-#define FFS_ERROR   19
 
 #define NUM_UPCASE  2918
 
diff --git a/drivers/staging/exfat/exfat_core.c 
b/drivers/staging/exfat/exfat_core.c
index 2f6e9d724625..ffcad6867ecb 100644
--- a/drivers/staging/exfat/exfat_core.c
+++ b/drivers/staging/exfat/exfat_core.c
@@ -699,7 +699,7 @@ void sync_alloc_bitmap(struct super_block *sb)
 static s32 __load_upcase_table(struct super_block *sb, sector_t sector,
   u32 num_sectors, u32 utbl_checksum)
 {
-   int i, ret = FFS_ERROR;
+   int i, ret = -EINVAL;
u32 j;
struct fs_info_t *p_fs = &(EXFAT_SB(sb)->fs_info);
struct bd_info_t *p_bd = &(EXFAT_SB(sb)->bd_info);
@@ -774,7 +774,7 @@ static s32 __load_upcase_table(struct super_block *sb, 
sector_t sector,
brelse(tmp_bh);
return FFS_SUCCESS;
}
-   ret = FFS_ERROR;
+   ret = -EINVAL;
 error:
if (tmp_bh)
brelse(tmp_bh);
@@ -784,7 +784,7 @@ static s32 __load_upcase_table(struct super_block *sb, 
sector_t sector,
 
 static s32 __load_default_upcase_table(struct super_block *sb)
 {
-   int i, ret = FFS_ERROR;
+   int i, ret = -EINVAL;
u32 j;
struct fs_info_t *p_fs = &(EXFAT_SB(sb)->fs_info);
 
@@ -1906,7 +1906,7 @@ static s32 __write_partial_entries_in_entry_set(struct 
super_block *sb,
return FFS_SUCCESS;
 err_out:
pr_debug("%s failed\n", __func__);
-   return FFS_ERROR;
+   return -EINVAL;
 }
 
 /* write back all entries in entry set */
@@ -1931,7 +1931,7 @@ s32 write_partial_entries_in_entry_set(struct super_block 
*sb,
 
/* vaidity check */
if (ep + count  > ((struct dentry_t *)>__buf) + es->num_entries)
-   return FFS_ERROR;
+   return -EINVAL;
 
dir.dir = GET_CLUSTER_FROM_SECTOR(es->sector);
dir.flags = es->alloc_flag;
diff --git a/drivers/staging/exfat/exfat_super.c 
b/drivers/staging/exfat/exfat_super.c
index dd6530aef63a..daded767182a 100644
--- a/drivers/staging/exfat/exfat_super.c
+++ b/drivers/staging/exfat/exfat_super.c
@@ -498,7 +498,7 @@ static int ffsGetVolInfo(struct super_block *sb, struct 
vol_info_t *info)
 
/* check the validity of pointer parameters */
if (!info)
-   return FFS_ERROR;
+   return -EINVAL;
 
/* acquire the lock for file system critical section */
mutex_lock(_fs->v_mutex);
@@ -561,7 +561,7 @@ static int ffsLookupFile(struct inode *inode, char *path, 
struct file_id_t *fid)
 
/* check the validity of pointer parameters */
if (!fid || !path || (*path == '\0'))
-   return FFS_ERROR;
+   return -EINVAL;
 
/* acquire the lock for file system critical section */
mutex_lock(_fs->v_mutex);
@@ -654,7 +654,7 @@ static int ffsCreateFile(struct inode *inode, char *path, 
u8 mode,
 
/* check the validity of pointer parameters */
if (!fid || !path || (*path == '\0'))
-   return FFS_ERROR;
+   return -EINVAL;
 
/* acquire the lock for file system critical section */
mutex_lock(_fs->v_mutex);
@@ -703,7 +703,7 @@ static int ffsReadFile(struct inode *inode, struct 
file_id_t *fid, void *buffer,
 
/* check the validity of pointer parameters */
if (!buffer)
-   return FFS_ERROR;
+   return -EINVAL;
 
/* acquire the lock for file system critical section */
mutex_lock(_fs->v_mutex);
@@ -835,7 +835,7 @@ static int ffsWriteFile(struct inode *inode, struct 
file_id_t *fid,
 
/* check the validity of pointer parameters */
if (!buffer)
-   return FFS_ERROR;
+   return -EINVAL;
 
/* acquire the lock for file system critical section */
mutex_lock(_fs->v_mutex);
@@ -1241,7 +1241,7 @@ static int ffsMoveFile(struct inode *old_parent_inode, 
struct file_id_t *fid,
 
/* check the validity of pointer parameters */
if (!new_path || (*new_path == '\0'))
-   return FFS_ERROR;
+   return -EINVAL;
 
/* acquire the lock for file system critical section */
mutex_lock(_fs->v_mutex);
@@ -1464,7 +1464,7 @@ static int ffsSetAttr(stru

[PATCH v3 2/9] staging: exfat: Clean up return codes - FFS_MEDIAERR

2019-11-11 Thread Valdis Kletnieks
Convert FFS_MEDIAERR to (mostly) -ENOENT and -EIO.  Some additional code surgery
needed to propogate correct error codes upwards.

Signed-off-by: Valdis Kletnieks 
---
 drivers/staging/exfat/exfat.h|   1 -
 drivers/staging/exfat/exfat_blkdev.c |  18 ++---
 drivers/staging/exfat/exfat_core.c   |  80 +--
 drivers/staging/exfat/exfat_super.c  | 115 ++-
 4 files changed, 107 insertions(+), 107 deletions(-)

diff --git a/drivers/staging/exfat/exfat.h b/drivers/staging/exfat/exfat.h
index 4f9ba235d967..286605262345 100644
--- a/drivers/staging/exfat/exfat.h
+++ b/drivers/staging/exfat/exfat.h
@@ -210,7 +210,6 @@ static inline u16 get_row_index(u16 i)
 
 /* return values */
 #define FFS_SUCCESS 0
-#define FFS_MEDIAERR1
 #define FFS_MOUNTED 3
 #define FFS_NOTMOUNTED  4
 #define FFS_ALIGNMENTERR5
diff --git a/drivers/staging/exfat/exfat_blkdev.c 
b/drivers/staging/exfat/exfat_blkdev.c
index 81d20e6241c6..0abae041f632 100644
--- a/drivers/staging/exfat/exfat_blkdev.c
+++ b/drivers/staging/exfat/exfat_blkdev.c
@@ -40,11 +40,11 @@ int bdev_read(struct super_block *sb, sector_t secno, 
struct buffer_head **bh,
long flags = sbi->debug_flags;
 
if (flags & EXFAT_DEBUGFLAGS_ERROR_RW)
-   return FFS_MEDIAERR;
+   return -EIO;
 #endif /* CONFIG_EXFAT_KERNEL_DEBUG */
 
if (!p_bd->opened)
-   return FFS_MEDIAERR;
+   return -ENODEV;
 
if (*bh)
__brelse(*bh);
@@ -62,7 +62,7 @@ int bdev_read(struct super_block *sb, sector_t secno, struct 
buffer_head **bh,
WARN(!p_fs->dev_ejected,
 "[EXFAT] No bh, device seems wrong or to be ejected.\n");
 
-   return FFS_MEDIAERR;
+   return -EIO;
 }
 
 int bdev_write(struct super_block *sb, sector_t secno, struct buffer_head *bh,
@@ -77,11 +77,11 @@ int bdev_write(struct super_block *sb, sector_t secno, 
struct buffer_head *bh,
long flags = sbi->debug_flags;
 
if (flags & EXFAT_DEBUGFLAGS_ERROR_RW)
-   return FFS_MEDIAERR;
+   return -EIO;
 #endif /* CONFIG_EXFAT_KERNEL_DEBUG */
 
if (!p_bd->opened)
-   return FFS_MEDIAERR;
+   return -ENODEV;
 
if (secno == bh->b_blocknr) {
lock_buffer(bh);
@@ -89,7 +89,7 @@ int bdev_write(struct super_block *sb, sector_t secno, struct 
buffer_head *bh,
mark_buffer_dirty(bh);
unlock_buffer(bh);
if (sync && (sync_dirty_buffer(bh) != 0))
-   return FFS_MEDIAERR;
+   return -EIO;
} else {
count = num_secs << p_bd->sector_size_bits;
 
@@ -115,7 +115,7 @@ int bdev_write(struct super_block *sb, sector_t secno, 
struct buffer_head *bh,
WARN(!p_fs->dev_ejected,
 "[EXFAT] No bh, device seems wrong or to be ejected.\n");
 
-   return FFS_MEDIAERR;
+   return -EIO;
 }
 
 int bdev_sync(struct super_block *sb)
@@ -126,11 +126,11 @@ int bdev_sync(struct super_block *sb)
long flags = sbi->debug_flags;
 
if (flags & EXFAT_DEBUGFLAGS_ERROR_RW)
-   return FFS_MEDIAERR;
+   return -EIO;
 #endif /* CONFIG_EXFAT_KERNEL_DEBUG */
 
if (!p_bd->opened)
-   return FFS_MEDIAERR;
+   return -ENODEV;
 
return sync_blockdev(sb->s_bdev);
 }
diff --git a/drivers/staging/exfat/exfat_core.c 
b/drivers/staging/exfat/exfat_core.c
index e90b54a17150..2f6e9d724625 100644
--- a/drivers/staging/exfat/exfat_core.c
+++ b/drivers/staging/exfat/exfat_core.c
@@ -252,13 +252,13 @@ s32 exfat_alloc_cluster(struct super_block *sb, s32 
num_alloc,
}
 
if (set_alloc_bitmap(sb, new_clu - 2) != FFS_SUCCESS)
-   return -1;
+   return -EIO;
 
num_clusters++;
 
if (p_chain->flags == 0x01) {
if (FAT_write(sb, new_clu, CLUSTER_32(~0)) < 0)
-   return -1;
+   return -EIO;
}
 
if (p_chain->dir == CLUSTER_32(~0)) {
@@ -266,7 +266,7 @@ s32 exfat_alloc_cluster(struct super_block *sb, s32 
num_alloc,
} else {
if (p_chain->flags == 0x01) {
if (FAT_write(sb, last_clu, new_clu) < 0)
-   return -1;
+   return -EIO;
}
}
last_clu = new_clu;
@@ -526,7 +526,7 @@ s32 load_alloc_bitmap(struct super_block *sb)
ep = (struct bmap_dentry_t *)get_entry_in_dir(sb, ,
  i, NULL);
if (!ep)
-

[PATCH v3 4/9] staging: exfat: Clean up return codes - FFS_INVALIDFID

2019-11-11 Thread Valdis Kletnieks
Covert FFS_INVALIDFID to -EINVAL

Signed-off-by: Valdis Kletnieks 
---
 drivers/staging/exfat/exfat.h   |  1 -
 drivers/staging/exfat/exfat_super.c | 10 +-
 2 files changed, 5 insertions(+), 6 deletions(-)

diff --git a/drivers/staging/exfat/exfat.h b/drivers/staging/exfat/exfat.h
index 292af85e3cd2..7a817405c624 100644
--- a/drivers/staging/exfat/exfat.h
+++ b/drivers/staging/exfat/exfat.h
@@ -214,7 +214,6 @@ static inline u16 get_row_index(u16 i)
 #define FFS_NOTMOUNTED  4
 #define FFS_ALIGNMENTERR5
 #define FFS_SEMAPHOREERR6
-#define FFS_INVALIDFID  8
 #define FFS_NOTOPENED   12
 #define FFS_MAXOPENED   13
 #define FFS_ERROR   19
diff --git a/drivers/staging/exfat/exfat_super.c 
b/drivers/staging/exfat/exfat_super.c
index 7c99d1f8cba8..dd6530aef63a 100644
--- a/drivers/staging/exfat/exfat_super.c
+++ b/drivers/staging/exfat/exfat_super.c
@@ -699,7 +699,7 @@ static int ffsReadFile(struct inode *inode, struct 
file_id_t *fid, void *buffer,
 
/* check the validity of the given file id */
if (!fid)
-   return FFS_INVALIDFID;
+   return -EINVAL;
 
/* check the validity of pointer parameters */
if (!buffer)
@@ -831,7 +831,7 @@ static int ffsWriteFile(struct inode *inode, struct 
file_id_t *fid,
 
/* check the validity of the given file id */
if (!fid)
-   return FFS_INVALIDFID;
+   return -EINVAL;
 
/* check the validity of pointer parameters */
if (!buffer)
@@ -1237,7 +1237,7 @@ static int ffsMoveFile(struct inode *old_parent_inode, 
struct file_id_t *fid,
 
/* check the validity of the given file id */
if (!fid)
-   return FFS_INVALIDFID;
+   return -EINVAL;
 
/* check the validity of pointer parameters */
if (!new_path || (*new_path == '\0'))
@@ -1358,7 +1358,7 @@ static int ffsRemoveFile(struct inode *inode, struct 
file_id_t *fid)
 
/* check the validity of the given file id */
if (!fid)
-   return FFS_INVALIDFID;
+   return -EINVAL;
 
/* acquire the lock for file system critical section */
mutex_lock(_fs->v_mutex);
@@ -2145,7 +2145,7 @@ static int ffsRemoveDir(struct inode *inode, struct 
file_id_t *fid)
 
/* check the validity of the given file id */
if (!fid)
-   return FFS_INVALIDFID;
+   return -EINVAL;
 
dir.dir = fid->dir.dir;
dir.size = fid->dir.size;
-- 
2.24.0

___
devel mailing list
de...@linuxdriverproject.org
http://driverdev.linuxdriverproject.org/mailman/listinfo/driverdev-devel


[PATCH v3 8/9] staging: exfat: Collapse redundant return code translations

2019-11-11 Thread Valdis Kletnieks
Now that we no longer use odd internal return codes, we can
heave the translation code over the side, and just pass the
error code back up the call chain.

Signed-off-by: Valdis Kletnieks 
---
 drivers/staging/exfat/exfat_super.c | 92 +
 1 file changed, 14 insertions(+), 78 deletions(-)

diff --git a/drivers/staging/exfat/exfat_super.c 
b/drivers/staging/exfat/exfat_super.c
index 5d538593b5f6..a97a61a60517 100644
--- a/drivers/staging/exfat/exfat_super.c
+++ b/drivers/staging/exfat/exfat_super.c
@@ -650,7 +650,7 @@ static int ffsCreateFile(struct inode *inode, char *path, 
u8 mode,
struct uni_name_t uni_name;
struct super_block *sb = inode->i_sb;
struct fs_info_t *p_fs = &(EXFAT_SB(sb)->fs_info);
-   int ret;
+   int ret = 0;
 
/* check the validity of pointer parameters */
if (!fid || !path || (*path == '\0'))
@@ -2366,19 +2366,9 @@ static int exfat_create(struct inode *dir, struct dentry 
*dentry, umode_t mode,
pr_debug("%s entered\n", __func__);
 
err = ffsCreateFile(dir, (u8 *)dentry->d_name.name, FM_REGULAR, );
-   if (err) {
-   if (err == -EINVAL)
-   err = -EINVAL;
-   else if (err == -EEXIST)
-   err = -EEXIST;
-   else if (err == -ENOSPC)
-   err = -ENOSPC;
-   else if (err == -ENAMETOOLONG)
-   err = -ENAMETOOLONG;
-   else
-   err = -EIO;
+   if (err)
goto out;
-   }
+
INC_IVERSION(dir);
curtime = current_time(dir);
dir->i_ctime = curtime;
@@ -2543,13 +2533,9 @@ static int exfat_unlink(struct inode *dir, struct dentry 
*dentry)
EXFAT_I(inode)->fid.size = i_size_read(inode);
 
err = ffsRemoveFile(dir, &(EXFAT_I(inode)->fid));
-   if (err) {
-   if (err == -EPERM)
-   err = -EPERM;
-   else
-   err = -EIO;
+   if (err)
goto out;
-   }
+
INC_IVERSION(dir);
curtime = current_time(dir);
dir->i_mtime = curtime;
@@ -2589,27 +2575,14 @@ static int exfat_symlink(struct inode *dir, struct 
dentry *dentry,
pr_debug("%s entered\n", __func__);
 
err = ffsCreateFile(dir, (u8 *)dentry->d_name.name, FM_SYMLINK, );
-   if (err) {
-   if (err == -EINVAL)
-   err = -EINVAL;
-   else if (err == -EEXIST)
-   err = -EEXIST;
-   else if (err == -ENOSPC)
-   err = -ENOSPC;
-   else
-   err = -EIO;
+   if (err)
goto out;
-   }
+
 
err = ffsWriteFile(dir, , (char *)target, len, );
 
if (err) {
ffsRemoveFile(dir, );
-
-   if (err == -ENOSPC)
-   err = -ENOSPC;
-   else
-   err = -EIO;
goto out;
}
 
@@ -2666,19 +2639,9 @@ static int exfat_mkdir(struct inode *dir, struct dentry 
*dentry, umode_t mode)
pr_debug("%s entered\n", __func__);
 
err = ffsCreateDir(dir, (u8 *)dentry->d_name.name, );
-   if (err) {
-   if (err == -EINVAL)
-   err = -EINVAL;
-   else if (err == -EEXIST)
-   err = -EEXIST;
-   else if (err == -ENOSPC)
-   err = -ENOSPC;
-   else if (err == -ENAMETOOLONG)
-   err = -ENAMETOOLONG;
-   else
-   err = -EIO;
+   if (err)
goto out;
-   }
+
INC_IVERSION(dir);
curtime = current_time(dir);
dir->i_ctime = curtime;
@@ -2727,19 +2690,9 @@ static int exfat_rmdir(struct inode *dir, struct dentry 
*dentry)
EXFAT_I(inode)->fid.size = i_size_read(inode);
 
err = ffsRemoveDir(dir, &(EXFAT_I(inode)->fid));
-   if (err) {
-   if (err == -EINVAL)
-   err = -EINVAL;
-   else if (err == -EEXIST)
-   err = -ENOTEMPTY;
-   else if (err == -ENOENT)
-   err = -ENOENT;
-   else if (err == -EBUSY)
-   err = -EBUSY;
-   else
-   err = -EIO;
+   if (err)
goto out;
-   }
+
INC_IVERSION(dir);
curtime = current_time(dir);
dir->i_mtime = curtime;
@@ -2787,21 +2740,9 @@ static int exfat_rename(struct inode *old_dir, struct 
dentry *old_dentry,
 
err = ffsMoveFile(old_dir, &(EXFAT_I(old_inode)->fid), new_dir,
  new_dentry);
-   if (err) {
-   if (err == -EPERM)
-   err = -EPERM;
-   else if (err ==

[PATCH v3 3/9] staging: exfat: Clean up return codes - FFS_EOF

2019-11-11 Thread Valdis Kletnieks
Convert FFS_EOF to return 0 for a zero-length read() as per 'man 2 read'.

Signed-off-by: Valdis Kletnieks 
---
 drivers/staging/exfat/exfat.h   | 1 -
 drivers/staging/exfat/exfat_super.c | 2 +-
 2 files changed, 1 insertion(+), 2 deletions(-)

diff --git a/drivers/staging/exfat/exfat.h b/drivers/staging/exfat/exfat.h
index 286605262345..292af85e3cd2 100644
--- a/drivers/staging/exfat/exfat.h
+++ b/drivers/staging/exfat/exfat.h
@@ -217,7 +217,6 @@ static inline u16 get_row_index(u16 i)
 #define FFS_INVALIDFID  8
 #define FFS_NOTOPENED   12
 #define FFS_MAXOPENED   13
-#define FFS_EOF 15
 #define FFS_ERROR   19
 
 #define NUM_UPCASE  2918
diff --git a/drivers/staging/exfat/exfat_super.c 
b/drivers/staging/exfat/exfat_super.c
index d6d5f0fd47fd..7c99d1f8cba8 100644
--- a/drivers/staging/exfat/exfat_super.c
+++ b/drivers/staging/exfat/exfat_super.c
@@ -723,7 +723,7 @@ static int ffsReadFile(struct inode *inode, struct 
file_id_t *fid, void *buffer,
if (count == 0) {
if (rcount)
*rcount = 0;
-   ret = FFS_EOF;
+   ret = 0;
goto out;
}
 
-- 
2.24.0

___
devel mailing list
de...@linuxdriverproject.org
http://driverdev.linuxdriverproject.org/mailman/listinfo/driverdev-devel


[PATCH v3 7/9] staging: exfat: Clean up return codes - FFS_SUCCESS

2019-11-11 Thread Valdis Kletnieks
Convert FFS_SUCCESS to 0.

Signed-off-by: Valdis Kletnieks 
---
 drivers/staging/exfat/exfat.h   |   3 -
 drivers/staging/exfat/exfat_cache.c |   4 +-
 drivers/staging/exfat/exfat_core.c  | 104 ++--
 drivers/staging/exfat/exfat_super.c |  50 ++---
 4 files changed, 79 insertions(+), 82 deletions(-)

diff --git a/drivers/staging/exfat/exfat.h b/drivers/staging/exfat/exfat.h
index b3fc9bb06c24..72cf40e123de 100644
--- a/drivers/staging/exfat/exfat.h
+++ b/drivers/staging/exfat/exfat.h
@@ -208,9 +208,6 @@ static inline u16 get_row_index(u16 i)
 #define FM_REGULAR  0x00
 #define FM_SYMLINK  0x40
 
-/* return values */
-#define FFS_SUCCESS 0
-
 #define NUM_UPCASE  2918
 
 #define DOS_CUR_DIR_NAME".  "
diff --git a/drivers/staging/exfat/exfat_cache.c 
b/drivers/staging/exfat/exfat_cache.c
index 467b93630d86..28a67f8139ea 100644
--- a/drivers/staging/exfat/exfat_cache.c
+++ b/drivers/staging/exfat/exfat_cache.c
@@ -462,7 +462,7 @@ u8 *FAT_getblk(struct super_block *sb, sector_t sec)
 
FAT_cache_insert_hash(sb, bp);
 
-   if (sector_read(sb, sec, >buf_bh, 1) != FFS_SUCCESS) {
+   if (sector_read(sb, sec, >buf_bh, 1) != 0) {
FAT_cache_remove_hash(bp);
bp->drv = -1;
bp->sec = ~0;
@@ -582,7 +582,7 @@ static u8 *__buf_getblk(struct super_block *sb, sector_t 
sec)
 
buf_cache_insert_hash(sb, bp);
 
-   if (sector_read(sb, sec, >buf_bh, 1) != FFS_SUCCESS) {
+   if (sector_read(sb, sec, >buf_bh, 1) != 0) {
buf_cache_remove_hash(bp);
bp->drv = -1;
bp->sec = ~0;
diff --git a/drivers/staging/exfat/exfat_core.c 
b/drivers/staging/exfat/exfat_core.c
index ffcad6867ecb..1f0ef94bdd47 100644
--- a/drivers/staging/exfat/exfat_core.c
+++ b/drivers/staging/exfat/exfat_core.c
@@ -102,7 +102,7 @@ void fs_set_vol_flags(struct super_block *sb, u32 new_flag)
if (p_fs->vol_type == EXFAT) {
if (!p_fs->pbr_bh) {
if (sector_read(sb, p_fs->PBR_sector,
-   _fs->pbr_bh, 1) != FFS_SUCCESS)
+   _fs->pbr_bh, 1) != 0)
return;
}
 
@@ -139,7 +139,7 @@ void fs_error(struct super_block *sb)
 s32 clear_cluster(struct super_block *sb, u32 clu)
 {
sector_t s, n;
-   s32 ret = FFS_SUCCESS;
+   s32 ret = 0;
struct buffer_head *tmp_bh = NULL;
struct fs_info_t *p_fs = &(EXFAT_SB(sb)->fs_info);
struct bd_info_t *p_bd = &(EXFAT_SB(sb)->bd_info);
@@ -154,12 +154,12 @@ s32 clear_cluster(struct super_block *sb, u32 clu)
 
for (; s < n; s++) {
ret = sector_read(sb, s, _bh, 0);
-   if (ret != FFS_SUCCESS)
+   if (ret != 0)
return ret;
 
memset((char *)tmp_bh->b_data, 0x0, p_bd->sector_size);
ret = sector_write(sb, s, tmp_bh, 0);
-   if (ret != FFS_SUCCESS)
+   if (ret != 0)
break;
}
 
@@ -251,7 +251,7 @@ s32 exfat_alloc_cluster(struct super_block *sb, s32 
num_alloc,
}
}
 
-   if (set_alloc_bitmap(sb, new_clu - 2) != FFS_SUCCESS)
+   if (set_alloc_bitmap(sb, new_clu - 2) != 0)
return -EIO;
 
num_clusters++;
@@ -370,7 +370,7 @@ void exfat_free_cluster(struct super_block *sb, struct 
chain_t *p_chain,
buf_release(sb, sector + i);
}
 
-   if (clr_alloc_bitmap(sb, clu - 2) != FFS_SUCCESS)
+   if (clr_alloc_bitmap(sb, clu - 2) != 0)
break;
clu++;
 
@@ -387,7 +387,7 @@ void exfat_free_cluster(struct super_block *sb, struct 
chain_t *p_chain,
buf_release(sb, sector + i);
}
 
-   if (clr_alloc_bitmap(sb, clu - 2) != FFS_SUCCESS)
+   if (clr_alloc_bitmap(sb, clu - 2) != 0)
break;
 
if (FAT_read(sb, clu, ) == -1)
@@ -552,7 +552,7 @@ s32 load_alloc_bitmap(struct super_block *sb)
for (j = 0; j < p_fs->map_sectors; j++) {
p_fs->vol_amap[j] = NULL;
ret = sector_read(sb, sector + j, 
_fs->vol_amap[j], 1);
-   if (ret != FFS_SUCCESS) {
+   if (ret != 0) {
/*  release all buffers and 
free vol_amap */
i = 0;
 

[PATCH v3 1/9] staging: exfat: Clean up return codes - FFS_FORMATERR

2019-11-11 Thread Valdis Kletnieks
Convert FFS_FORMATERR to -EFSCORRUPTED

Signed-off-by: Valdis Kletnieks 
---
 drivers/staging/exfat/exfat.h   | 3 ++-
 drivers/staging/exfat/exfat_core.c  | 8 
 drivers/staging/exfat/exfat_super.c | 2 +-
 3 files changed, 7 insertions(+), 6 deletions(-)

diff --git a/drivers/staging/exfat/exfat.h b/drivers/staging/exfat/exfat.h
index acb73f47a253..4f9ba235d967 100644
--- a/drivers/staging/exfat/exfat.h
+++ b/drivers/staging/exfat/exfat.h
@@ -30,6 +30,8 @@
 #undef DEBUG
 #endif
 
+#define EFSCORRUPTED   EUCLEAN /* Filesystem is corrupted */
+
 #define DENTRY_SIZE32  /* dir entry size */
 #define DENTRY_SIZE_BITS   5
 
@@ -209,7 +211,6 @@ static inline u16 get_row_index(u16 i)
 /* return values */
 #define FFS_SUCCESS 0
 #define FFS_MEDIAERR1
-#define FFS_FORMATERR   2
 #define FFS_MOUNTED 3
 #define FFS_NOTMOUNTED  4
 #define FFS_ALIGNMENTERR5
diff --git a/drivers/staging/exfat/exfat_core.c 
b/drivers/staging/exfat/exfat_core.c
index b23fbf3ebaa5..e90b54a17150 100644
--- a/drivers/staging/exfat/exfat_core.c
+++ b/drivers/staging/exfat/exfat_core.c
@@ -573,7 +573,7 @@ s32 load_alloc_bitmap(struct super_block *sb)
return FFS_MEDIAERR;
}
 
-   return FFS_FORMATERR;
+   return -EFSCORRUPTED;
 }
 
 void free_alloc_bitmap(struct super_block *sb)
@@ -3016,7 +3016,7 @@ s32 fat16_mount(struct super_block *sb, struct 
pbr_sector_t *p_pbr)
struct bd_info_t *p_bd = &(EXFAT_SB(sb)->bd_info);
 
if (p_bpb->num_fats == 0)
-   return FFS_FORMATERR;
+   return -EFSCORRUPTED;
 
num_root_sectors = GET16(p_bpb->num_root_entries) << DENTRY_SIZE_BITS;
num_root_sectors = ((num_root_sectors - 1) >>
@@ -3078,7 +3078,7 @@ s32 fat32_mount(struct super_block *sb, struct 
pbr_sector_t *p_pbr)
struct bd_info_t *p_bd = &(EXFAT_SB(sb)->bd_info);
 
if (p_bpb->num_fats == 0)
-   return FFS_FORMATERR;
+   return -EFSCORRUPTED;
 
p_fs->sectors_per_clu = p_bpb->sectors_per_clu;
p_fs->sectors_per_clu_bits = ilog2(p_bpb->sectors_per_clu);
@@ -3157,7 +3157,7 @@ s32 exfat_mount(struct super_block *sb, struct 
pbr_sector_t *p_pbr)
struct bd_info_t *p_bd = &(EXFAT_SB(sb)->bd_info);
 
if (p_bpb->num_fats == 0)
-   return FFS_FORMATERR;
+   return -EFSCORRUPTED;
 
p_fs->sectors_per_clu = 1 << p_bpb->sectors_per_clu_bits;
p_fs->sectors_per_clu_bits = p_bpb->sectors_per_clu_bits;
diff --git a/drivers/staging/exfat/exfat_super.c 
b/drivers/staging/exfat/exfat_super.c
index 1ae5a7750348..e0c4a3ab8458 100644
--- a/drivers/staging/exfat/exfat_super.c
+++ b/drivers/staging/exfat/exfat_super.c
@@ -384,7 +384,7 @@ static int ffsMountVol(struct super_block *sb)
if (GET16_A(p_pbr->signature) != PBR_SIGNATURE) {
brelse(tmp_bh);
bdev_close(sb);
-   ret = FFS_FORMATERR;
+   ret = -EFSCORRUPTED;
goto out;
}
 
-- 
2.24.0

___
devel mailing list
de...@linuxdriverproject.org
http://driverdev.linuxdriverproject.org/mailman/listinfo/driverdev-devel


[PATCH v3 6/9] staging: exfat: Clean up return codes - remove unused codes

2019-11-11 Thread Valdis Kletnieks
There are 6 FFS_* error values not used at all. Remove them.

Signed-off-by: Valdis Kletnieks 
---
 drivers/staging/exfat/exfat.h | 6 --
 1 file changed, 6 deletions(-)

diff --git a/drivers/staging/exfat/exfat.h b/drivers/staging/exfat/exfat.h
index 443fafe1d89d..b3fc9bb06c24 100644
--- a/drivers/staging/exfat/exfat.h
+++ b/drivers/staging/exfat/exfat.h
@@ -210,12 +210,6 @@ static inline u16 get_row_index(u16 i)
 
 /* return values */
 #define FFS_SUCCESS 0
-#define FFS_MOUNTED 3
-#define FFS_NOTMOUNTED  4
-#define FFS_ALIGNMENTERR5
-#define FFS_SEMAPHOREERR6
-#define FFS_NOTOPENED   12
-#define FFS_MAXOPENED   13
 
 #define NUM_UPCASE  2918
 
-- 
2.24.0

___
devel mailing list
de...@linuxdriverproject.org
http://driverdev.linuxdriverproject.org/mailman/listinfo/driverdev-devel


[PATCH] staging: exfat: convert WARN to a pr_info

2019-11-12 Thread Valdis Kletnieks
syzbot took a nosedive because it runs with panic_on_warn set. And
it's quite correct, it shouldn't have been a WARN in the first place.
Other locations just use a pr_info(), so do that here too.

Signed-off-by: Valdis Kletnieks 
Reported-by: syzbot+787bcbef9b5fec619...@syzkaller.appspotmail.com
Fixes: c48c9f7ff32b ("staging: exfat: add exfat filesystem code to staging")
---
 drivers/staging/exfat/exfat_blkdev.c | 8 
 1 file changed, 4 insertions(+), 4 deletions(-)

diff --git a/drivers/staging/exfat/exfat_blkdev.c 
b/drivers/staging/exfat/exfat_blkdev.c
index 7bcd98b13109..8204720b2bf2 100644
--- a/drivers/staging/exfat/exfat_blkdev.c
+++ b/drivers/staging/exfat/exfat_blkdev.c
@@ -59,8 +59,8 @@ int exfat_bdev_read(struct super_block *sb, sector_t secno, 
struct buffer_head *
if (*bh)
return 0;
 
-   WARN(!p_fs->dev_ejected,
-"[EXFAT] No bh, device seems wrong or to be ejected.\n");
+   if (p_fs->dev_ejected)
+   pr_info("[EXFAT] No bh, device seems wrong or to be 
ejected.\n");
 
return -EIO;
 }
@@ -112,8 +112,8 @@ int exfat_bdev_write(struct super_block *sb, sector_t 
secno, struct buffer_head
return 0;
 
 no_bh:
-   WARN(!p_fs->dev_ejected,
-"[EXFAT] No bh, device seems wrong or to be ejected.\n");
+   if (p_fs->dev_ejected)
+   pr_info("[EXFAT] No bh, device seems wrong or to be 
ejected.\n");
 
return -EIO;
 }
-- 
2.24.0

___
devel mailing list
de...@linuxdriverproject.org
http://driverdev.linuxdriverproject.org/mailman/listinfo/driverdev-devel


[PATCH 13/15] staging: exfat: Clean up return codes - FFS_ERROR

2019-10-24 Thread Valdis Kletnieks
Convert FFS_ERROR to -EINVAL

Signed-off-by: Valdis Kletnieks 
---
 drivers/staging/exfat/exfat.h   |  1 -
 drivers/staging/exfat/exfat_core.c  |  8 
 drivers/staging/exfat/exfat_super.c | 20 ++--
 3 files changed, 14 insertions(+), 15 deletions(-)

diff --git a/drivers/staging/exfat/exfat.h b/drivers/staging/exfat/exfat.h
index 505751bf1817..2ca2710601ae 100644
--- a/drivers/staging/exfat/exfat.h
+++ b/drivers/staging/exfat/exfat.h
@@ -216,7 +216,6 @@ static inline u16 get_row_index(u16 i)
 #define FFS_SEMAPHOREERR6
 #define FFS_NOTOPENED   12
 #define FFS_MAXOPENED   13
-#define FFS_ERROR   19
 
 #define NUM_UPCASE  2918
 
diff --git a/drivers/staging/exfat/exfat_core.c 
b/drivers/staging/exfat/exfat_core.c
index 7e637a8e19d3..7efc5d08cada 100644
--- a/drivers/staging/exfat/exfat_core.c
+++ b/drivers/staging/exfat/exfat_core.c
@@ -587,7 +587,7 @@ void exfat_chain_cont_cluster(struct super_block *sb, u32 
chain, s32 len)
 static s32 __load_upcase_table(struct super_block *sb, sector_t sector,
   u32 num_sectors, u32 utbl_checksum)
 {
-   int i, ret = FFS_ERROR;
+   int i, ret = -EINVAL;
u32 j;
struct fs_info_t *p_fs = &(EXFAT_SB(sb)->fs_info);
struct bd_info_t *p_bd = &(EXFAT_SB(sb)->bd_info);
@@ -662,7 +662,7 @@ static s32 __load_upcase_table(struct super_block *sb, 
sector_t sector,
brelse(tmp_bh);
return FFS_SUCCESS;
}
-   ret = FFS_ERROR;
+   ret = -EINVAL;
 error:
if (tmp_bh)
brelse(tmp_bh);
@@ -672,7 +672,7 @@ static s32 __load_upcase_table(struct super_block *sb, 
sector_t sector,
 
 static s32 __load_default_upcase_table(struct super_block *sb)
 {
-   int i, ret = FFS_ERROR;
+   int i, ret = -EINVAL;
u32 j;
struct fs_info_t *p_fs = &(EXFAT_SB(sb)->fs_info);
 
@@ -847,7 +847,7 @@ static s32 __write_partial_entries_in_entry_set(struct 
super_block *sb,
return FFS_SUCCESS;
 err_out:
pr_debug("%s failed\n", __func__);
-   return FFS_ERROR;
+   return -EINVAL;
 }
 
 /* write back all entries in entry set */
diff --git a/drivers/staging/exfat/exfat_super.c 
b/drivers/staging/exfat/exfat_super.c
index 485297974ae7..0ce27a6babee 100644
--- a/drivers/staging/exfat/exfat_super.c
+++ b/drivers/staging/exfat/exfat_super.c
@@ -492,7 +492,7 @@ static int ffsGetVolInfo(struct super_block *sb, struct 
vol_info_t *info)
 
/* check the validity of pointer parameters */
if (!info)
-   return FFS_ERROR;
+   return -EINVAL;
 
/* acquire the lock for file system critical section */
down(_fs->v_sem);
@@ -555,7 +555,7 @@ static int ffsLookupFile(struct inode *inode, char *path, 
struct file_id_t *fid)
 
/* check the validity of pointer parameters */
if (!fid || !path || (*path == '\0'))
-   return FFS_ERROR;
+   return -EINVAL;
 
/* acquire the lock for file system critical section */
down(_fs->v_sem);
@@ -648,7 +648,7 @@ static int ffsCreateFile(struct inode *inode, char *path, 
u8 mode,
 
/* check the validity of pointer parameters */
if (!fid || !path || (*path == '\0'))
-   return FFS_ERROR;
+   return -EINVAL;
 
/* acquire the lock for file system critical section */
down(_fs->v_sem);
@@ -697,7 +697,7 @@ static int ffsReadFile(struct inode *inode, struct 
file_id_t *fid, void *buffer,
 
/* check the validity of pointer parameters */
if (!buffer)
-   return FFS_ERROR;
+   return -EINVAL;
 
/* acquire the lock for file system critical section */
down(_fs->v_sem);
@@ -827,7 +827,7 @@ static int ffsWriteFile(struct inode *inode, struct 
file_id_t *fid,
 
/* check the validity of pointer parameters */
if (!buffer)
-   return FFS_ERROR;
+   return -EINVAL;
 
/* acquire the lock for file system critical section */
down(_fs->v_sem);
@@ -1232,7 +1232,7 @@ static int ffsMoveFile(struct inode *old_parent_inode, 
struct file_id_t *fid,
 
/* check the validity of pointer parameters */
if (!new_path || (*new_path == '\0'))
-   return FFS_ERROR;
+   return -EINVAL;
 
/* acquire the lock for file system critical section */
down(_fs->v_sem);
@@ -1455,7 +1455,7 @@ static int ffsSetAttr(struct inode *inode, u32 attr)
if (p_fs->dev_ejected)
ret = -EIO;
else
-   ret = FFS_ERROR;
+   ret = -EINVAL;
 
if (p_fs->vol_type == EXFAT)
release_entry_set(es);
@@ -1747,7 +1747,7 @@ static int ffsMapCluster(struct inode *inode, s32 
clu_offset, u32 *clu

[PATCH 15/15] staging: exfat: Clean up return codes - FFS_SUCCESS

2019-10-24 Thread Valdis Kletnieks
Just replace FFS_SUCCESS with a literal 0.

Signed-off-by: Valdis Kletnieks 
---
 drivers/staging/exfat/exfat.h   |  3 -
 drivers/staging/exfat/exfat_cache.c |  4 +-
 drivers/staging/exfat/exfat_core.c  | 90 ++---
 drivers/staging/exfat/exfat_super.c | 50 
 4 files changed, 72 insertions(+), 75 deletions(-)

diff --git a/drivers/staging/exfat/exfat.h b/drivers/staging/exfat/exfat.h
index 819a21d72c67..3532879ca73e 100644
--- a/drivers/staging/exfat/exfat.h
+++ b/drivers/staging/exfat/exfat.h
@@ -208,9 +208,6 @@ static inline u16 get_row_index(u16 i)
 #define FM_REGULAR  0x00
 #define FM_SYMLINK  0x40
 
-/* return values */
-#define FFS_SUCCESS 0
-
 #define NUM_UPCASE  2918
 
 #define DOS_CUR_DIR_NAME".  "
diff --git a/drivers/staging/exfat/exfat_cache.c 
b/drivers/staging/exfat/exfat_cache.c
index e9ad0353b4e5..44383cc1c937 100644
--- a/drivers/staging/exfat/exfat_cache.c
+++ b/drivers/staging/exfat/exfat_cache.c
@@ -214,7 +214,7 @@ static u8 *FAT_getblk(struct super_block *sb, sector_t sec)
 
FAT_cache_insert_hash(sb, bp);
 
-   if (sector_read(sb, sec, >buf_bh, 1) != FFS_SUCCESS) {
+   if (sector_read(sb, sec, >buf_bh, 1) != 0) {
FAT_cache_remove_hash(bp);
bp->drv = -1;
bp->sec = ~0;
@@ -583,7 +583,7 @@ static u8 *__buf_getblk(struct super_block *sb, sector_t 
sec)
 
buf_cache_insert_hash(sb, bp);
 
-   if (sector_read(sb, sec, >buf_bh, 1) != FFS_SUCCESS) {
+   if (sector_read(sb, sec, >buf_bh, 1) != 0) {
buf_cache_remove_hash(bp);
bp->drv = -1;
bp->sec = ~0;
diff --git a/drivers/staging/exfat/exfat_core.c 
b/drivers/staging/exfat/exfat_core.c
index 7efc5d08cada..3d01d0b9941b 100644
--- a/drivers/staging/exfat/exfat_core.c
+++ b/drivers/staging/exfat/exfat_core.c
@@ -102,7 +102,7 @@ void fs_set_vol_flags(struct super_block *sb, u32 new_flag)
if (p_fs->vol_type == EXFAT) {
if (!p_fs->pbr_bh) {
if (sector_read(sb, p_fs->PBR_sector,
-   _fs->pbr_bh, 1) != FFS_SUCCESS)
+   _fs->pbr_bh, 1) != 0)
return;
}
 
@@ -184,7 +184,7 @@ s32 load_alloc_bitmap(struct super_block *sb)
for (j = 0; j < p_fs->map_sectors; j++) {
p_fs->vol_amap[j] = NULL;
ret = sector_read(sb, sector + j, 
&(p_fs->vol_amap[j]), 1);
-   if (ret != FFS_SUCCESS) {
+   if (ret != 0) {
/*  release all buffers and 
free vol_amap */
i = 0;
while (i < j)
@@ -197,7 +197,7 @@ s32 load_alloc_bitmap(struct super_block *sb)
}
 
p_fs->pbr_bh = NULL;
-   return FFS_SUCCESS;
+   return 0;
}
}
 
@@ -332,7 +332,7 @@ static void sync_alloc_bitmap(struct super_block *sb)
 static s32 clear_cluster(struct super_block *sb, u32 clu)
 {
sector_t s, n;
-   s32 ret = FFS_SUCCESS;
+   s32 ret = 0;
struct buffer_head *tmp_bh = NULL;
struct fs_info_t *p_fs = &(EXFAT_SB(sb)->fs_info);
struct bd_info_t *p_bd = &(EXFAT_SB(sb)->bd_info);
@@ -347,12 +347,12 @@ static s32 clear_cluster(struct super_block *sb, u32 clu)
 
for (; s < n; s++) {
ret = sector_read(sb, s, _bh, 0);
-   if (ret != FFS_SUCCESS)
+   if (ret != 0)
return ret;
 
memset((char *)tmp_bh->b_data, 0x0, p_bd->sector_size);
ret = sector_write(sb, s, tmp_bh, 0);
-   if (ret != FFS_SUCCESS)
+   if (ret != 0)
break;
}
 
@@ -390,7 +390,7 @@ static s32 exfat_alloc_cluster(struct super_block *sb, s32 
num_alloc,
}
}
 
-   if (set_alloc_bitmap(sb, new_clu - 2) != FFS_SUCCESS)
+   if (set_alloc_bitmap(sb, new_clu - 2) != 0)
return -EIO;
 
num_clusters++;
@@ -468,7 +468,7 @@ static void exfat_free_cluster(struct super_block *sb, 
struct chain_t *p_chain,
buf_release(sb, sector + i);
}
 
-   if (clr_alloc_bitmap(sb, clu - 2) != FFS_SUCCESS)
+   if (clr_alloc_bitmap(sb, clu - 2) != 0)
break;
clu++

[PATCH 14/15] staging: exfat: Clean up return codes - remove unused codes

2019-10-24 Thread Valdis Kletnieks
There are 6 FFS_* error values not used at all. Remove them.

Signed-off-by: Valdis Kletnieks 
---
 drivers/staging/exfat/exfat.h | 6 --
 1 file changed, 6 deletions(-)

diff --git a/drivers/staging/exfat/exfat.h b/drivers/staging/exfat/exfat.h
index 2ca2710601ae..819a21d72c67 100644
--- a/drivers/staging/exfat/exfat.h
+++ b/drivers/staging/exfat/exfat.h
@@ -210,12 +210,6 @@ static inline u16 get_row_index(u16 i)
 
 /* return values */
 #define FFS_SUCCESS 0
-#define FFS_MOUNTED 3
-#define FFS_NOTMOUNTED  4
-#define FFS_ALIGNMENTERR5
-#define FFS_SEMAPHOREERR6
-#define FFS_NOTOPENED   12
-#define FFS_MAXOPENED   13
 
 #define NUM_UPCASE  2918
 
-- 
2.23.0

___
devel mailing list
de...@linuxdriverproject.org
http://driverdev.linuxdriverproject.org/mailman/listinfo/driverdev-devel


[PATCH 04/15] staging: exfat: Clean up return codes - FFS_PERMISSIONERR

2019-10-24 Thread Valdis Kletnieks
Convert FFS_PERMISSIONERR to -EPERM

Signed-off-by: Valdis Kletnieks 
---
 drivers/staging/exfat/exfat.h   |  1 -
 drivers/staging/exfat/exfat_super.c | 20 ++--
 2 files changed, 10 insertions(+), 11 deletions(-)

diff --git a/drivers/staging/exfat/exfat.h b/drivers/staging/exfat/exfat.h
index ec52237b01cd..86bdcf222a5a 100644
--- a/drivers/staging/exfat/exfat.h
+++ b/drivers/staging/exfat/exfat.h
@@ -217,7 +217,6 @@ static inline u16 get_row_index(u16 i)
 #define FFS_INVALIDPATH 7
 #define FFS_INVALIDFID  8
 #define FFS_FILEEXIST   10
-#define FFS_PERMISSIONERR   11
 #define FFS_NOTOPENED   12
 #define FFS_MAXOPENED   13
 #define FFS_EOF 15
diff --git a/drivers/staging/exfat/exfat_super.c 
b/drivers/staging/exfat/exfat_super.c
index 566cfba0a522..fd5d8ba0d8bc 100644
--- a/drivers/staging/exfat/exfat_super.c
+++ b/drivers/staging/exfat/exfat_super.c
@@ -702,7 +702,7 @@ static int ffsReadFile(struct inode *inode, struct 
file_id_t *fid, void *buffer,
 
/* check if the given file ID is opened */
if (fid->type != TYPE_FILE) {
-   ret = FFS_PERMISSIONERR;
+   ret = -EPERM;
goto out;
}
 
@@ -832,7 +832,7 @@ static int ffsWriteFile(struct inode *inode, struct 
file_id_t *fid,
 
/* check if the given file ID is opened */
if (fid->type != TYPE_FILE) {
-   ret = FFS_PERMISSIONERR;
+   ret = -EPERM;
goto out;
}
 
@@ -1079,7 +1079,7 @@ static int ffsTruncateFile(struct inode *inode, u64 
old_size, u64 new_size)
 
/* check if the given file ID is opened */
if (fid->type != TYPE_FILE) {
-   ret = FFS_PERMISSIONERR;
+   ret = -EPERM;
goto out;
}
 
@@ -1246,7 +1246,7 @@ static int ffsMoveFile(struct inode *old_parent_inode, 
struct file_id_t *fid,
/* check if the old file is "." or ".." */
if (p_fs->vol_type != EXFAT) {
if ((olddir.dir != p_fs->root_dir) && (dentry < 2)) {
-   ret = FFS_PERMISSIONERR;
+   ret = -EPERM;
goto out2;
}
}
@@ -1258,7 +1258,7 @@ static int ffsMoveFile(struct inode *old_parent_inode, 
struct file_id_t *fid,
}
 
if (p_fs->fs_func->get_entry_attr(ep) & ATTR_READONLY) {
-   ret = FFS_PERMISSIONERR;
+   ret = -EPERM;
goto out2;
}
 
@@ -1365,7 +1365,7 @@ static int ffsRemoveFile(struct inode *inode, struct 
file_id_t *fid)
}
 
if (p_fs->fs_func->get_entry_attr(ep) & ATTR_READONLY) {
-   ret = FFS_PERMISSIONERR;
+   ret = -EPERM;
goto out;
}
fs_set_vol_flags(sb, VOL_DIRTY);
@@ -1947,7 +1947,7 @@ static int ffsReadDir(struct inode *inode, struct 
dir_entry_t *dir_entry)
 
/* check if the given file ID is opened */
if (fid->type != TYPE_DIR)
-   return FFS_PERMISSIONERR;
+   return -EPERM;
 
/* acquire the lock for file system critical section */
down(_fs->v_sem);
@@ -2145,7 +2145,7 @@ static int ffsRemoveDir(struct inode *inode, struct 
file_id_t *fid)
/* check if the file is "." or ".." */
if (p_fs->vol_type != EXFAT) {
if ((dir.dir != p_fs->root_dir) && (dentry < 2))
-   return FFS_PERMISSIONERR;
+   return -EPERM;
}
 
/* acquire the lock for file system critical section */
@@ -2526,7 +2526,7 @@ static int exfat_unlink(struct inode *dir, struct dentry 
*dentry)
 
err = ffsRemoveFile(dir, &(EXFAT_I(inode)->fid));
if (err) {
-   if (err == FFS_PERMISSIONERR)
+   if (err == -EPERM)
err = -EPERM;
else
err = -EIO;
@@ -2746,7 +2746,7 @@ static int exfat_rename(struct inode *old_dir, struct 
dentry *old_dentry,
err = ffsMoveFile(old_dir, &(EXFAT_I(old_inode)->fid), new_dir,
  new_dentry);
if (err) {
-   if (err == FFS_PERMISSIONERR)
+   if (err == -EPERM)
err = -EPERM;
else if (err == FFS_INVALIDPATH)
err = -EINVAL;
-- 
2.23.0

___
devel mailing list
de...@linuxdriverproject.org
http://driverdev.linuxdriverproject.org/mailman/listinfo/driverdev-devel


[PATCH 12/15] staging: exfat: Clean up return codes - FFS_INVALIDFID

2019-10-24 Thread Valdis Kletnieks
Covert FFS_INVALIDFID to -EINVAL

Signed-off-by: Valdis Kletnieks 
---
 drivers/staging/exfat/exfat.h   |  1 -
 drivers/staging/exfat/exfat_super.c | 10 +-
 2 files changed, 5 insertions(+), 6 deletions(-)

diff --git a/drivers/staging/exfat/exfat.h b/drivers/staging/exfat/exfat.h
index 3ff7293fedd2..505751bf1817 100644
--- a/drivers/staging/exfat/exfat.h
+++ b/drivers/staging/exfat/exfat.h
@@ -214,7 +214,6 @@ static inline u16 get_row_index(u16 i)
 #define FFS_NOTMOUNTED  4
 #define FFS_ALIGNMENTERR5
 #define FFS_SEMAPHOREERR6
-#define FFS_INVALIDFID  8
 #define FFS_NOTOPENED   12
 #define FFS_MAXOPENED   13
 #define FFS_ERROR   19
diff --git a/drivers/staging/exfat/exfat_super.c 
b/drivers/staging/exfat/exfat_super.c
index a0c28fd8824b..485297974ae7 100644
--- a/drivers/staging/exfat/exfat_super.c
+++ b/drivers/staging/exfat/exfat_super.c
@@ -693,7 +693,7 @@ static int ffsReadFile(struct inode *inode, struct 
file_id_t *fid, void *buffer,
 
/* check the validity of the given file id */
if (!fid)
-   return FFS_INVALIDFID;
+   return -EINVAL;
 
/* check the validity of pointer parameters */
if (!buffer)
@@ -823,7 +823,7 @@ static int ffsWriteFile(struct inode *inode, struct 
file_id_t *fid,
 
/* check the validity of the given file id */
if (!fid)
-   return FFS_INVALIDFID;
+   return -EINVAL;
 
/* check the validity of pointer parameters */
if (!buffer)
@@ -1228,7 +1228,7 @@ static int ffsMoveFile(struct inode *old_parent_inode, 
struct file_id_t *fid,
 
/* check the validity of the given file id */
if (!fid)
-   return FFS_INVALIDFID;
+   return -EINVAL;
 
/* check the validity of pointer parameters */
if (!new_path || (*new_path == '\0'))
@@ -1349,7 +1349,7 @@ static int ffsRemoveFile(struct inode *inode, struct 
file_id_t *fid)
 
/* check the validity of the given file id */
if (!fid)
-   return FFS_INVALIDFID;
+   return -EINVAL;
 
/* acquire the lock for file system critical section */
down(_fs->v_sem);
@@ -2136,7 +2136,7 @@ static int ffsRemoveDir(struct inode *inode, struct 
file_id_t *fid)
 
/* check the validity of the given file id */
if (!fid)
-   return FFS_INVALIDFID;
+   return -EINVAL;
 
dir.dir = fid->dir.dir;
dir.size = fid->dir.size;
-- 
2.23.0

___
devel mailing list
de...@linuxdriverproject.org
http://driverdev.linuxdriverproject.org/mailman/listinfo/driverdev-devel


[PATCH 10/15] staging: exfat: Clean up return codes - FFS_MEDIAERR

2019-10-24 Thread Valdis Kletnieks
Convert FFS_MEDIAERR to (mostly) -ENOENT and -EIO.  Some additional code surgery
needed to propogate correct error codes upwards.

Signed-off-by: Valdis Kletnieks 
---
 drivers/staging/exfat/exfat.h|   1 -
 drivers/staging/exfat/exfat_blkdev.c |  18 ++---
 drivers/staging/exfat/exfat_core.c   |  68 
 drivers/staging/exfat/exfat_super.c  | 115 ++-
 4 files changed, 101 insertions(+), 101 deletions(-)

diff --git a/drivers/staging/exfat/exfat.h b/drivers/staging/exfat/exfat.h
index 7ca187e77cbe..df7b99707aed 100644
--- a/drivers/staging/exfat/exfat.h
+++ b/drivers/staging/exfat/exfat.h
@@ -210,7 +210,6 @@ static inline u16 get_row_index(u16 i)
 
 /* return values */
 #define FFS_SUCCESS 0
-#define FFS_MEDIAERR1
 #define FFS_MOUNTED 3
 #define FFS_NOTMOUNTED  4
 #define FFS_ALIGNMENTERR5
diff --git a/drivers/staging/exfat/exfat_blkdev.c 
b/drivers/staging/exfat/exfat_blkdev.c
index 81d20e6241c6..0abae041f632 100644
--- a/drivers/staging/exfat/exfat_blkdev.c
+++ b/drivers/staging/exfat/exfat_blkdev.c
@@ -40,11 +40,11 @@ int bdev_read(struct super_block *sb, sector_t secno, 
struct buffer_head **bh,
long flags = sbi->debug_flags;
 
if (flags & EXFAT_DEBUGFLAGS_ERROR_RW)
-   return FFS_MEDIAERR;
+   return -EIO;
 #endif /* CONFIG_EXFAT_KERNEL_DEBUG */
 
if (!p_bd->opened)
-   return FFS_MEDIAERR;
+   return -ENODEV;
 
if (*bh)
__brelse(*bh);
@@ -62,7 +62,7 @@ int bdev_read(struct super_block *sb, sector_t secno, struct 
buffer_head **bh,
WARN(!p_fs->dev_ejected,
 "[EXFAT] No bh, device seems wrong or to be ejected.\n");
 
-   return FFS_MEDIAERR;
+   return -EIO;
 }
 
 int bdev_write(struct super_block *sb, sector_t secno, struct buffer_head *bh,
@@ -77,11 +77,11 @@ int bdev_write(struct super_block *sb, sector_t secno, 
struct buffer_head *bh,
long flags = sbi->debug_flags;
 
if (flags & EXFAT_DEBUGFLAGS_ERROR_RW)
-   return FFS_MEDIAERR;
+   return -EIO;
 #endif /* CONFIG_EXFAT_KERNEL_DEBUG */
 
if (!p_bd->opened)
-   return FFS_MEDIAERR;
+   return -ENODEV;
 
if (secno == bh->b_blocknr) {
lock_buffer(bh);
@@ -89,7 +89,7 @@ int bdev_write(struct super_block *sb, sector_t secno, struct 
buffer_head *bh,
mark_buffer_dirty(bh);
unlock_buffer(bh);
if (sync && (sync_dirty_buffer(bh) != 0))
-   return FFS_MEDIAERR;
+   return -EIO;
} else {
count = num_secs << p_bd->sector_size_bits;
 
@@ -115,7 +115,7 @@ int bdev_write(struct super_block *sb, sector_t secno, 
struct buffer_head *bh,
WARN(!p_fs->dev_ejected,
 "[EXFAT] No bh, device seems wrong or to be ejected.\n");
 
-   return FFS_MEDIAERR;
+   return -EIO;
 }
 
 int bdev_sync(struct super_block *sb)
@@ -126,11 +126,11 @@ int bdev_sync(struct super_block *sb)
long flags = sbi->debug_flags;
 
if (flags & EXFAT_DEBUGFLAGS_ERROR_RW)
-   return FFS_MEDIAERR;
+   return -EIO;
 #endif /* CONFIG_EXFAT_KERNEL_DEBUG */
 
if (!p_bd->opened)
-   return FFS_MEDIAERR;
+   return -ENODEV;
 
return sync_blockdev(sb->s_bdev);
 }
diff --git a/drivers/staging/exfat/exfat_core.c 
b/drivers/staging/exfat/exfat_core.c
index 39c103e73b63..7e637a8e19d3 100644
--- a/drivers/staging/exfat/exfat_core.c
+++ b/drivers/staging/exfat/exfat_core.c
@@ -158,7 +158,7 @@ s32 load_alloc_bitmap(struct super_block *sb)
ep = (struct bmap_dentry_t *)get_entry_in_dir(sb, ,
  i, NULL);
if (!ep)
-   return FFS_MEDIAERR;
+   return -ENOENT;
 
type = p_fs->fs_func->get_entry_type((struct dentry_t 
*)ep);
 
@@ -202,7 +202,7 @@ s32 load_alloc_bitmap(struct super_block *sb)
}
 
if (FAT_read(sb, clu.dir, ) != 0)
-   return FFS_MEDIAERR;
+   return -EIO;
}
 
return -EFSCORRUPTED;
@@ -391,13 +391,13 @@ static s32 exfat_alloc_cluster(struct super_block *sb, 
s32 num_alloc,
}
 
if (set_alloc_bitmap(sb, new_clu - 2) != FFS_SUCCESS)
-   return -1;
+   return -EIO;
 
num_clusters++;
 
if (p_chain->flags == 0x01) {
if (FAT_write(sb, new_clu, CLUSTER_32(~0)) < 0)
-   return -1;
+   return -EIO;
}
 
if (

[PATCH 09/15] staging: exfat: Clean up return codes - FFS_FORMATERR

2019-10-24 Thread Valdis Kletnieks
Convert FFS_FORMATERR to -EFSCORRUPTED

Signed-off-by: Valdis Kletnieks 
---
 drivers/staging/exfat/exfat.h   | 3 ++-
 drivers/staging/exfat/exfat_core.c  | 4 ++--
 drivers/staging/exfat/exfat_super.c | 2 +-
 3 files changed, 5 insertions(+), 4 deletions(-)

diff --git a/drivers/staging/exfat/exfat.h b/drivers/staging/exfat/exfat.h
index 2588a6cbe552..7ca187e77cbe 100644
--- a/drivers/staging/exfat/exfat.h
+++ b/drivers/staging/exfat/exfat.h
@@ -30,6 +30,8 @@
 #undef DEBUG
 #endif
 
+#define EFSCORRUPTED   EUCLEAN /* Filesystem is corrupted */
+
 #define DENTRY_SIZE32  /* dir entry size */
 #define DENTRY_SIZE_BITS   5
 
@@ -209,7 +211,6 @@ static inline u16 get_row_index(u16 i)
 /* return values */
 #define FFS_SUCCESS 0
 #define FFS_MEDIAERR1
-#define FFS_FORMATERR   2
 #define FFS_MOUNTED 3
 #define FFS_NOTMOUNTED  4
 #define FFS_ALIGNMENTERR5
diff --git a/drivers/staging/exfat/exfat_core.c 
b/drivers/staging/exfat/exfat_core.c
index fa2bf18b4a14..39c103e73b63 100644
--- a/drivers/staging/exfat/exfat_core.c
+++ b/drivers/staging/exfat/exfat_core.c
@@ -205,7 +205,7 @@ s32 load_alloc_bitmap(struct super_block *sb)
return FFS_MEDIAERR;
}
 
-   return FFS_FORMATERR;
+   return -EFSCORRUPTED;
 }
 
 void free_alloc_bitmap(struct super_block *sb)
@@ -2309,7 +2309,7 @@ s32 exfat_mount(struct super_block *sb, struct 
pbr_sector_t *p_pbr)
struct bd_info_t *p_bd = &(EXFAT_SB(sb)->bd_info);
 
if (p_bpb->num_fats == 0)
-   return FFS_FORMATERR;
+   return -EFSCORRUPTED;
 
p_fs->sectors_per_clu = 1 << p_bpb->sectors_per_clu_bits;
p_fs->sectors_per_clu_bits = p_bpb->sectors_per_clu_bits;
diff --git a/drivers/staging/exfat/exfat_super.c 
b/drivers/staging/exfat/exfat_super.c
index 5b35e3683605..161971c80c02 100644
--- a/drivers/staging/exfat/exfat_super.c
+++ b/drivers/staging/exfat/exfat_super.c
@@ -384,7 +384,7 @@ static int ffsMountVol(struct super_block *sb)
if (GET16_A(p_pbr->signature) != PBR_SIGNATURE) {
brelse(tmp_bh);
bdev_close(sb);
-   ret = FFS_FORMATERR;
+   ret = -EFSCORRUPTED;
goto out;
}
 
-- 
2.23.0

___
devel mailing list
de...@linuxdriverproject.org
http://driverdev.linuxdriverproject.org/mailman/listinfo/driverdev-devel


[PATCH 11/15] staging: exfat: Clean up return codes - FFS_EOF

2019-10-24 Thread Valdis Kletnieks
Convert FFS_EOF to return 0 for a zero-length read() as per 'man 2 read'.

Signed-off-by: Valdis Kletnieks 
---
 drivers/staging/exfat/exfat.h   | 1 -
 drivers/staging/exfat/exfat_super.c | 2 +-
 2 files changed, 1 insertion(+), 2 deletions(-)

diff --git a/drivers/staging/exfat/exfat.h b/drivers/staging/exfat/exfat.h
index df7b99707aed..3ff7293fedd2 100644
--- a/drivers/staging/exfat/exfat.h
+++ b/drivers/staging/exfat/exfat.h
@@ -217,7 +217,6 @@ static inline u16 get_row_index(u16 i)
 #define FFS_INVALIDFID  8
 #define FFS_NOTOPENED   12
 #define FFS_MAXOPENED   13
-#define FFS_EOF 15
 #define FFS_ERROR   19
 
 #define NUM_UPCASE  2918
diff --git a/drivers/staging/exfat/exfat_super.c 
b/drivers/staging/exfat/exfat_super.c
index a5c85dafefb4..a0c28fd8824b 100644
--- a/drivers/staging/exfat/exfat_super.c
+++ b/drivers/staging/exfat/exfat_super.c
@@ -717,7 +717,7 @@ static int ffsReadFile(struct inode *inode, struct 
file_id_t *fid, void *buffer,
if (count == 0) {
if (rcount)
*rcount = 0;
-   ret = FFS_EOF;
+   ret = 0;
goto out;
}
 
-- 
2.23.0

___
devel mailing list
de...@linuxdriverproject.org
http://driverdev.linuxdriverproject.org/mailman/listinfo/driverdev-devel


[PATCH 08/15] staging: exfat: Clean up return code - FFS_MEMORYERR

2019-10-24 Thread Valdis Kletnieks
Convert FFS_MEMORYERR to -ENOMEM

Signed-off-by: Valdis Kletnieks 
---
 drivers/staging/exfat/exfat.h  |  1 -
 drivers/staging/exfat/exfat_core.c | 10 +-
 2 files changed, 5 insertions(+), 6 deletions(-)

diff --git a/drivers/staging/exfat/exfat.h b/drivers/staging/exfat/exfat.h
index 00e5e37100ce..2588a6cbe552 100644
--- a/drivers/staging/exfat/exfat.h
+++ b/drivers/staging/exfat/exfat.h
@@ -218,7 +218,6 @@ static inline u16 get_row_index(u16 i)
 #define FFS_NOTOPENED   12
 #define FFS_MAXOPENED   13
 #define FFS_EOF 15
-#define FFS_MEMORYERR   17
 #define FFS_ERROR   19
 
 #define NUM_UPCASE  2918
diff --git a/drivers/staging/exfat/exfat_core.c 
b/drivers/staging/exfat/exfat_core.c
index 23c369fb98e5..fa2bf18b4a14 100644
--- a/drivers/staging/exfat/exfat_core.c
+++ b/drivers/staging/exfat/exfat_core.c
@@ -177,7 +177,7 @@ s32 load_alloc_bitmap(struct super_block *sb)
   sizeof(struct 
buffer_head *),
   GFP_KERNEL);
if (!p_fs->vol_amap)
-   return FFS_MEMORYERR;
+   return -ENOMEM;
 
sector = START_SECTOR(p_fs->map_clu);
 
@@ -604,7 +604,7 @@ static s32 __load_upcase_table(struct super_block *sb, 
sector_t sector,
upcase_table = p_fs->vol_utbl = kmalloc(UTBL_COL_COUNT * sizeof(u16 *),
GFP_KERNEL);
if (!upcase_table)
-   return FFS_MEMORYERR;
+   return -ENOMEM;
memset(upcase_table, 0, UTBL_COL_COUNT * sizeof(u16 *));
 
while (sector < end_sector) {
@@ -644,7 +644,7 @@ static s32 __load_upcase_table(struct super_block *sb, 
sector_t sector,
upcase_table[col_index] = 
kmalloc_array(UTBL_ROW_COUNT,
sizeof(u16), GFP_KERNEL);
if (!upcase_table[col_index]) {
-   ret = FFS_MEMORYERR;
+   ret = -ENOMEM;
goto error;
}
 
@@ -684,7 +684,7 @@ static s32 __load_default_upcase_table(struct super_block 
*sb)
upcase_table = p_fs->vol_utbl = kmalloc(UTBL_COL_COUNT * sizeof(u16 *),
GFP_KERNEL);
if (!upcase_table)
-   return FFS_MEMORYERR;
+   return -ENOMEM;
memset(upcase_table, 0, UTBL_COL_COUNT * sizeof(u16 *));
 
for (i = 0; index <= 0x && i < NUM_UPCASE * 2; i += 2) {
@@ -707,7 +707,7 @@ static s32 __load_default_upcase_table(struct super_block 
*sb)

sizeof(u16),

GFP_KERNEL);
if (!upcase_table[col_index]) {
-   ret = FFS_MEMORYERR;
+   ret = -ENOMEM;
goto error;
}
 
-- 
2.23.0

___
devel mailing list
de...@linuxdriverproject.org
http://driverdev.linuxdriverproject.org/mailman/listinfo/driverdev-devel


[PATCH 02/15] staging: exfat: Clean up return codes - FFS_NOTFOUND

2019-10-24 Thread Valdis Kletnieks
Convert FFS_NOTFOUND to -ENOENT

Signed-off-by: Valdis Kletnieks 
---
 drivers/staging/exfat/exfat.h   | 1 -
 drivers/staging/exfat/exfat_super.c | 6 +++---
 2 files changed, 3 insertions(+), 4 deletions(-)

diff --git a/drivers/staging/exfat/exfat.h b/drivers/staging/exfat/exfat.h
index 4aca4ae44a98..1d82de4e1a5c 100644
--- a/drivers/staging/exfat/exfat.h
+++ b/drivers/staging/exfat/exfat.h
@@ -216,7 +216,6 @@ static inline u16 get_row_index(u16 i)
 #define FFS_SEMAPHOREERR6
 #define FFS_INVALIDPATH 7
 #define FFS_INVALIDFID  8
-#define FFS_NOTFOUND9
 #define FFS_FILEEXIST   10
 #define FFS_PERMISSIONERR   11
 #define FFS_NOTOPENED   12
diff --git a/drivers/staging/exfat/exfat_super.c 
b/drivers/staging/exfat/exfat_super.c
index 273fe2310e76..50fc097ded69 100644
--- a/drivers/staging/exfat/exfat_super.c
+++ b/drivers/staging/exfat/exfat_super.c
@@ -572,7 +572,7 @@ static int ffsLookupFile(struct inode *inode, char *path, 
struct file_id_t *fid)
dentry = p_fs->fs_func->find_dir_entry(sb, , _name, num_entries,
   _name, TYPE_ALL);
if (dentry < -1) {
-   ret = FFS_NOTFOUND;
+   ret = -ENOENT;
goto out;
}
 
@@ -2695,7 +2695,7 @@ static int exfat_rmdir(struct inode *dir, struct dentry 
*dentry)
err = -EINVAL;
else if (err == FFS_FILEEXIST)
err = -ENOTEMPTY;
-   else if (err == FFS_NOTFOUND)
+   else if (err == -ENOENT)
err = -ENOENT;
else if (err == FFS_DIRBUSY)
err = -EBUSY;
@@ -2752,7 +2752,7 @@ static int exfat_rename(struct inode *old_dir, struct 
dentry *old_dentry,
err = -EINVAL;
else if (err == FFS_FILEEXIST)
err = -EEXIST;
-   else if (err == FFS_NOTFOUND)
+   else if (err == -ENOENT)
err = -ENOENT;
else if (err == -ENOSPC)
err = -ENOSPC;
-- 
2.23.0

___
devel mailing list
de...@linuxdriverproject.org
http://driverdev.linuxdriverproject.org/mailman/listinfo/driverdev-devel


[PATCH 06/15] staging: exfat: Clean up return codes - FFS_FILEEXIST

2019-10-24 Thread Valdis Kletnieks
Convert FFS_FILEEXIST to -EEXIST

Signed-off-by: Valdis Kletnieks 
---
 drivers/staging/exfat/exfat.h   |  1 -
 drivers/staging/exfat/exfat_core.c  |  2 +-
 drivers/staging/exfat/exfat_super.c | 14 +++---
 3 files changed, 8 insertions(+), 9 deletions(-)

diff --git a/drivers/staging/exfat/exfat.h b/drivers/staging/exfat/exfat.h
index a2b865788697..c56363652c5d 100644
--- a/drivers/staging/exfat/exfat.h
+++ b/drivers/staging/exfat/exfat.h
@@ -216,7 +216,6 @@ static inline u16 get_row_index(u16 i)
 #define FFS_SEMAPHOREERR6
 #define FFS_INVALIDPATH 7
 #define FFS_INVALIDFID  8
-#define FFS_FILEEXIST   10
 #define FFS_NOTOPENED   12
 #define FFS_MAXOPENED   13
 #define FFS_EOF 15
diff --git a/drivers/staging/exfat/exfat_core.c 
b/drivers/staging/exfat/exfat_core.c
index af1ccd686e01..ba5680123b0f 100644
--- a/drivers/staging/exfat/exfat_core.c
+++ b/drivers/staging/exfat/exfat_core.c
@@ -2103,7 +2103,7 @@ static s32 fat_generate_dos_name(struct super_block *sb, 
struct chain_t *p_dir,
}
 
if ((count == 0) || (count >= 1024))
-   return FFS_FILEEXIST;
+   return -EEXIST;
fat_attach_count_to_dos_name(p_dosname->name, count);
 
/* Now dos_name has DOS~.EXT */
diff --git a/drivers/staging/exfat/exfat_super.c 
b/drivers/staging/exfat/exfat_super.c
index eb3c3642abca..2c294e238d7b 100644
--- a/drivers/staging/exfat/exfat_super.c
+++ b/drivers/staging/exfat/exfat_super.c
@@ -1288,7 +1288,7 @@ static int ffsMoveFile(struct inode *old_parent_inode, 
struct file_id_t *fid,
new_clu.flags = new_fid->flags;
 
if (!is_dir_empty(sb, _clu)) {
-   ret = FFS_FILEEXIST;
+   ret = -EEXIST;
goto out;
}
}
@@ -2156,7 +2156,7 @@ static int ffsRemoveDir(struct inode *inode, struct 
file_id_t *fid)
clu_to_free.flags = fid->flags;
 
if (!is_dir_empty(sb, _to_free)) {
-   ret = FFS_FILEEXIST;
+   ret = -EEXIST;
goto out;
}
 
@@ -2358,7 +2358,7 @@ static int exfat_create(struct inode *dir, struct dentry 
*dentry, umode_t mode,
if (err) {
if (err == FFS_INVALIDPATH)
err = -EINVAL;
-   else if (err == FFS_FILEEXIST)
+   else if (err == -EEXIST)
err = -EEXIST;
else if (err == -ENOSPC)
err = -ENOSPC;
@@ -2569,7 +2569,7 @@ static int exfat_symlink(struct inode *dir, struct dentry 
*dentry,
if (err) {
if (err == FFS_INVALIDPATH)
err = -EINVAL;
-   else if (err == FFS_FILEEXIST)
+   else if (err == -EEXIST)
err = -EEXIST;
else if (err == -ENOSPC)
err = -ENOSPC;
@@ -2639,7 +2639,7 @@ static int exfat_mkdir(struct inode *dir, struct dentry 
*dentry, umode_t mode)
if (err) {
if (err == FFS_INVALIDPATH)
err = -EINVAL;
-   else if (err == FFS_FILEEXIST)
+   else if (err == -EEXIST)
err = -EEXIST;
else if (err == -ENOSPC)
err = -ENOSPC;
@@ -2693,7 +2693,7 @@ static int exfat_rmdir(struct inode *dir, struct dentry 
*dentry)
if (err) {
if (err == FFS_INVALIDPATH)
err = -EINVAL;
-   else if (err == FFS_FILEEXIST)
+   else if (err == -EEXIST)
err = -ENOTEMPTY;
else if (err == -ENOENT)
err = -ENOENT;
@@ -2750,7 +2750,7 @@ static int exfat_rename(struct inode *old_dir, struct 
dentry *old_dentry,
err = -EPERM;
else if (err == FFS_INVALIDPATH)
err = -EINVAL;
-   else if (err == FFS_FILEEXIST)
+   else if (err == -EEXIST)
err = -EEXIST;
else if (err == -ENOENT)
err = -ENOENT;
-- 
2.23.0

___
devel mailing list
de...@linuxdriverproject.org
http://driverdev.linuxdriverproject.org/mailman/listinfo/driverdev-devel


[PATCH 05/15] staging: exfat: Clean up return codes - FFS_NAMETOOLONG

2019-10-24 Thread Valdis Kletnieks
Convert FFS_NOTNAMETOOLONG to -ENAMETOOLONG

Signed-off-by: Valdis Kletnieks 
---
 drivers/staging/exfat/exfat.h   | 1 -
 drivers/staging/exfat/exfat_super.c | 4 ++--
 2 files changed, 2 insertions(+), 3 deletions(-)

diff --git a/drivers/staging/exfat/exfat.h b/drivers/staging/exfat/exfat.h
index 86bdcf222a5a..a2b865788697 100644
--- a/drivers/staging/exfat/exfat.h
+++ b/drivers/staging/exfat/exfat.h
@@ -221,7 +221,6 @@ static inline u16 get_row_index(u16 i)
 #define FFS_MAXOPENED   13
 #define FFS_EOF 15
 #define FFS_MEMORYERR   17
-#define FFS_NAMETOOLONG18
 #define FFS_ERROR   19
 
 #define NUM_UPCASE  2918
diff --git a/drivers/staging/exfat/exfat_super.c 
b/drivers/staging/exfat/exfat_super.c
index fd5d8ba0d8bc..eb3c3642abca 100644
--- a/drivers/staging/exfat/exfat_super.c
+++ b/drivers/staging/exfat/exfat_super.c
@@ -2362,7 +2362,7 @@ static int exfat_create(struct inode *dir, struct dentry 
*dentry, umode_t mode,
err = -EEXIST;
else if (err == -ENOSPC)
err = -ENOSPC;
-   else if (err == FFS_NAMETOOLONG)
+   else if (err == -ENAMETOOLONG)
err = -ENAMETOOLONG;
else
err = -EIO;
@@ -2643,7 +2643,7 @@ static int exfat_mkdir(struct inode *dir, struct dentry 
*dentry, umode_t mode)
err = -EEXIST;
else if (err == -ENOSPC)
err = -ENOSPC;
-   else if (err == FFS_NAMETOOLONG)
+   else if (err == -ENAMETOOLONG)
err = -ENAMETOOLONG;
else
err = -EIO;
-- 
2.23.0

___
devel mailing list
de...@linuxdriverproject.org
http://driverdev.linuxdriverproject.org/mailman/listinfo/driverdev-devel


[PATCH 07/15] staging: exfat: Clean up return codes - FFS_INVALIDPATH

2019-10-24 Thread Valdis Kletnieks
Convert FFS_INVALIDPATH to -EINVAL

Signed-off-by: Valdis Kletnieks 
---
 drivers/staging/exfat/exfat.h   |  1 -
 drivers/staging/exfat/exfat_core.c  | 10 +-
 drivers/staging/exfat/exfat_super.c | 10 +-
 3 files changed, 10 insertions(+), 11 deletions(-)

diff --git a/drivers/staging/exfat/exfat.h b/drivers/staging/exfat/exfat.h
index c56363652c5d..00e5e37100ce 100644
--- a/drivers/staging/exfat/exfat.h
+++ b/drivers/staging/exfat/exfat.h
@@ -214,7 +214,6 @@ static inline u16 get_row_index(u16 i)
 #define FFS_NOTMOUNTED  4
 #define FFS_ALIGNMENTERR5
 #define FFS_SEMAPHOREERR6
-#define FFS_INVALIDPATH 7
 #define FFS_INVALIDFID  8
 #define FFS_NOTOPENED   12
 #define FFS_MAXOPENED   13
diff --git a/drivers/staging/exfat/exfat_core.c 
b/drivers/staging/exfat/exfat_core.c
index ba5680123b0f..23c369fb98e5 100644
--- a/drivers/staging/exfat/exfat_core.c
+++ b/drivers/staging/exfat/exfat_core.c
@@ -2124,7 +2124,7 @@ s32 get_num_entries_and_dos_name(struct super_block *sb, 
struct chain_t *p_dir,
 
num_entries = p_fs->fs_func->calc_num_entries(p_uniname);
if (num_entries == 0)
-   return FFS_INVALIDPATH;
+   return -EINVAL;
 
if (p_fs->vol_type != EXFAT) {
nls_uniname_to_dosname(sb, p_dosname, p_uniname, );
@@ -2136,7 +2136,7 @@ s32 get_num_entries_and_dos_name(struct super_block *sb, 
struct chain_t *p_dir,
} else {
for (r = reserved_names; *r; r++) {
if (!strncmp((void *)p_dosname->name, *r, 8))
-   return FFS_INVALIDPATH;
+   return -EINVAL;
}
 
if (p_dosname->name_case != 0xFF)
@@ -2257,11 +2257,11 @@ s32 resolve_path(struct inode *inode, char *path, 
struct chain_t *p_dir,
struct file_id_t *fid = &(EXFAT_I(inode)->fid);
 
if (strscpy(name_buf, path, sizeof(name_buf)) < 0)
-   return FFS_INVALIDPATH;
+   return -EINVAL;
 
nls_cstring_to_uniname(sb, p_uniname, name_buf, );
if (lossy)
-   return FFS_INVALIDPATH;
+   return -EINVAL;
 
fid->size = i_size_read(inode);
 
@@ -2659,7 +2659,7 @@ s32 move_file(struct inode *inode, struct chain_t 
*p_olddir, s32 oldentry,
/* check if the source and target directory is the same */
if (fs_func->get_entry_type(epmov) == TYPE_DIR &&
fs_func->get_entry_clu0(epmov) == p_newdir->dir)
-   return FFS_INVALIDPATH;
+   return -EINVAL;
 
buf_lock(sb, sector_mov);
 
diff --git a/drivers/staging/exfat/exfat_super.c 
b/drivers/staging/exfat/exfat_super.c
index 2c294e238d7b..5b35e3683605 100644
--- a/drivers/staging/exfat/exfat_super.c
+++ b/drivers/staging/exfat/exfat_super.c
@@ -2356,7 +2356,7 @@ static int exfat_create(struct inode *dir, struct dentry 
*dentry, umode_t mode,
 
err = ffsCreateFile(dir, (u8 *)dentry->d_name.name, FM_REGULAR, );
if (err) {
-   if (err == FFS_INVALIDPATH)
+   if (err == -EINVAL)
err = -EINVAL;
else if (err == -EEXIST)
err = -EEXIST;
@@ -2567,7 +2567,7 @@ static int exfat_symlink(struct inode *dir, struct dentry 
*dentry,
 
err = ffsCreateFile(dir, (u8 *)dentry->d_name.name, FM_SYMLINK, );
if (err) {
-   if (err == FFS_INVALIDPATH)
+   if (err == -EINVAL)
err = -EINVAL;
else if (err == -EEXIST)
err = -EEXIST;
@@ -2637,7 +2637,7 @@ static int exfat_mkdir(struct inode *dir, struct dentry 
*dentry, umode_t mode)
 
err = ffsCreateDir(dir, (u8 *)dentry->d_name.name, );
if (err) {
-   if (err == FFS_INVALIDPATH)
+   if (err == -EINVAL)
err = -EINVAL;
else if (err == -EEXIST)
err = -EEXIST;
@@ -2691,7 +2691,7 @@ static int exfat_rmdir(struct inode *dir, struct dentry 
*dentry)
 
err = ffsRemoveDir(dir, &(EXFAT_I(inode)->fid));
if (err) {
-   if (err == FFS_INVALIDPATH)
+   if (err == -EINVAL)
err = -EINVAL;
else if (err == -EEXIST)
err = -ENOTEMPTY;
@@ -2748,7 +2748,7 @@ static int exfat_rename(struct inode *old_dir, struct 
dentry *old_dentry,
if (err) {
if (err == -EPERM)
err = -EPERM;
-   else if (err == FFS_INVALIDPATH)
+   else if (err == -EINVAL)
err = -EINVAL;
else if (err == -EEXIST)
err = -EEXIST;
-- 
2.23.0

___

[PATCH 01/15] staging: exfat: Clean up return codes - FFS_FULL

2019-10-24 Thread Valdis Kletnieks
Start cleaning up the odd scheme of return codes, starting with FFS_FULL

Signed-off-by: Valdis Kletnieks 
---
 drivers/staging/exfat/exfat.h   |  1 -
 drivers/staging/exfat/exfat_core.c  | 10 +-
 drivers/staging/exfat/exfat_super.c | 16 
 3 files changed, 13 insertions(+), 14 deletions(-)

diff --git a/drivers/staging/exfat/exfat.h b/drivers/staging/exfat/exfat.h
index 8738e41dd5a5..4aca4ae44a98 100644
--- a/drivers/staging/exfat/exfat.h
+++ b/drivers/staging/exfat/exfat.h
@@ -221,7 +221,6 @@ static inline u16 get_row_index(u16 i)
 #define FFS_PERMISSIONERR   11
 #define FFS_NOTOPENED   12
 #define FFS_MAXOPENED   13
-#define FFS_FULL14
 #define FFS_EOF 15
 #define FFS_DIRBUSY 16
 #define FFS_MEMORYERR   17
diff --git a/drivers/staging/exfat/exfat_core.c 
b/drivers/staging/exfat/exfat_core.c
index 7332e69fcbcd..af1ccd686e01 100644
--- a/drivers/staging/exfat/exfat_core.c
+++ b/drivers/staging/exfat/exfat_core.c
@@ -2369,7 +2369,7 @@ s32 create_dir(struct inode *inode, struct chain_t *p_dir,
/* find_empty_entry must be called before alloc_cluster */
dentry = find_empty_entry(inode, p_dir, num_entries);
if (dentry < 0)
-   return FFS_FULL;
+   return -ENOSPC;
 
clu.dir = CLUSTER_32(~0);
clu.size = 0;
@@ -2380,7 +2380,7 @@ s32 create_dir(struct inode *inode, struct chain_t *p_dir,
if (ret < 0)
return FFS_MEDIAERR;
else if (ret == 0)
-   return FFS_FULL;
+   return -ENOSPC;
 
ret = clear_cluster(sb, clu.dir);
if (ret != FFS_SUCCESS)
@@ -2472,7 +2472,7 @@ s32 create_file(struct inode *inode, struct chain_t 
*p_dir,
/* find_empty_entry must be called before alloc_cluster() */
dentry = find_empty_entry(inode, p_dir, num_entries);
if (dentry < 0)
-   return FFS_FULL;
+   return -ENOSPC;
 
/* (1) update the directory entry */
/* fill the dos name directory entry information of the created file.
@@ -2571,7 +2571,7 @@ s32 rename_file(struct inode *inode, struct chain_t 
*p_dir, s32 oldentry,
newentry = find_empty_entry(inode, p_dir, num_new_entries);
if (newentry < 0) {
buf_unlock(sb, sector_old);
-   return FFS_FULL;
+   return -ENOSPC;
}
 
epnew = get_entry_in_dir(sb, p_dir, newentry, _new);
@@ -2682,7 +2682,7 @@ s32 move_file(struct inode *inode, struct chain_t 
*p_olddir, s32 oldentry,
newentry = find_empty_entry(inode, p_newdir, num_new_entries);
if (newentry < 0) {
buf_unlock(sb, sector_mov);
-   return FFS_FULL;
+   return -ENOSPC;
}
 
epnew = get_entry_in_dir(sb, p_newdir, newentry, _new);
diff --git a/drivers/staging/exfat/exfat_super.c 
b/drivers/staging/exfat/exfat_super.c
index 0264be92c2be..273fe2310e76 100644
--- a/drivers/staging/exfat/exfat_super.c
+++ b/drivers/staging/exfat/exfat_super.c
@@ -1045,7 +1045,7 @@ static int ffsWriteFile(struct inode *inode, struct 
file_id_t *fid,
*wcount = write_bytes;
 
if (num_alloced == 0)
-   ret = FFS_FULL;
+   ret = -ENOSPC;
 
else if (p_fs->dev_ejected)
ret = FFS_MEDIAERR;
@@ -1801,7 +1801,7 @@ static int ffsMapCluster(struct inode *inode, s32 
clu_offset, u32 *clu)
ret = FFS_MEDIAERR;
goto out;
} else if (num_alloced == 0) {
-   ret = FFS_FULL;
+   ret = -ENOSPC;
goto out;
}
 
@@ -2360,7 +2360,7 @@ static int exfat_create(struct inode *dir, struct dentry 
*dentry, umode_t mode,
err = -EINVAL;
else if (err == FFS_FILEEXIST)
err = -EEXIST;
-   else if (err == FFS_FULL)
+   else if (err == -ENOSPC)
err = -ENOSPC;
else if (err == FFS_NAMETOOLONG)
err = -ENAMETOOLONG;
@@ -2571,7 +2571,7 @@ static int exfat_symlink(struct inode *dir, struct dentry 
*dentry,
err = -EINVAL;
else if (err == FFS_FILEEXIST)
err = -EEXIST;
-   else if (err == FFS_FULL)
+   else if (err == -ENOSPC)
err = -ENOSPC;
else
err = -EIO;
@@ -2583,7 +2583,7 @@ static int exfat_symlink(struct inode *dir, struct dentry 
*dentry,
if (err) {
ffsRemoveFile(dir, );
 
-   if (err == FFS_FULL)
+   if (err == -ENOSPC)
err = -ENOSPC;
else
err = -EIO;
@@ -2641,7 +2641,7 @@ stat

[PATCH 00/15] staging: exfat: Clean up return codes

2019-10-24 Thread Valdis Kletnieks
The code had its own non-standard FFS_FOO return codes. Go through
and convert them all the kernel standard -EFOO codes.

Valdis Kletnieks (15):
  staging: exfat: Clean up return codes - FFS_FULL
  staging: exfat: Clean up return codes - FFS_NOTFOUND
  staging: exfat: Clean up return codes - FFS_DIRBUSY
  staging: exfat: Clean up return codes - FFS_PERMISSIONERR
  staging: exfat: Clean up return codes - FFS_NAMETOOLONG
  staging: exfat: Clean up return codes - FFS_FILEEXIST
  staging: exfat: Clean up return codes - FFS_INVALIDPATH
  staging: exfat: Clean up return code - FFS_MEMORYERR
  staging: exfat: Clean up return codes - FFS_FORMATERR
  staging: exfat: Clean up return codes - FFS_MEDIAERR
  staging: exfat: Clean up return codes - FFS_EOF
  staging: exfat: Clean up return codes - FFS_INVALIDFID
  staging: exfat: Clean up return codes - FFS_ERROR
  staging: exfat: Clean up return codes - remove unused codes
  staging: exfat: Clean up return codes - FFS_SUCCESS

 drivers/staging/exfat/exfat.h|  24 +--
 drivers/staging/exfat/exfat_blkdev.c |  18 +-
 drivers/staging/exfat/exfat_cache.c  |   4 +-
 drivers/staging/exfat/exfat_core.c   | 202 ++--
 drivers/staging/exfat/exfat_super.c  | 269 ++-
 5 files changed, 249 insertions(+), 268 deletions(-)

-- 
2.23.0

___
devel mailing list
de...@linuxdriverproject.org
http://driverdev.linuxdriverproject.org/mailman/listinfo/driverdev-devel


[PATCH 03/15] staging: exfat: Clean up return codes - FFS_DIRBUSY

2019-10-24 Thread Valdis Kletnieks
Convert FFS_DIRBUSY to -EBUSY

Signed-off-by: Valdis Kletnieks 
---
 drivers/staging/exfat/exfat.h   | 1 -
 drivers/staging/exfat/exfat_super.c | 2 +-
 2 files changed, 1 insertion(+), 2 deletions(-)

diff --git a/drivers/staging/exfat/exfat.h b/drivers/staging/exfat/exfat.h
index 1d82de4e1a5c..ec52237b01cd 100644
--- a/drivers/staging/exfat/exfat.h
+++ b/drivers/staging/exfat/exfat.h
@@ -221,7 +221,6 @@ static inline u16 get_row_index(u16 i)
 #define FFS_NOTOPENED   12
 #define FFS_MAXOPENED   13
 #define FFS_EOF 15
-#define FFS_DIRBUSY 16
 #define FFS_MEMORYERR   17
 #define FFS_NAMETOOLONG18
 #define FFS_ERROR   19
diff --git a/drivers/staging/exfat/exfat_super.c 
b/drivers/staging/exfat/exfat_super.c
index 50fc097ded69..566cfba0a522 100644
--- a/drivers/staging/exfat/exfat_super.c
+++ b/drivers/staging/exfat/exfat_super.c
@@ -2697,7 +2697,7 @@ static int exfat_rmdir(struct inode *dir, struct dentry 
*dentry)
err = -ENOTEMPTY;
else if (err == -ENOENT)
err = -ENOENT;
-   else if (err == FFS_DIRBUSY)
+   else if (err == -EBUSY)
err = -EBUSY;
else
err = -EIO;
-- 
2.23.0

___
devel mailing list
de...@linuxdriverproject.org
http://driverdev.linuxdriverproject.org/mailman/listinfo/driverdev-devel


[PATCH 4/8] staging: exfat: Cleanup static entries in exfat.h

2019-10-22 Thread Valdis Kletnieks
Many of the static definitions that remain are not needed, as the function
definition is already before the first use.

Signed-off-by: Valdis Kletnieks 
---
 drivers/staging/exfat/exfat.h | 53 ---
 1 file changed, 53 deletions(-)

diff --git a/drivers/staging/exfat/exfat.h b/drivers/staging/exfat/exfat.h
index 9cd78b6417d0..dbd86a6cdc95 100644
--- a/drivers/staging/exfat/exfat.h
+++ b/drivers/staging/exfat/exfat.h
@@ -782,17 +782,9 @@ static void buf_sync(struct super_block *sb);
 
 /* fs management functions */
 void fs_set_vol_flags(struct super_block *sb, u32 new_flag);
-static void fs_error(struct super_block *sb);
 
 /* cluster management functions */
-static s32 clear_cluster(struct super_block *sb, u32 clu);
-static s32 exfat_alloc_cluster(struct super_block *sb, s32 num_alloc,
-   struct chain_t *p_chain);
-static void exfat_free_cluster(struct super_block *sb, struct chain_t *p_chain,
-   s32 do_relse);
-static u32 find_last_cluster(struct super_block *sb, struct chain_t *p_chain);
 s32 count_num_clusters(struct super_block *sb, struct chain_t *dir);
-static s32 exfat_count_used_clusters(struct super_block *sb);
 void exfat_chain_cont_cluster(struct super_block *sb, u32 chain, s32 len);
 
 /* allocation bitmap management functions */
@@ -808,36 +800,12 @@ s32 load_upcase_table(struct super_block *sb);
 void free_upcase_table(struct super_block *sb);
 
 /* dir entry management functions */
-static u32 exfat_get_entry_type(struct dentry_t *p_entry);
-static void exfat_set_entry_type(struct dentry_t *p_entry, u32 type);
-static u32 exfat_get_entry_attr(struct dentry_t *p_entry);
-static void exfat_set_entry_attr(struct dentry_t *p_entry, u32 attr);
-static u8 exfat_get_entry_flag(struct dentry_t *p_entry);
-static void exfat_set_entry_flag(struct dentry_t *p_entry, u8 flag);
-static u32 exfat_get_entry_clu0(struct dentry_t *p_entry);
-static void exfat_set_entry_clu0(struct dentry_t *p_entry, u32 start_clu);
-static u64 exfat_get_entry_size(struct dentry_t *p_entry);
-static void exfat_set_entry_size(struct dentry_t *p_entry, u64 size);
 struct timestamp_t *tm_current(struct timestamp_t *tm);
-static void exfat_get_entry_time(struct dentry_t *p_entry, struct timestamp_t 
*tp,
- u8 mode);
-static void exfat_set_entry_time(struct dentry_t *p_entry, struct timestamp_t 
*tp,
- u8 mode);
-static s32 exfat_init_dir_entry(struct super_block *sb, struct chain_t *p_dir,
-s32 entry, u32 type, u32 start_clu, u64 size);
-static s32 exfat_init_ext_dir_entry(struct super_block *sb, struct chain_t 
*p_dir,
-s32 entry, s32 num_entries,
-struct uni_name_t *p_uniname,
-   struct dos_name_t *p_dosname);
 static void init_file_entry(struct file_dentry_t *ep, u32 type);
 static void init_strm_entry(struct strm_dentry_t *ep, u8 flags, u32 start_clu,
 u64 size);
 static void init_name_entry(struct name_dentry_t *ep, u16 *uniname);
-static void exfat_delete_dir_entry(struct super_block *sb, struct chain_t 
*p_dir,
-   s32 entry, s32 order, s32 num_entries);
 
-static s32 find_location(struct super_block *sb, struct chain_t *p_dir, s32 
entry,
- sector_t *sector, s32 *offset);
 struct dentry_t *get_entry_in_dir(struct super_block *sb, struct chain_t 
*p_dir,
  s32 entry, sector_t *sector);
 struct entry_set_cache_t *get_entry_set_in_dir(struct super_block *sb,
@@ -846,18 +814,6 @@ struct entry_set_cache_t *get_entry_set_in_dir(struct 
super_block *sb,
   struct dentry_t **file_ep);
 void release_entry_set(struct entry_set_cache_t *es);
 static s32 write_whole_entry_set(struct super_block *sb, struct 
entry_set_cache_t *es);
-static s32 write_partial_entries_in_entry_set(struct super_block *sb,
-  struct entry_set_cache_t *es,
-  struct dentry_t *ep, u32 count);
-static s32 search_deleted_or_unused_entry(struct super_block *sb,
-  struct chain_t *p_dir, s32 num_entries);
-static s32 find_empty_entry(struct inode *inode, struct chain_t *p_dir,
-s32 num_entries);
-static s32 exfat_find_dir_entry(struct super_block *sb, struct chain_t *p_dir,
-struct uni_name_t *p_uniname, s32 num_entries,
-struct dos_name_t *p_dosname, u32 type);
-static s32 exfat_count_ext_entries(struct super_block *sb, struct chain_t 
*p_dir,
-   s32 entry, struct dentry_t *p_entry);
 s32 count_dos_name_entries(struct super_block *sb, struct chain_t *p_dir,
   u32 type);
 static void update_dir_checksum(struct super_block *sb, struct chain_t *p_dir,
@@ -873,25 +829,16 @@ s32

[PATCH 6/8] staging: exfat: More static cleanups for exfat_core.c

2019-10-22 Thread Valdis Kletnieks
Move static function bodies before first use, remove the definition in exfat.h

Signed-off-by: Valdis Kletnieks 
---
 drivers/staging/exfat/exfat.h  |   6 -
 drivers/staging/exfat/exfat_core.c | 500 ++---
 2 files changed, 250 insertions(+), 256 deletions(-)

diff --git a/drivers/staging/exfat/exfat.h b/drivers/staging/exfat/exfat.h
index 654a0c46c1a0..b93df526355b 100644
--- a/drivers/staging/exfat/exfat.h
+++ b/drivers/staging/exfat/exfat.h
@@ -786,10 +786,6 @@ void exfat_chain_cont_cluster(struct super_block *sb, u32 
chain, s32 len);
 /* allocation bitmap management functions */
 s32 load_alloc_bitmap(struct super_block *sb);
 void free_alloc_bitmap(struct super_block *sb);
-static s32 set_alloc_bitmap(struct super_block *sb, u32 clu);
-static s32 clr_alloc_bitmap(struct super_block *sb, u32 clu);
-static u32 test_alloc_bitmap(struct super_block *sb, u32 clu);
-static void sync_alloc_bitmap(struct super_block *sb);
 
 /* upcase table management functions */
 s32 load_upcase_table(struct super_block *sb);
@@ -812,8 +808,6 @@ void release_entry_set(struct entry_set_cache_t *es);
 static s32 write_whole_entry_set(struct super_block *sb, struct 
entry_set_cache_t *es);
 s32 count_dos_name_entries(struct super_block *sb, struct chain_t *p_dir,
   u32 type);
-static void update_dir_checksum(struct super_block *sb, struct chain_t *p_dir,
-s32 entry);
 void update_dir_checksum_with_entry_set(struct super_block *sb,
struct entry_set_cache_t *es);
 bool is_dir_empty(struct super_block *sb, struct chain_t *p_dir);
diff --git a/drivers/staging/exfat/exfat_core.c 
b/drivers/staging/exfat/exfat_core.c
index dd69a9a6dddc..1a49da231946 100644
--- a/drivers/staging/exfat/exfat_core.c
+++ b/drivers/staging/exfat/exfat_core.c
@@ -132,6 +132,199 @@ static void fs_error(struct super_block *sb)
}
 }
 
+/*
+ *  Allocation Bitmap Management Functions
+ */
+
+s32 load_alloc_bitmap(struct super_block *sb)
+{
+   int i, j, ret;
+   u32 map_size;
+   u32 type;
+   sector_t sector;
+   struct chain_t clu;
+   struct bmap_dentry_t *ep;
+   struct fs_info_t *p_fs = &(EXFAT_SB(sb)->fs_info);
+   struct bd_info_t *p_bd = &(EXFAT_SB(sb)->bd_info);
+
+   clu.dir = p_fs->root_dir;
+   clu.flags = 0x01;
+
+   while (clu.dir != CLUSTER_32(~0)) {
+   if (p_fs->dev_ejected)
+   break;
+
+   for (i = 0; i < p_fs->dentries_per_clu; i++) {
+   ep = (struct bmap_dentry_t *)get_entry_in_dir(sb, ,
+ i, NULL);
+   if (!ep)
+   return FFS_MEDIAERR;
+
+   type = p_fs->fs_func->get_entry_type((struct dentry_t 
*)ep);
+
+   if (type == TYPE_UNUSED)
+   break;
+   if (type != TYPE_BITMAP)
+   continue;
+
+   if (ep->flags == 0x0) {
+   p_fs->map_clu  = GET32_A(ep->start_clu);
+   map_size = (u32)GET64_A(ep->size);
+
+   p_fs->map_sectors = ((map_size - 1) >> 
p_bd->sector_size_bits) + 1;
+
+   p_fs->vol_amap = 
kmalloc_array(p_fs->map_sectors,
+  sizeof(struct 
buffer_head *),
+  GFP_KERNEL);
+   if (!p_fs->vol_amap)
+   return FFS_MEMORYERR;
+
+   sector = START_SECTOR(p_fs->map_clu);
+
+   for (j = 0; j < p_fs->map_sectors; j++) {
+   p_fs->vol_amap[j] = NULL;
+   ret = sector_read(sb, sector + j, 
&(p_fs->vol_amap[j]), 1);
+   if (ret != FFS_SUCCESS) {
+   /*  release all buffers and 
free vol_amap */
+   i = 0;
+   while (i < j)
+   
brelse(p_fs->vol_amap[i++]);
+
+   kfree(p_fs->vol_amap);
+   p_fs->vol_amap = NULL;
+   return ret;
+   }
+   }
+
+   p_fs->pbr_bh = NULL;
+   return FFS_SUCCESS;
+   }
+   }
+
+   if (FAT_read(sb, clu.dir, ) != 0

[PATCH 5/8] staging: exfat: Clean up static definitions in exfat_cache.c

2019-10-22 Thread Valdis Kletnieks
Move static function bodies before first use, remove the definition in exfat.h

Signed-off-by: Valdis Kletnieks 
---
 drivers/staging/exfat/exfat.h   |  4 --
 drivers/staging/exfat/exfat_cache.c | 94 +++--
 2 files changed, 48 insertions(+), 50 deletions(-)

diff --git a/drivers/staging/exfat/exfat.h b/drivers/staging/exfat/exfat.h
index dbd86a6cdc95..654a0c46c1a0 100644
--- a/drivers/staging/exfat/exfat.h
+++ b/drivers/staging/exfat/exfat.h
@@ -768,17 +768,13 @@ void buf_init(struct super_block *sb);
 void buf_shutdown(struct super_block *sb);
 int FAT_read(struct super_block *sb, u32 loc, u32 *content);
 s32 FAT_write(struct super_block *sb, u32 loc, u32 content);
-static u8 *FAT_getblk(struct super_block *sb, sector_t sec);
-static void FAT_modify(struct super_block *sb, sector_t sec);
 void FAT_release_all(struct super_block *sb);
-static void FAT_sync(struct super_block *sb);
 u8 *buf_getblk(struct super_block *sb, sector_t sec);
 void buf_modify(struct super_block *sb, sector_t sec);
 void buf_lock(struct super_block *sb, sector_t sec);
 void buf_unlock(struct super_block *sb, sector_t sec);
 void buf_release(struct super_block *sb, sector_t sec);
 void buf_release_all(struct super_block *sb);
-static void buf_sync(struct super_block *sb);
 
 /* fs management functions */
 void fs_set_vol_flags(struct super_block *sb, u32 new_flag);
diff --git a/drivers/staging/exfat/exfat_cache.c 
b/drivers/staging/exfat/exfat_cache.c
index e1b001718709..e9ad0353b4e5 100644
--- a/drivers/staging/exfat/exfat_cache.c
+++ b/drivers/staging/exfat/exfat_cache.c
@@ -193,6 +193,50 @@ void buf_shutdown(struct super_block *sb)
 {
 }
 
+static u8 *FAT_getblk(struct super_block *sb, sector_t sec)
+{
+   struct buf_cache_t *bp;
+   struct fs_info_t *p_fs = &(EXFAT_SB(sb)->fs_info);
+
+   bp = FAT_cache_find(sb, sec);
+   if (bp) {
+   move_to_mru(bp, _fs->FAT_cache_lru_list);
+   return bp->buf_bh->b_data;
+   }
+
+   bp = FAT_cache_get(sb, sec);
+
+   FAT_cache_remove_hash(bp);
+
+   bp->drv = p_fs->drv;
+   bp->sec = sec;
+   bp->flag = 0;
+
+   FAT_cache_insert_hash(sb, bp);
+
+   if (sector_read(sb, sec, >buf_bh, 1) != FFS_SUCCESS) {
+   FAT_cache_remove_hash(bp);
+   bp->drv = -1;
+   bp->sec = ~0;
+   bp->flag = 0;
+   bp->buf_bh = NULL;
+
+   move_to_lru(bp, _fs->FAT_cache_lru_list);
+   return NULL;
+   }
+
+   return bp->buf_bh->b_data;
+}
+
+static void FAT_modify(struct super_block *sb, sector_t sec)
+{
+   struct buf_cache_t *bp;
+
+   bp = FAT_cache_find(sb, sec);
+   if (bp)
+   sector_write(sb, sec, bp->buf_bh, 0);
+}
+
 static int __FAT_read(struct super_block *sb, u32 loc, u32 *content)
 {
s32 off;
@@ -441,50 +485,6 @@ int FAT_write(struct super_block *sb, u32 loc, u32 content)
return ret;
 }
 
-u8 *FAT_getblk(struct super_block *sb, sector_t sec)
-{
-   struct buf_cache_t *bp;
-   struct fs_info_t *p_fs = &(EXFAT_SB(sb)->fs_info);
-
-   bp = FAT_cache_find(sb, sec);
-   if (bp) {
-   move_to_mru(bp, _fs->FAT_cache_lru_list);
-   return bp->buf_bh->b_data;
-   }
-
-   bp = FAT_cache_get(sb, sec);
-
-   FAT_cache_remove_hash(bp);
-
-   bp->drv = p_fs->drv;
-   bp->sec = sec;
-   bp->flag = 0;
-
-   FAT_cache_insert_hash(sb, bp);
-
-   if (sector_read(sb, sec, >buf_bh, 1) != FFS_SUCCESS) {
-   FAT_cache_remove_hash(bp);
-   bp->drv = -1;
-   bp->sec = ~0;
-   bp->flag = 0;
-   bp->buf_bh = NULL;
-
-   move_to_lru(bp, _fs->FAT_cache_lru_list);
-   return NULL;
-   }
-
-   return bp->buf_bh->b_data;
-}
-
-void FAT_modify(struct super_block *sb, sector_t sec)
-{
-   struct buf_cache_t *bp;
-
-   bp = FAT_cache_find(sb, sec);
-   if (bp)
-   sector_write(sb, sec, bp->buf_bh, 0);
-}
-
 void FAT_release_all(struct super_block *sb)
 {
struct buf_cache_t *bp;
@@ -510,7 +510,8 @@ void FAT_release_all(struct super_block *sb)
up(_sem);
 }
 
-void FAT_sync(struct super_block *sb)
+/* FIXME - this function is not used anyplace. See TODO */
+static void FAT_sync(struct super_block *sb)
 {
struct buf_cache_t *bp;
struct fs_info_t *p_fs = &(EXFAT_SB(sb)->fs_info);
@@ -704,7 +705,8 @@ void buf_release_all(struct super_block *sb)
up(_sem);
 }
 
-void buf_sync(struct super_block *sb)
+/* FIXME - this function is not used anyplace. See TODO */
+static void buf_sync(struct super_block *sb)
 {
struct buf_cache_t *bp;
struct fs_info_t *p_fs = &(EXFAT_SB(sb)->fs_info);
-- 
2.23.0

___
devel mailing list
de...@linuxdriverproject.org
http://driverdev.linuxdriverproject.org/mailman/listinfo/driverdev-devel


[PATCH 8/8] staging: exfat: Update TODO

2019-10-22 Thread Valdis Kletnieks
Signed-off-by: Valdis Kletnieks 
---
 drivers/staging/exfat/TODO | 20 
 1 file changed, 8 insertions(+), 12 deletions(-)

diff --git a/drivers/staging/exfat/TODO b/drivers/staging/exfat/TODO
index b60e50b9cf4e..110c30834bd2 100644
--- a/drivers/staging/exfat/TODO
+++ b/drivers/staging/exfat/TODO
@@ -1,21 +1,17 @@
 exfat_core.c - ffsReadFile - the goto err_out seem to leak a brelse().
 same for ffsWriteFile.
 
-exfat_core.c - fs_sync(sb,0) all over the place looks fishy as hell.
-There's only one place that calls it with a non-zero argument.
-Randomly removing fs_sync() calls is *not* the right answer, especially
-if the removal then leaves a call to fs_set_vol_flags(VOL_CLEAN), as that
-says the file system is clean and synced when we *know* it isn't.
-The proper fix here is to go through and actually analyze how DELAYED_SYNC
-should work, and any time we're setting VOL_CLEAN, ensure the file system
-has in fact been synced to disk.  In other words, changing the 'false' to
-'true' is probably more correct. Also, it's likely that the one current
-place where it actually does an bdev_sync isn't sufficient in the DELAYED_SYNC
-case.
-
 ffsTruncateFile -  if (old_size <= new_size) {
 That doesn't look right. How did it ever work? Are they relying on lazy
 block allocation when actual writes happen? If nothing else, it never
 does the 'fid->size = new_size' and do the inode update
 
 ffsSetAttr() is just dangling in the breeze, not wired up at all...
+
+exfat_core.c - The original code called fs_sync(sb,0) all over the place,
+with only one place that calls it with a non-zero argument. That's now been
+reversed, but a proper audit of sync and flush-to-disk is certainly needed.
+
+buf_sync(), sync_alloc_bitmap(), and FAT_sync() aren't actually used
+anyplace.  This is probably related to the borked original implementatin
+of fs_sync() that didn't actually do anything either.
-- 
2.23.0

___
devel mailing list
de...@linuxdriverproject.org
http://driverdev.linuxdriverproject.org/mailman/listinfo/driverdev-devel


[PATCH 2/8] staging: exfat: Remove FAT/VFAT mount support, part 1

2019-10-22 Thread Valdis Kletnieks
Remove the top-level mount functionality, to make this driver handle
only exfat file systems.

Signed-off-by: Valdis Kletnieks 
---
 drivers/staging/exfat/Kconfig   |   9 --
 drivers/staging/exfat/exfat.h   |   2 -
 drivers/staging/exfat/exfat_core.c  | 142 
 drivers/staging/exfat/exfat_super.c |   8 +-
 4 files changed, 1 insertion(+), 160 deletions(-)

diff --git a/drivers/staging/exfat/Kconfig b/drivers/staging/exfat/Kconfig
index ce32dfe33bec..0130019cbec2 100644
--- a/drivers/staging/exfat/Kconfig
+++ b/drivers/staging/exfat/Kconfig
@@ -6,15 +6,6 @@ config EXFAT_FS
help
  This adds support for the exFAT file system.
 
-config EXFAT_DONT_MOUNT_VFAT
-   bool "Prohibit mounting of fat/vfat filesystems by exFAT"
-   depends on EXFAT_FS
-   default y
-   help
- By default, the exFAT driver will only mount exFAT filesystems, and 
refuse
- to mount fat/vfat filesystems.  Set this to 'n' to allow the exFAT 
driver
- to mount these filesystems.
-
 config EXFAT_DISCARD
bool "enable discard support"
depends on EXFAT_FS
diff --git a/drivers/staging/exfat/exfat.h b/drivers/staging/exfat/exfat.h
index 0c779c8dd858..c2db3e9e9785 100644
--- a/drivers/staging/exfat/exfat.h
+++ b/drivers/staging/exfat/exfat.h
@@ -935,8 +935,6 @@ s32 resolve_path(struct inode *inode, char *path, struct 
chain_t *p_dir,
 static s32 resolve_name(u8 *name, u8 **arg);
 
 /* file operation functions */
-static s32 fat16_mount(struct super_block *sb, struct pbr_sector_t *p_pbr);
-static s32 fat32_mount(struct super_block *sb, struct pbr_sector_t *p_pbr);
 s32 exfat_mount(struct super_block *sb, struct pbr_sector_t *p_pbr);
 s32 create_dir(struct inode *inode, struct chain_t *p_dir,
   struct uni_name_t *p_uniname, struct file_id_t *fid);
diff --git a/drivers/staging/exfat/exfat_core.c 
b/drivers/staging/exfat/exfat_core.c
index 0260e4fe3762..fd481b21f8b6 100644
--- a/drivers/staging/exfat/exfat_core.c
+++ b/drivers/staging/exfat/exfat_core.c
@@ -2980,148 +2980,6 @@ s32 resolve_path(struct inode *inode, char *path, 
struct chain_t *p_dir,
 /*
  *  File Operation Functions
  */
-static struct fs_func fat_fs_func = {
-   .alloc_cluster = fat_alloc_cluster,
-   .free_cluster = fat_free_cluster,
-   .count_used_clusters = fat_count_used_clusters,
-
-   .init_dir_entry = fat_init_dir_entry,
-   .init_ext_entry = fat_init_ext_entry,
-   .find_dir_entry = fat_find_dir_entry,
-   .delete_dir_entry = fat_delete_dir_entry,
-   .get_uni_name_from_ext_entry = fat_get_uni_name_from_ext_entry,
-   .count_ext_entries = fat_count_ext_entries,
-   .calc_num_entries = fat_calc_num_entries,
-
-   .get_entry_type = fat_get_entry_type,
-   .set_entry_type = fat_set_entry_type,
-   .get_entry_attr = fat_get_entry_attr,
-   .set_entry_attr = fat_set_entry_attr,
-   .get_entry_flag = fat_get_entry_flag,
-   .set_entry_flag = fat_set_entry_flag,
-   .get_entry_clu0 = fat_get_entry_clu0,
-   .set_entry_clu0 = fat_set_entry_clu0,
-   .get_entry_size = fat_get_entry_size,
-   .set_entry_size = fat_set_entry_size,
-   .get_entry_time = fat_get_entry_time,
-   .set_entry_time = fat_set_entry_time,
-};
-
-static s32 fat16_mount(struct super_block *sb, struct pbr_sector_t *p_pbr)
-{
-   s32 num_reserved, num_root_sectors;
-   struct bpb16_t *p_bpb = (struct bpb16_t *)p_pbr->bpb;
-   struct fs_info_t *p_fs = &(EXFAT_SB(sb)->fs_info);
-   struct bd_info_t *p_bd = &(EXFAT_SB(sb)->bd_info);
-
-   if (p_bpb->num_fats == 0)
-   return FFS_FORMATERR;
-
-   num_root_sectors = GET16(p_bpb->num_root_entries) << DENTRY_SIZE_BITS;
-   num_root_sectors = ((num_root_sectors - 1) >>
-   p_bd->sector_size_bits) + 1;
-
-   p_fs->sectors_per_clu = p_bpb->sectors_per_clu;
-   p_fs->sectors_per_clu_bits = ilog2(p_bpb->sectors_per_clu);
-   p_fs->cluster_size_bits = p_fs->sectors_per_clu_bits +
- p_bd->sector_size_bits;
-   p_fs->cluster_size = 1 << p_fs->cluster_size_bits;
-
-   p_fs->num_FAT_sectors = GET16(p_bpb->num_fat_sectors);
-
-   p_fs->FAT1_start_sector = p_fs->PBR_sector + GET16(p_bpb->num_reserved);
-   if (p_bpb->num_fats == 1)
-   p_fs->FAT2_start_sector = p_fs->FAT1_start_sector;
-   else
-   p_fs->FAT2_start_sector = p_fs->FAT1_start_sector +
- p_fs->num_FAT_sectors;
-
-   p_fs->root_start_sector = p_fs->FAT2_start_sector +
- p_fs->num_FAT_sectors;
-   p_fs->data_start_sector = p_fs->root_start_sector + num_root_sectors;
-
-   p_fs->num_sectors = GET16(p_bpb->num_sectors);
-   if (p_fs->num_s

[PATCH 0/8] staging: exfat: Code cleanups

2019-10-22 Thread Valdis Kletnieks
Two main goals here - remove the code to mount FAT and VFAT filesystes,
and make a lot of functions static to reduce namespace pollution.

Valdis Kletnieks (8):
  staging: exfat: Clean up namespace pollution, part 1
  staging: exfat: Remove FAT/VFAT mount support, part 1
  staging: exfat: Remove FAT/VFAT mount support, part 2
  staging: exfat: Cleanup static entries in exfat.h
  staging: exfat: Clean up static definitions in exfat_cache.c
  staging: exfat: More static cleanups for exfat_core.c
  staging: exfat: Finished code movement for static cleanups in exfat_core.c
  staging: exfat: Update TODO

 drivers/staging/exfat/Kconfig   |9 -
 drivers/staging/exfat/TODO  |   20 +-
 drivers/staging/exfat/exfat.h   |  122 +-
 drivers/staging/exfat/exfat_cache.c |   94 +-
 drivers/staging/exfat/exfat_core.c  | 2162 ---
 drivers/staging/exfat/exfat_super.c |8 +-
 6 files changed, 690 insertions(+), 1725 deletions(-)

-- 
2.23.0

___
devel mailing list
de...@linuxdriverproject.org
http://driverdev.linuxdriverproject.org/mailman/listinfo/driverdev-devel


[PATCH 3/8] staging: exfat: Remove FAT/VFAT mount support, part 2

2019-10-22 Thread Valdis Kletnieks
Remove no longer referenced FAT/VFAT routines.

Signed-off-by: Valdis Kletnieks 
---
 drivers/staging/exfat/exfat.h  |  49 +-
 drivers/staging/exfat/exfat_core.c | 755 -
 2 files changed, 2 insertions(+), 802 deletions(-)

diff --git a/drivers/staging/exfat/exfat.h b/drivers/staging/exfat/exfat.h
index c2db3e9e9785..9cd78b6417d0 100644
--- a/drivers/staging/exfat/exfat.h
+++ b/drivers/staging/exfat/exfat.h
@@ -786,17 +786,12 @@ static void fs_error(struct super_block *sb);
 
 /* cluster management functions */
 static s32 clear_cluster(struct super_block *sb, u32 clu);
-static s32 fat_alloc_cluster(struct super_block *sb, s32 num_alloc,
- struct chain_t *p_chain);
 static s32 exfat_alloc_cluster(struct super_block *sb, s32 num_alloc,
struct chain_t *p_chain);
-static void fat_free_cluster(struct super_block *sb, struct chain_t *p_chain,
- s32 do_relse);
 static void exfat_free_cluster(struct super_block *sb, struct chain_t *p_chain,
s32 do_relse);
 static u32 find_last_cluster(struct super_block *sb, struct chain_t *p_chain);
 s32 count_num_clusters(struct super_block *sb, struct chain_t *dir);
-static s32 fat_count_used_clusters(struct super_block *sb);
 static s32 exfat_count_used_clusters(struct super_block *sb);
 void exfat_chain_cont_cluster(struct super_block *sb, u32 chain, s32 len);
 
@@ -813,63 +808,36 @@ s32 load_upcase_table(struct super_block *sb);
 void free_upcase_table(struct super_block *sb);
 
 /* dir entry management functions */
-static u32 fat_get_entry_type(struct dentry_t *p_entry);
 static u32 exfat_get_entry_type(struct dentry_t *p_entry);
-static void fat_set_entry_type(struct dentry_t *p_entry, u32 type);
 static void exfat_set_entry_type(struct dentry_t *p_entry, u32 type);
-static u32 fat_get_entry_attr(struct dentry_t *p_entry);
 static u32 exfat_get_entry_attr(struct dentry_t *p_entry);
-static void fat_set_entry_attr(struct dentry_t *p_entry, u32 attr);
 static void exfat_set_entry_attr(struct dentry_t *p_entry, u32 attr);
-static u8 fat_get_entry_flag(struct dentry_t *p_entry);
 static u8 exfat_get_entry_flag(struct dentry_t *p_entry);
-static void fat_set_entry_flag(struct dentry_t *p_entry, u8 flag);
 static void exfat_set_entry_flag(struct dentry_t *p_entry, u8 flag);
-static u32 fat_get_entry_clu0(struct dentry_t *p_entry);
 static u32 exfat_get_entry_clu0(struct dentry_t *p_entry);
-static void fat_set_entry_clu0(struct dentry_t *p_entry, u32 start_clu);
 static void exfat_set_entry_clu0(struct dentry_t *p_entry, u32 start_clu);
-static u64 fat_get_entry_size(struct dentry_t *p_entry);
 static u64 exfat_get_entry_size(struct dentry_t *p_entry);
-static void fat_set_entry_size(struct dentry_t *p_entry, u64 size);
 static void exfat_set_entry_size(struct dentry_t *p_entry, u64 size);
 struct timestamp_t *tm_current(struct timestamp_t *tm);
-static void fat_get_entry_time(struct dentry_t *p_entry, struct timestamp_t 
*tp,
-   u8 mode);
 static void exfat_get_entry_time(struct dentry_t *p_entry, struct timestamp_t 
*tp,
  u8 mode);
-static void fat_set_entry_time(struct dentry_t *p_entry, struct timestamp_t 
*tp,
-   u8 mode);
 static void exfat_set_entry_time(struct dentry_t *p_entry, struct timestamp_t 
*tp,
  u8 mode);
-static s32 fat_init_dir_entry(struct super_block *sb, struct chain_t *p_dir, 
s32 entry,
-  u32 type, u32 start_clu, u64 size);
 static s32 exfat_init_dir_entry(struct super_block *sb, struct chain_t *p_dir,
 s32 entry, u32 type, u32 start_clu, u64 size);
-static s32 fat_init_ext_dir_entry(struct super_block *sb, struct chain_t 
*p_dir,
-  s32 entry, s32 num_entries,
-  struct uni_name_t *p_uniname,
-  struct dos_name_t *p_dosname);
 static s32 exfat_init_ext_dir_entry(struct super_block *sb, struct chain_t 
*p_dir,
 s32 entry, s32 num_entries,
 struct uni_name_t *p_uniname,
struct dos_name_t *p_dosname);
-static void init_dos_entry(struct dos_dentry_t *ep, u32 type, u32 start_clu);
-static void init_ext_entry(struct ext_dentry_t *ep, s32 order, u8 chksum,
-   u16 *uniname);
 static void init_file_entry(struct file_dentry_t *ep, u32 type);
 static void init_strm_entry(struct strm_dentry_t *ep, u8 flags, u32 start_clu,
 u64 size);
 static void init_name_entry(struct name_dentry_t *ep, u16 *uniname);
-static void fat_delete_dir_entry(struct super_block *sb, struct chain_t *p_dir,
- s32 entry, s32 order, s32 num_entries);
 static void exfat_delete_dir_entry(struct super_block *sb, struct chain_t 
*p_dir,
s32 entry, s32 order, s32 num_entries);
 
 static s32 find_location(struct

[PATCH 1/8] staging: exfat: Clean up namespace pollution, part 1

2019-10-22 Thread Valdis Kletnieks
Make as much as possible static.  We're over-exuberant here for the benefit
of a following patch, as the compiler will flag now-unused static code

Signed-off-by: Valdis Kletnieks 
---
 drivers/staging/exfat/exfat.h  | 156 ++---
 drivers/staging/exfat/exfat_core.c | 142 +-
 2 files changed, 149 insertions(+), 149 deletions(-)

diff --git a/drivers/staging/exfat/exfat.h b/drivers/staging/exfat/exfat.h
index 3abab33e932c..0c779c8dd858 100644
--- a/drivers/staging/exfat/exfat.h
+++ b/drivers/staging/exfat/exfat.h
@@ -768,107 +768,107 @@ void buf_init(struct super_block *sb);
 void buf_shutdown(struct super_block *sb);
 int FAT_read(struct super_block *sb, u32 loc, u32 *content);
 s32 FAT_write(struct super_block *sb, u32 loc, u32 content);
-u8 *FAT_getblk(struct super_block *sb, sector_t sec);
-void FAT_modify(struct super_block *sb, sector_t sec);
+static u8 *FAT_getblk(struct super_block *sb, sector_t sec);
+static void FAT_modify(struct super_block *sb, sector_t sec);
 void FAT_release_all(struct super_block *sb);
-void FAT_sync(struct super_block *sb);
+static void FAT_sync(struct super_block *sb);
 u8 *buf_getblk(struct super_block *sb, sector_t sec);
 void buf_modify(struct super_block *sb, sector_t sec);
 void buf_lock(struct super_block *sb, sector_t sec);
 void buf_unlock(struct super_block *sb, sector_t sec);
 void buf_release(struct super_block *sb, sector_t sec);
 void buf_release_all(struct super_block *sb);
-void buf_sync(struct super_block *sb);
+static void buf_sync(struct super_block *sb);
 
 /* fs management functions */
 void fs_set_vol_flags(struct super_block *sb, u32 new_flag);
-void fs_error(struct super_block *sb);
+static void fs_error(struct super_block *sb);
 
 /* cluster management functions */
-s32 clear_cluster(struct super_block *sb, u32 clu);
-s32 fat_alloc_cluster(struct super_block *sb, s32 num_alloc,
+static s32 clear_cluster(struct super_block *sb, u32 clu);
+static s32 fat_alloc_cluster(struct super_block *sb, s32 num_alloc,
  struct chain_t *p_chain);
-s32 exfat_alloc_cluster(struct super_block *sb, s32 num_alloc,
+static s32 exfat_alloc_cluster(struct super_block *sb, s32 num_alloc,
struct chain_t *p_chain);
-void fat_free_cluster(struct super_block *sb, struct chain_t *p_chain,
+static void fat_free_cluster(struct super_block *sb, struct chain_t *p_chain,
  s32 do_relse);
-void exfat_free_cluster(struct super_block *sb, struct chain_t *p_chain,
+static void exfat_free_cluster(struct super_block *sb, struct chain_t *p_chain,
s32 do_relse);
-u32 find_last_cluster(struct super_block *sb, struct chain_t *p_chain);
+static u32 find_last_cluster(struct super_block *sb, struct chain_t *p_chain);
 s32 count_num_clusters(struct super_block *sb, struct chain_t *dir);
-s32 fat_count_used_clusters(struct super_block *sb);
-s32 exfat_count_used_clusters(struct super_block *sb);
+static s32 fat_count_used_clusters(struct super_block *sb);
+static s32 exfat_count_used_clusters(struct super_block *sb);
 void exfat_chain_cont_cluster(struct super_block *sb, u32 chain, s32 len);
 
 /* allocation bitmap management functions */
 s32 load_alloc_bitmap(struct super_block *sb);
 void free_alloc_bitmap(struct super_block *sb);
-s32 set_alloc_bitmap(struct super_block *sb, u32 clu);
-s32 clr_alloc_bitmap(struct super_block *sb, u32 clu);
-u32 test_alloc_bitmap(struct super_block *sb, u32 clu);
-void sync_alloc_bitmap(struct super_block *sb);
+static s32 set_alloc_bitmap(struct super_block *sb, u32 clu);
+static s32 clr_alloc_bitmap(struct super_block *sb, u32 clu);
+static u32 test_alloc_bitmap(struct super_block *sb, u32 clu);
+static void sync_alloc_bitmap(struct super_block *sb);
 
 /* upcase table management functions */
 s32 load_upcase_table(struct super_block *sb);
 void free_upcase_table(struct super_block *sb);
 
 /* dir entry management functions */
-u32 fat_get_entry_type(struct dentry_t *p_entry);
-u32 exfat_get_entry_type(struct dentry_t *p_entry);
-void fat_set_entry_type(struct dentry_t *p_entry, u32 type);
-void exfat_set_entry_type(struct dentry_t *p_entry, u32 type);
-u32 fat_get_entry_attr(struct dentry_t *p_entry);
-u32 exfat_get_entry_attr(struct dentry_t *p_entry);
-void fat_set_entry_attr(struct dentry_t *p_entry, u32 attr);
-void exfat_set_entry_attr(struct dentry_t *p_entry, u32 attr);
-u8 fat_get_entry_flag(struct dentry_t *p_entry);
-u8 exfat_get_entry_flag(struct dentry_t *p_entry);
-void fat_set_entry_flag(struct dentry_t *p_entry, u8 flag);
-void exfat_set_entry_flag(struct dentry_t *p_entry, u8 flag);
-u32 fat_get_entry_clu0(struct dentry_t *p_entry);
-u32 exfat_get_entry_clu0(struct dentry_t *p_entry);
-void fat_set_entry_clu0(struct dentry_t *p_entry, u32 start_clu);
-void exfat_set_entry_clu0(struct dentry_t *p_entry, u32 start_clu);
-u64 fat_get_entry_size(struct dentry_t *p_entry);
-u64 exfat_get_entry_size(struct

[PATCH 7/8] staging: exfat: Finished code movement for static cleanups in exfat_core.c

2019-10-22 Thread Valdis Kletnieks
Move static function bodies before first use, remove the definition in exfat.h

Signed-off-by: Valdis Kletnieks 
---
 drivers/staging/exfat/exfat.h  |  10 -
 drivers/staging/exfat/exfat_core.c | 661 ++---
 2 files changed, 330 insertions(+), 341 deletions(-)

diff --git a/drivers/staging/exfat/exfat.h b/drivers/staging/exfat/exfat.h
index b93df526355b..8738e41dd5a5 100644
--- a/drivers/staging/exfat/exfat.h
+++ b/drivers/staging/exfat/exfat.h
@@ -793,10 +793,6 @@ void free_upcase_table(struct super_block *sb);
 
 /* dir entry management functions */
 struct timestamp_t *tm_current(struct timestamp_t *tm);
-static void init_file_entry(struct file_dentry_t *ep, u32 type);
-static void init_strm_entry(struct strm_dentry_t *ep, u8 flags, u32 start_clu,
-u64 size);
-static void init_name_entry(struct name_dentry_t *ep, u16 *uniname);
 
 struct dentry_t *get_entry_in_dir(struct super_block *sb, struct chain_t 
*p_dir,
  s32 entry, sector_t *sector);
@@ -805,7 +801,6 @@ struct entry_set_cache_t *get_entry_set_in_dir(struct 
super_block *sb,
   u32 type,
   struct dentry_t **file_ep);
 void release_entry_set(struct entry_set_cache_t *es);
-static s32 write_whole_entry_set(struct super_block *sb, struct 
entry_set_cache_t *es);
 s32 count_dos_name_entries(struct super_block *sb, struct chain_t *p_dir,
   u32 type);
 void update_dir_checksum_with_entry_set(struct super_block *sb,
@@ -819,11 +814,6 @@ s32 get_num_entries_and_dos_name(struct super_block *sb, 
struct chain_t *p_dir,
 void get_uni_name_from_dos_entry(struct super_block *sb,
 struct dos_dentry_t *ep,
 struct uni_name_t *p_uniname, u8 mode);
-static s32 extract_uni_name_from_name_entry(struct name_dentry_t *ep, u16 
*uniname,
-   s32 order);
-static s32 fat_generate_dos_name(struct super_block *sb, struct chain_t *p_dir,
- struct dos_name_t *p_dosname);
-static void fat_attach_count_to_dos_name(u8 *dosname, s32 count);
 u16 calc_checksum_2byte(void *data, s32 len, u16 chksum, s32 type);
 
 /* name resolution functions */
diff --git a/drivers/staging/exfat/exfat_core.c 
b/drivers/staging/exfat/exfat_core.c
index 1a49da231946..7332e69fcbcd 100644
--- a/drivers/staging/exfat/exfat_core.c
+++ b/drivers/staging/exfat/exfat_core.c
@@ -791,6 +791,168 @@ void free_upcase_table(struct super_block *sb)
p_fs->vol_utbl = NULL;
 }
 
+static s32 __write_partial_entries_in_entry_set(struct super_block *sb,
+   struct entry_set_cache_t *es,
+   sector_t sec, s32 off, u32 
count)
+{
+   s32 num_entries, buf_off = (off - es->offset);
+   u32 remaining_byte_in_sector, copy_entries;
+   struct fs_info_t *p_fs = &(EXFAT_SB(sb)->fs_info);
+   struct bd_info_t *p_bd = &(EXFAT_SB(sb)->bd_info);
+   u32 clu;
+   u8 *buf, *esbuf = (u8 *)&(es->__buf);
+
+   pr_debug("%s entered es %p sec %llu off %d count %d\n",
+   __func__, es, (unsigned long long)sec, off, count);
+   num_entries = count;
+
+   while (num_entries) {
+   /* white per sector base */
+   remaining_byte_in_sector = (1 << p_bd->sector_size_bits) - off;
+   copy_entries = min_t(s32,
+remaining_byte_in_sector >> 
DENTRY_SIZE_BITS,
+num_entries);
+   buf = buf_getblk(sb, sec);
+   if (!buf)
+   goto err_out;
+   pr_debug("es->buf %p buf_off %u\n", esbuf, buf_off);
+   pr_debug("copying %d entries from %p to sector %llu\n",
+   copy_entries, (esbuf + buf_off),
+   (unsigned long long)sec);
+   memcpy(buf + off, esbuf + buf_off,
+  copy_entries << DENTRY_SIZE_BITS);
+   buf_modify(sb, sec);
+   num_entries -= copy_entries;
+
+   if (num_entries) {
+   /* get next sector */
+   if (IS_LAST_SECTOR_IN_CLUSTER(sec)) {
+   clu = GET_CLUSTER_FROM_SECTOR(sec);
+   if (es->alloc_flag == 0x03) {
+   clu++;
+   } else {
+   if (FAT_read(sb, clu, ) == -1)
+   goto err_out;
+   }
+   sec = START_SECTOR(clu);
+   } else {
+   sec++;
+   }
+   

[PATCH v3 0/9] staging: exfat: Clean up return codes

2019-11-11 Thread Valdis Kletnieks
Replace the oddball return codes with Linux-standard values

Changes since v2:

Fixed the git miscue that left one patch fragment in the wrong commit
Dropped the patch that added EFSCORRUPTED to errno.h because that method
won't work on some architectures.
Rebased to today's staging-next tree.

Valdis Kletnieks (9):
  staging: exfat: Clean up return codes - FFS_FORMATERR
  staging: exfat: Clean up return codes - FFS_MEDIAERR
  staging: exfat: Clean up return codes - FFS_EOF
  staging: exfat: Clean up return codes - FFS_INVALIDFID
  staging: exfat: Clean up return codes - FFS_ERROR
  staging: exfat: Clean up return codes - remove unused codes
  staging: exfat: Clean up return codes - FFS_SUCCESS
  staging: exfat: Collapse redundant return code translations
  staging: exfat: Correct return code

 drivers/staging/exfat/exfat.h|  16 +-
 drivers/staging/exfat/exfat_blkdev.c |  18 +-
 drivers/staging/exfat/exfat_cache.c  |   4 +-
 drivers/staging/exfat/exfat_core.c   | 202 +-
 drivers/staging/exfat/exfat_super.c  | 293 +++
 5 files changed, 229 insertions(+), 304 deletions(-)

-- 
2.24.0

___
devel mailing list
de...@linuxdriverproject.org
http://driverdev.linuxdriverproject.org/mailman/listinfo/driverdev-devel


[PATCH v3 9/9] staging: exfat: Correct return code

2019-11-11 Thread Valdis Kletnieks
Use -ENOTEMPTY rather than -EEXIST for attempting to remove
a directory that still has files in it.

Signed-off-by: Valdis Kletnieks 
---
 drivers/staging/exfat/exfat_super.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/drivers/staging/exfat/exfat_super.c 
b/drivers/staging/exfat/exfat_super.c
index a97a61a60517..e2254d45ef6e 100644
--- a/drivers/staging/exfat/exfat_super.c
+++ b/drivers/staging/exfat/exfat_super.c
@@ -2167,7 +2167,7 @@ static int ffsRemoveDir(struct inode *inode, struct 
file_id_t *fid)
clu_to_free.flags = fid->flags;
 
if (!is_dir_empty(sb, _to_free)) {
-   ret = -EEXIST;
+   ret = -ENOTEMPTY;
goto out;
}
 
-- 
2.24.0

___
devel mailing list
de...@linuxdriverproject.org
http://driverdev.linuxdriverproject.org/mailman/listinfo/driverdev-devel