[PATCH] bdflush.2, syscalls.2: bdflush was removed

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

 



There's no point documenting this syscall at any point in time,
because it changed constantly. A post-mortem summary I believe to be
comprehensive is included below.

The #include <sys/kdaemon.h> was removed in glibc 2.23:
    commit eed3e1eb79bcfa9b52609fd875fa2d522e2d6bce
    Author: Joseph Myers <joseph@xxxxxxxxxxxxxxxx>
    Date:   Mon Dec 14 22:52:15 2015 +0000

    Make obsolete syscall wrappers into compat symbols (bug 18472).

    * bdflush: in Linux 2.6, does nothing if present.

    [...]
    generated for such aliases.  Those five syscalls are then made into
    compat symbols (obsoleted in glibc 2.23, so future ports won't have
    these symbols at all), with the header <sys/kdaemon.h> declaring
    bdflush being removed.  When we move to 3.2 as minimum kernel version,
    the same can be done for nfsservctl (removed in Linux 3.1) as well.
    [...]

Appears in 1.1.3
(func=0  turns the calling process into the bdflush daemon,
 func=1  return sync_old_buffers();,
 func>=2 is parameters):
    Author: Linus Torvalds <torvalds@xxxxxxxxxxxxxxxxxxx>
        Import 1.1.3

    +/* This is the interface to bdflush.  As we get more sophisticated, we can
    + * pass tuning parameters to this "process", to adjust how it behaves.  If you
    + * invoke this again after you have done this once, you would simply modify
    + * the tuning parameters.  We would want to verify each parameter, however,
    + * to make sure that it is reasonable. */
    +
    +asmlinkage int sys_bdflush(int func, int data)
    +{

bdflush() is just a kernel thread, and func 0 is just return 0; since 1.3.50:
    Author: Linus Torvalds <torvalds@xxxxxxxxxxxxxxxxxxx>
        Import 1.3.50

    -       /* Basically func 0 means start, 1 means read param 1, 2 means write param 1, etc */
    +       /* Basically func 1 means read param 1, 2 means write param 1, etc */
            if (func >= 2) {
                    i = (func-2) >> 1;
                    if (i < 0 || i >= N_PARAM)
    @@ -1930,13 +1845,32 @@ asmlinkage int sys_bdflush(int func, long data)
                    bdf_prm.data[i] = data;
                    return 0;
            };
    +
    +       /* Having func 0 used to launch the actual bdflush and then never
    +       return (unless explicitly killed). We return zero here to
    +       remain semi-compatible with present update(8) programs. */
    +
    +       return 0;
    +}
    +
    +/* This is the actual bdflush daemon itself. It used to be started from
    + * the syscall above, but now we launch it ourselves internally with
    + * kernel_thread(...)  directly after the first thread in init/main.c */
    +
    +int bdflush(void * unused) {

func 1 is actually exit(0) since 2.3.23pre1:
    Author: Linus Torvalds <torvalds@xxxxxxxxxxxxxxxxxxx>
        Import 2.3.23pre1

                if (func == 1) {
    +               /* do_exit directly and let kupdate to do its work alone. */
    +               do_exit(0);
    +#if 0 /* left here as it's the only example of lazy-mm-stuff used from
    +        a syscall that doesn't care about the current mm context. */

fund!=0 is a return 0 since 2.5.12:
    Author: Andrew Morton <akpm@xxxxxxxxxx>
    Date:   Mon Apr 29 23:52:10 2002 -0700

        [PATCH] writeback from address spaces

        [ I reversed the order in which writeback walks the superblock's
          dirty inodes.  It sped up dbench's unlink phase greatly.  I'm
          such a sleaze ]

        The core writeback patch.  Switches file writeback from the dirty
        buffer LRU over to address_space.dirty_pages.

        - The buffer LRU is removed

        - The buffer hash is removed (uses blockdev pagecache lookups)

        - The bdflush and kupdate functions are implemented against
          address_spaces, via pdflush.

        [...]

Deprecated since 2.5.52:
    Author: Andrew Morton <akpm@xxxxxxxxx>
    Date:   Sat Dec 14 03:16:29 2002 -0800

        [PATCH] deprecate use of bdflush()

        Patch from Robert Love <rml@xxxxxxxxx>

        We can never get rid of it if we do not deprecate it - so do so and
        print a stern warning to those who still run bdflush daemons.

Removed outright in 5.15-rc1:
    commit b48c7236b13cb5ef1b5fdf744aa8841df0f7b43a
    Author: Eric W. Biederman <ebiederm@xxxxxxxxxxxx>
    Date:   Tue Jun 29 15:11:44 2021 -0500

        exit/bdflush: Remove the deprecated bdflush system call

        The bdflush system call has been deprecated for a very long time.
        Recently Michael Schmitz tested[1] and found that the last known
        caller of of the bdflush system call is unaffected by it's removal.

        Since the code is not needed delete it.

        [1] https://lkml.kernel.org/r/36123b5d-daa0-6c2b-f2d4-a942f069fd54@xxxxxxxxx

Signed-off-by: Ahelenia Ziemiańska <nabijaczleweli@xxxxxxxxxxxxxxxxxx>
---
 man/man2/bdflush.2  | 97 ++++++++++-----------------------------------
 man/man2/syscalls.2 |  3 +-
 2 files changed, 22 insertions(+), 78 deletions(-)

diff --git a/man/man2/bdflush.2 b/man/man2/bdflush.2
index 8627a42a2..c4c6400ff 100644
--- a/man/man2/bdflush.2
+++ b/man/man2/bdflush.2
@@ -12,91 +12,34 @@ .SH SYNOPSIS
 .nf
 .B #include <sys/kdaemon.h>
 .P
-.BI "[[deprecated]] int bdflush(int "  func ", long *" address );
-.BI "[[deprecated]] int bdflush(int "  func ", long " data );
+.BI "int bdflush(int "  func ", long " data );
+.RI "// if " func " is even, " data " actually represents a pointer)"
 .fi
 .SH DESCRIPTION
