]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
functionfs: don't bother with ffs->ref in ffs_data_{opened,closed}()
authorAl Viro <viro@zeniv.linux.org.uk>
Mon, 17 Nov 2025 19:40:21 +0000 (14:40 -0500)
committerAl Viro <viro@zeniv.linux.org.uk>
Tue, 18 Nov 2025 04:52:57 +0000 (23:52 -0500)
A reference is held by the superblock (it's dropped in ffs_kill_sb())
and filesystem will not get to ->kill_sb() while there are any opened
files, TYVM...

Reviewed-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
drivers/usb/gadget/function/f_fs.c

index 43926aca8a40c29974981de936e8e19d01768d18..0bcff49e1f11e7ee0449a8c817f1a7f4742cc6a1 100644 (file)
@@ -2128,7 +2128,6 @@ static void ffs_data_get(struct ffs_data *ffs)
 
 static void ffs_data_opened(struct ffs_data *ffs)
 {
-       refcount_inc(&ffs->ref);
        if (atomic_add_return(1, &ffs->opened) == 1 &&
                        ffs->state == FFS_DEACTIVATED) {
                ffs->state = FFS_CLOSING;
@@ -2153,11 +2152,11 @@ static void ffs_data_put(struct ffs_data *ffs)
 
 static void ffs_data_closed(struct ffs_data *ffs)
 {
-       struct ffs_epfile *epfiles;
-       unsigned long flags;
-
        if (atomic_dec_and_test(&ffs->opened)) {
                if (ffs->no_disconnect) {
+                       struct ffs_epfile *epfiles;
+                       unsigned long flags;
+
                        ffs->state = FFS_DEACTIVATED;
                        spin_lock_irqsave(&ffs->eps_lock, flags);
                        epfiles = ffs->epfiles;
@@ -2176,7 +2175,6 @@ static void ffs_data_closed(struct ffs_data *ffs)
                        ffs_data_reset(ffs);
                }
        }
-       ffs_data_put(ffs);
 }
 
 static struct ffs_data *ffs_data_new(const char *dev_name)