-.IR Note :
-Since Linux 2.6,
-.\" As noted in changes in the 2.5.12 source
-this system call is deprecated and does nothing.
-It is likely to disappear altogether in a future kernel release.
-Nowadays, the task performed by
-.BR bdflush ()
-is handled by the kernel
-.I pdflush
-thread.
+This system call was introduced in Linux 1.1.3,
+became effectively obsolete in Linux 1.3.50,
+mostly useless in Linux 2.3.23,
+entirely useless in Linux 2.5.12,
+officially deprecated in Linux 2.5.52,
+and removed outright in Linux 5.15.
 .P
-.BR bdflush ()
-starts, flushes, or tunes the buffer-dirty-flush daemon.
-Only a privileged process (one with the
-.B CAP_SYS_ADMIN
-capability) may call
-.BR bdflush ().
+It used to turn the calling process into the
+.I bdflush
+daemon,
+or tune it,
+or flush the "old buffers".
+It then progressively lost all of that functionality.
 .P
-If
-.I func
-is negative or 0, and no daemon has been started, then
-.BR bdflush ()
-enters the daemon code and never returns.
-.P
-If
-.I func
-is 1,
-some dirty buffers are written to disk.
-.P
-If
-.I func
-is 2 or more and is even (low bit is 0), then
-.I address
-is the address of a long word,
-and the tuning parameter numbered
-.RI "(" "func" "\-2)/2"
-is returned to the caller in that address.
-.P
-If
-.I func
-is 3 or more and is odd (low bit is 1), then
-.I data
-is a long word,
-and the kernel sets tuning parameter numbered
-.RI "(" "func" "\-3)/2"
-to that value.
-.P
-The set of parameters, their values, and their valid ranges
-are defined in the Linux kernel source file
-.IR fs/buffer.c .
-.SH RETURN VALUE
-If
-.I func
-is negative or 0 and the daemon successfully starts,
-.BR bdflush ()
-never returns.
-Otherwise, the return value is 0 on success and \-1 on failure, with
-.I errno
-set to indicate the error.
+See
+.I fs/buffer.c
+in the kernel version you're interested in to see what it actually does there.
 .SH ERRORS
-.TP
-.B EBUSY
-An attempt was made to enter the daemon code after
-another process has already entered.
-.TP
-.B EFAULT
-.I address
-points outside your accessible address space.
-.TP
-.B EINVAL
-An attempt was made to read or write an invalid parameter number,
-or to write an invalid value to a parameter.
-.TP
-.B EPERM
-Caller does not have the
-.B CAP_SYS_ADMIN
-capability.
+.B ENOSYS
+(this system call is unimplemented)
 .SH STANDARDS
 Linux.
 .SH HISTORY
-Since glibc 2.23, glibc no longer supports this obsolete system call.
+The header and prototype were removed in glibc 2.23.
 .SH SEE ALSO
 .BR sync (1),
 .BR fsync (2),
diff --git a/man/man2/syscalls.2 b/man/man2/syscalls.2
index 795a3f7be..325ecf5ac 100644
--- a/man/man2/syscalls.2
+++ b/man/man2/syscalls.2
@@ -170,7 +170,8 @@ .SS System call list
 \fBatomic_cmpxchg_32\fP(2)	2.6.34	m68k only
 \fBbdflush\fP(2)	1.2	T{
 Deprecated (does nothing)
-since 2.6
+since 2.6,
+removed in 5.15
 T}
 \fBbind\fP(2)	2.0	T{
 See notes on \fBsocketcall\fP(2)
-- 
2.39.2

Attachment: signature.asc
Description: PGP signature


[Index of Archives]     [Kernel Documentation]     [Netdev]     [Linux Ethernet Bridging]     [Linux Wireless]     [Kernel Newbies]     [Security]     [Linux for Hams]     [Netfilter]     [Bugtraq]     [Yosemite News]     [MIPS Linux]     [ARM Linux]     [Linux RAID]     [Linux Admin]     [Samba]

  Powered by Linux