1. 17 Jul, 2017 2 commits
    • David Howells's avatar
      VFS: Differentiate mount flags (MS_*) from internal superblock flags · e462ec50
      David Howells authored
      Differentiate the MS_* flags passed to mount(2) from the internal flags set
      in the super_block's s_flags.  s_flags are now called SB_*, with the names
      and the values for the moment mirroring the MS_* flags that they're
      equivalent to.
      
      In this patch, just the headers are altered and some kernel code where
      blind automated conversion isn't necessarily correct.
      
      Note that this shows up some interesting issues:
      
       (1) Some MS_* flags get translated to MNT_* flags (such as MS_NODEV ->
           MNT_NODEV) without passing this on to the filesystem, but some
           filesystems set such flags anyway.
      
       (2) The ->remount_fs() methods of some filesystems adjust the *flags
           argument by setting MS_* flags in it, such as MS_NOATIME - but these
           flags are then scrubbed by do_remount_sb() (only the occupants of
           MS_RMT_MASK are permitted: MS_RDONLY, MS_SYNCHRONOUS, MS_MANDLOCK,
           MS_I_VERSION and MS_LAZYTIME)
      
      I'm not sure what's the best way to solve all these cases.
      Suggested-by: default avatarAl Viro <viro@ZenIV.linux.org.uk>
      Signed-off-by: default avatarDavid Howells <dhowells@redhat.com>
      e462ec50
    • David Howells's avatar
      VFS: Convert sb->s_flags & MS_RDONLY to sb_rdonly(sb) · bc98a42c
      David Howells authored
      Firstly by applying the following with coccinelle's spatch:
      
      	@@ expression SB; @@
      	-SB->s_flags & MS_RDONLY
      	+sb_rdonly(SB)
      
      to effect the conversion to sb_rdonly(sb), then by applying:
      
      	@@ expression A, SB; @@
      	(
      	-(!sb_rdonly(SB)) && A
      	+!sb_rdonly(SB) && A
      	|
      	-A != (sb_rdonly(SB))
      	+A != sb_rdonly(SB)
      	|
      	-A == (sb_rdonly(SB))
      	+A == sb_rdonly(SB)
      	|
      	-!(sb_rdonly(SB))
      	+!sb_rdonly(SB)
      	|
      	-A && (sb_rdonly(SB))
      	+A && sb_rdonly(SB)
      	|
      	-A || (sb_rdonly(SB))
      	+A || sb_rdonly(SB)
      	|
      	-(sb_rdonly(SB)) != A
      	+sb_rdonly(SB) != A
      	|
      	-(sb_rdonly(SB)) == A
      	+sb_rdonly(SB) == A
      	|
      	-(sb_rdonly(SB)) && A
      	+sb_rdonly(SB) && A
      	|
      	-(sb_rdonly(SB)) || A
      	+sb_rdonly(SB) || A
      	)
      
      	@@ expression A, B, SB; @@
      	(
      	-(sb_rdonly(SB)) ? 1 : 0
      	+sb_rdonly(SB)
      	|
      	-(sb_rdonly(SB)) ? A : B
      	+sb_rdonly(SB) ? A : B
      	)
      
      to remove left over excess bracketage and finally by applying:
      
      	@@ expression A, SB; @@
      	(
      	-(A & MS_RDONLY) != sb_rdonly(SB)
      	+(bool)(A & MS_RDONLY) != sb_rdonly(SB)
      	|
      	-(A & MS_RDONLY) == sb_rdonly(SB)
      	+(bool)(A & MS_RDONLY) == sb_rdonly(SB)
      	)
      
      to make comparisons against the result of sb_rdonly() (which is a bool)
      work correctly.
      Signed-off-by: default avatarDavid Howells <dhowells@redhat.com>
      bc98a42c
  2. 13 Dec, 2016 1 commit
  3. 26 Jun, 2015 1 commit
  4. 05 May, 2015 1 commit
  5. 15 Apr, 2015 2 commits
  6. 17 Dec, 2014 1 commit
    • Miklos Szeredi's avatar
      init: fix read-write root mount · 10975933
      Miklos Szeredi authored
      If mount flags don't have MS_RDONLY, iso9660 returns EACCES without actually
      checking if it's an iso image.
      
      This tricks mount_block_root() into retrying with MS_RDONLY.  This results
      in a read-only root despite the "rw" boot parameter if the actual
      filesystem was checked after iso9660.
      
      I believe the behavior of iso9660 is okay, while that of mount_block_root()
      is not.  It should rather try all types without MS_RDONLY and only then
      retry with MS_RDONLY.
      
      This change also makes the code more robust against the case when EACCES is
      returned despite MS_RDONLY, which would've resulted in a lockup.
      Signed-off-by: default avatarMiklos Szeredi <mszeredi@suse.cz>
      Signed-off-by: default avatarAl Viro <viro@zeniv.linux.org.uk>
      10975933
  7. 17 Sep, 2014 1 commit
    • Paul Gortmaker's avatar
      Revert "init: make rootdelay=N consistent with rootwait behaviour" · 8ba4caf1
      Paul Gortmaker authored
      This reverts commit 4dfe694f.
      
      In that, we did:
      
        Here we move the rootdelay code to be right beside the rootwait code, so
        that their behaviour is consistent.
      
      ...which is fine, but in hindsight, perhaps moving the rootwait to be
      beside the rootdelay would have been better.  We also indicated:
      
        It should be noted that in doing so, the actions based on the
        saved_root_name[0] and initrd_load() were previously put on hold by
        rootdelay=N and now currently will not be delayed.  However, I think
        consistent behaviour is more important than matching historical behaviour
        of delaying the above two operations.
      
      But Pavel reported an instance where an ARM target with root on MMC
      was failing to mount root, and Russell diagnosed it to the fact that
      the call to set ROOT_DEV within the saved_root_name[0] processing
      block mentioned above was no longer being delayed.
      
      Rather than moving both wait clauses to the original position of
      rootdelay and risking unearthing other possible corner case breakage
      at this point in time, we simply revert now and we can revisit
      trying the alternate/earlier location in another development cycle.
      
      Cc: Pavel Machek <pavel@denx.de>
      Cc: Russell King <linux@arm.linux.org.uk>
      Cc: Andrew Morton <akpm@linux-foundation.org>
      Signed-off-by: default avatarPaul Gortmaker <paul.gortmaker@windriver.com>
      Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
      8ba4caf1
  8. 28 Aug, 2014 1 commit
  9. 08 Aug, 2014 1 commit
    • Paul Gortmaker's avatar
      init: make rootdelay=N consistent with rootwait behaviour · 4dfe694f
      Paul Gortmaker authored
      Currently rootdelay=N and rootwait behave differently (aside from the
      obvious unbounded wait duration) because they are at different places in
      the init sequence.
      
      The difference manifests itself for md devices because the call to
      md_run_setup() lives between rootdelay and rootwait, so if you try to use
      rootdelay=20 to try and allow a slow RAID0 array to assemble, you get
      this:
      
      [    4.526011] sd 6:0:0:0: [sdc] Attached SCSI removable disk
      [   22.972079] md: Waiting for all devices to be available before autodetect
      
      i.e.  you've achieved nothing other than delaying the probing 20s, when
      what you wanted was a 20s delay _after_ the probing for md devices was
      initiated.
      
      Here we move the rootdelay code to be right beside the rootwait code, so
      that their behaviour is consistent.
      
      It should be noted that in doing so, the actions based on the
      saved_root_name[0] and initrd_load() were previously put on hold by
      rootdelay=N and now currently will not be delayed.  However, I think
      consistent behaviour is more important than matching historical behaviour
      of delaying the above two operations.
      Signed-off-by: default avatarPaul Gortmaker <paul.gortmaker@windriver.com>
      Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
      Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
      4dfe694f
  10. 03 Apr, 2014 1 commit
  11. 13 Nov, 2013 1 commit
  12. 11 Sep, 2013 3 commits
    • Rob Landley's avatar
      initmpfs: use initramfs if rootfstype= or root= specified · 6e19eded
      Rob Landley authored
      Command line option rootfstype=ramfs to obtain old initramfs behavior, and
      use ramfs instead of tmpfs for stub when root= defined (for cosmetic
      reasons).
      
      [akpm@linux-foundation.org: coding-style fixes]
      Signed-off-by: default avatarRob Landley <rob@landley.net>
      Cc: Jeff Layton <jlayton@redhat.com>
      Cc: Jens Axboe <axboe@kernel.dk>
      Cc: Stephen Warren <swarren@nvidia.com>
      Cc: Rusty Russell <rusty@rustcorp.com.au>
      Cc: Jim Cromie <jim.cromie@gmail.com>
      Cc: Sam Ravnborg <sam@ravnborg.org>
      Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
      Cc: "Eric W. Biederman" <ebiederm@xmission.com>
      Cc: Alexander Viro <viro@zeniv.linux.org.uk>
      Cc: "H. Peter Anvin" <hpa@zytor.com>
      Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
      Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
      6e19eded
    • Rob Landley's avatar
      initmpfs: make rootfs use tmpfs when CONFIG_TMPFS enabled · 16203a7a
      Rob Landley authored
      Conditionally call the appropriate fs_init function and fill_super
      functions.  Add a use once guard to shmem_init() to simply succeed on a
      second call.
      
      (Note that IS_ENABLED() is a compile time constant so dead code
      elimination removes unused function calls when CONFIG_TMPFS is disabled.)
      Signed-off-by: default avatarRob Landley <rob@landley.net>
      Cc: Jeff Layton <jlayton@redhat.com>
      Cc: Jens Axboe <axboe@kernel.dk>
      Cc: Stephen Warren <swarren@nvidia.com>
      Cc: Rusty Russell <rusty@rustcorp.com.au>
      Cc: Jim Cromie <jim.cromie@gmail.com>
      Cc: Sam Ravnborg <sam@ravnborg.org>
      Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
      Cc: "Eric W. Biederman" <ebiederm@xmission.com>
      Cc: Alexander Viro <viro@zeniv.linux.org.uk>
      Cc: "H. Peter Anvin" <hpa@zytor.com>
      Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
      Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
      16203a7a
    • Rob Landley's avatar
      initmpfs: move rootfs code from fs/ramfs/ to init/ · 57f150a5
      Rob Landley authored
      When the rootfs code was a wrapper around ramfs, having them in the same
      file made sense.  Now that it can wrap another filesystem type, move it in
      with the init code instead.
      
      This also allows a subsequent patch to access rootfstype= command line
      arg.
      Signed-off-by: default avatarRob Landley <rob@landley.net>
      Cc: Jeff Layton <jlayton@redhat.com>
      Cc: Jens Axboe <axboe@kernel.dk>
      Cc: Stephen Warren <swarren@nvidia.com>
      Cc: Rusty Russell <rusty@rustcorp.com.au>
      Cc: Jim Cromie <jim.cromie@gmail.com>
      Cc: Sam Ravnborg <sam@ravnborg.org>
      Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
      Cc: "Eric W. Biederman" <ebiederm@xmission.com>
      Cc: Alexander Viro <viro@zeniv.linux.org.uk>
      Cc: "H. Peter Anvin" <hpa@zytor.com>
      Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
      Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
      57f150a5
  13. 03 Jul, 2013 1 commit
  14. 06 Feb, 2013 1 commit
  15. 23 Nov, 2012 3 commits
    • Stephen Warren's avatar
      block: partition: msdos: provide UUIDs for partitions · d33b98fc
      Stephen Warren authored
      The MSDOS/MBR partition table includes a 32-bit unique ID, often referred
      to as the NT disk signature.  When combined with a partition number within
      the table, this can form a unique ID similar in concept to EFI/GPT's
      partition UUID.  Constructing and recording this value in struct
      partition_meta_info allows MSDOS partitions to be referred to on the
      kernel command-line using the following syntax:
      
      root=PARTUUID=0002dd75-01
      Signed-off-by: default avatarStephen Warren <swarren@nvidia.com>
      Cc: Tejun Heo <tj@kernel.org>
      Cc: Will Drewry <wad@chromium.org>
      Cc: Kay Sievers <kay.sievers@vrfy.org>
      Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
      Signed-off-by: default avatarJens Axboe <axboe@kernel.dk>
      d33b98fc
    • Stephen Warren's avatar
      init: reduce PARTUUID min length to 1 from 36 · 283f8fc0
      Stephen Warren authored
      Reduce the minimum length for a root=PARTUUID= parameter to be considered
      valid from 36 to 1.  EFI/GPT partition UUIDs are always exactly 36
      characters long, hence the previous limit.  However, the next patch will
      support DOS/MBR UUIDs too, which have a different, shorter, format.
      Instead of validating any particular length, just ensure that at least
      some non-empty value was given by the user.
      
      Also, consider a missing UUID value to be a parsing error, in the same
      vein as if /PARTNROFF exists and can't be parsed.  As such, make both
      error cases print a message and disable rootwait.  Convert to pr_err while
      we're at it.
      Signed-off-by: default avatarStephen Warren <swarren@nvidia.com>
      Cc: Tejun Heo <tj@kernel.org>
      Cc: Will Drewry <wad@chromium.org>
      Cc: Kay Sievers <kay.sievers@vrfy.org>
      Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
      Signed-off-by: default avatarJens Axboe <axboe@kernel.dk>
      283f8fc0
    • Stephen Warren's avatar
      block: store partition_meta_info.uuid as a string · 1ad7e899
      Stephen Warren authored
      This will allow other types of UUID to be stored here, aside from true
      UUIDs.  This also simplifies code that uses this field, since it's usually
      constructed from a, used as a, or compared to other, strings.
      
      Note: A simplistic approach here would be to set uuid_str[36]=0 whenever a
      /PARTNROFF option was found to be present.  However, this modifies the
      input string, and causes subsequent calls to devt_from_partuuid() not to
      see the /PARTNROFF option, which causes different results.  In order to
      avoid misleading future maintainers, this parameter is marked const.
      Signed-off-by: default avatarStephen Warren <swarren@nvidia.com>
      Cc: Tejun Heo <tj@kernel.org>
      Cc: Will Drewry <wad@chromium.org>
      Cc: Kay Sievers <kay.sievers@vrfy.org>
      Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
      Signed-off-by: default avatarJens Axboe <axboe@kernel.dk>
      1ad7e899
  16. 12 Oct, 2012 1 commit
    • Jeff Layton's avatar
      vfs: allocate page instead of names_cache buffer in mount_block_root · a608ca21
      Jeff Layton authored
      First, it's incorrect to call putname() after __getname_gfp() since the
      bare __getname_gfp() call skips the auditing code, while putname()
      doesn't.
      
      mount_block_root allocates a PATH_MAX buffer via __getname_gfp, and then
      calls get_fs_names to fill the buffer. That function can call
      get_filesystem_list which assumes that that buffer is a full page in
      size. On arches where PAGE_SIZE != 4k, then this could potentially
      overrun.
      
      In practice, it's hard to imagine the list of filesystem names even
      approaching 4k, but it's best to be safe. Just allocate a page for this
      purpose instead.
      
      With this, we can also remove the __getname_gfp() definition since there
      are no more callers.
      Signed-off-by: default avatarJeff Layton <jlayton@redhat.com>
      Signed-off-by: default avatarAl Viro <viro@zeniv.linux.org.uk>
      a608ca21
  17. 01 Jun, 2012 1 commit
  18. 05 May, 2012 1 commit
    • Sasha Levin's avatar
      init: don't try mounting device as nfs root unless type fully matches · 377485f6
      Sasha Levin authored
      Currently, we'll try mounting any device who's major device number is
      UNNAMED_MAJOR as NFS root.  This would happen for non-NFS devices as
      well (such as 9p devices) but it wouldn't cause any issues since
      mounting the device as NFS would fail quickly and the code proceeded to
      doing the proper mount:
      
             [  101.522716] VFS: Unable to mount root fs via NFS, trying floppy.
             [  101.534499] VFS: Mounted root (9p filesystem) on device 0:18.
      
      Commit 6829a048102a ("NFS: Retry mounting NFSROOT") introduced retries
      when mounting NFS root, which means that now we don't immediately fail
      and instead it takes an additional 90+ seconds until we stop retrying,
      which has revealed the issue this patch fixes.
      
      This meant that it would take an additional 90 seconds to boot when
      we're not using a device type which gets detected in order before NFS.
      
      This patch modifies the NFS type check to require device type to be
      'Root_NFS' instead of requiring the device to have an UNNAMED_MAJOR
      major.  This makes boot process cleaner since we now won't go through
      the NFS mounting code at all when the device isn't an NFS root
      ("/dev/nfs").
      Signed-off-by: default avatarSasha Levin <levinsasha928@gmail.com>
      Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
      377485f6
  19. 23 Mar, 2012 1 commit
  20. 07 Jan, 2012 1 commit
  21. 05 Jan, 2012 1 commit
    • Chuck Lever's avatar
      NFS: Retry mounting NFSROOT · 43717c7d
      Chuck Lever authored
      Lukas Razik <linux@razik.name> reports that on his SPARC system,
      booting with an NFS root file system stopped working after commit
      56463e50 "NFS: Use super.c for NFSROOT mount option parsing."
      
      We found that the network switch to which Lukas' client was attached
      was delaying access to the LAN after the client's NIC driver reported
      that its link was up.  The delay was longer than the timeouts used in
      the NFS client during mounting.
      
      NFSROOT worked for Lukas before commit 56463e50 because in those
      kernels, the client's first operation was an rpcbind request to
      determine which port the NFS server was listening on.  When that
      request failed after a long timeout, the client simply selected the
      default NFS port (2049).  By that time the switch was allowing access
      to the LAN, and the mount succeeded.
      
      Neither of these client behaviors is desirable, so reverting 56463e50
      is really not a choice.  Instead, introduce a mechanism that retries
      the NFSROOT mount request several times.  This is the same tactic that
      normal user space NFS mounts employ to overcome server and network
      delays.
      Signed-off-by: default avatarLukas Razik <linux@razik.name>
      [ cel: match kernel coding style, add proper patch description ]
      [ cel: add exponential back-off ]
      Signed-off-by: default avatarChuck Lever <chuck.lever@oracle.com>
      Tested-by: default avatarLukas Razik <linux@razik.name>
      Cc: stable@kernel.org # > 2.6.38
      Signed-off-by: default avatarTrond Myklebust <Trond.Myklebust@netapp.com>
      43717c7d
  22. 02 Nov, 2011 1 commit
    • Will Drewry's avatar
      init: add root=PARTUUID=UUID/PARTNROFF=%d support · 79975f13
      Will Drewry authored
      Expand root=PARTUUID=UUID syntax to support selecting a root partition by
      integer offset from a known, unique partition.  This approach provides
      similar properties to specifying a device and partition number, but using
      the UUID as the unique path prior to evaluating the offset.
      
      For example,
        root=PARTUUID=99DE9194-FC15-4223-9192-FC243948F88B/PARTNROFF=1
      selects the partition with UUID 99DE.. then select the next
      partition.
      
      This change is motivated by a particular usecase in Chromium OS where the
      bootloader can easily determine what partition it is on (by UUID) but
      doesn't perform general partition table walking.
      
      That said, support for this model provides a direct mechanism for the user
      to modify the root partition to boot without specifically needing to
      extract each UUID or update the bootloader explicitly when the root
      partition UUID is changed (if it is recreated to be larger, for instance).
       Pinning to a /boot-style partition UUID allows the arbitrary root
      partition reconfiguration/modifications with slightly less ambiguity than
      just [dev][partition] and less stringency than the specific root partition
      UUID.
      
      [sfr@canb.auug.org.au: fix init sections warning]
      Signed-off-by: default avatarWill Drewry <wad@chromium.org>
      Cc: Kay Sievers <kay.sievers@vrfy.org>
      Cc: Randy Dunlap <rdunlap@xenotime.net>
      Cc: Namhyung Kim <namhyung@gmail.com>
      Cc: Trond Myklebust <Trond.Myklebust@netapp.com>
      Cc: Jens Axboe <axboe@kernel.dk>
      Signed-off-by: default avatarStephen Rothwell <sfr@canb.auug.org.au>
      Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
      Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
      79975f13
  23. 31 Mar, 2011 1 commit
  24. 23 Mar, 2011 1 commit
  25. 03 Jan, 2011 1 commit
  26. 26 Oct, 2010 1 commit
  27. 17 Sep, 2010 2 commits
    • Chuck Lever's avatar
      NFS: Use super.c for NFSROOT mount option parsing · 56463e50
      Chuck Lever authored
      Replace duplicate code in NFSROOT for mounting an NFS server on '/'
      with logic that uses the existing mainline text-based logic in the NFS
      client.
      
      Add documenting comments where appropriate.
      
      Note that this means NFSROOT mounts now use the same default settings
      as v2/v3 mounts done via mount(2) from user space.
      
        vers=3,tcp,rsize=<negotiated default>,wsize=<negotiated default>
      
      As before, however, no version/protocol negotiation with the server is
      done.
      Signed-off-by: default avatarChuck Lever <chuck.lever@oracle.com>
      Signed-off-by: default avatarTrond Myklebust <Trond.Myklebust@netapp.com>
      56463e50
    • Jens Axboe's avatar
      do_mounts: only enable PARTUUID for CONFIG_BLOCK · 6d0aed7a
      Jens Axboe authored
      When CONFIG_BLOCK is not enabled:
      
      init/do_mounts.c:71: error: implicit declaration of function 'dev_to_part'
      init/do_mounts.c:71: warning: initialization makes pointer from integer without a cast
      init/do_mounts.c:73: error: dereferencing pointer to incomplete type
      init/do_mounts.c:76: error: dereferencing pointer to incomplete type
      init/do_mounts.c:76: error: dereferencing pointer to incomplete type
      init/do_mounts.c:102: error: implicit declaration of function 'part_pack_uuid'
      init/do_mounts.c:104: error: 'block_class' undeclared (first use in this function)
      Reported-by: default avatarRandy Dunlap <randy.dunlap@oracle.com>
      Signed-off-by: default avatarJens Axboe <jaxboe@fusionio.com>
      6d0aed7a
  28. 16 Sep, 2010 1 commit
  29. 15 Sep, 2010 1 commit
    • Will Drewry's avatar
      init: add support for root devices specified by partition UUID · b5af921e
      Will Drewry authored
      This is the third patch in a series which adds support for
      storing partition metadata, optionally, off of the hd_struct.
      
      One major use for that data is being able to resolve partition
      by other identities than just the index on a block device.  Device
      enumeration varies by platform and there's a benefit to being able
      to use something like EFI GPT's GUIDs to determine the correct
      block device and partition to mount as the root.
      
      This change adds that support to root= by adding support for
      the following syntax:
      
        root=PARTUUID=hex-uuid
      Signed-off-by: default avatarWill Drewry <wad@chromium.org>
      Signed-off-by: default avatarJens Axboe <jaxboe@fusionio.com>
      b5af921e
  30. 30 Mar, 2010 1 commit
    • Tejun Heo's avatar
      include cleanup: Update gfp.h and slab.h includes to prepare for breaking... · 5a0e3ad6
      Tejun Heo authored
      include cleanup: Update gfp.h and slab.h includes to prepare for breaking implicit slab.h inclusion from percpu.h
      
      percpu.h is included by sched.h and module.h and thus ends up being
      included when building most .c files.  percpu.h includes slab.h which
      in turn includes gfp.h making everything defined by the two files
      universally available and complicating inclusion dependencies.
      
      percpu.h -> slab.h dependency is about to be removed.  Prepare for
      this change by updating users of gfp and slab facilities include those
      headers directly instead of assuming availability.  As this conversion
      needs to touch large number of source files, the following script is
      used as the basis of conversion.
      
        http://userweb.kernel.org/~tj/misc/slabh-sweep.py
      
      The script does the followings.
      
      * Scan files for gfp and slab usages and update includes such that
        only the necessary includes are there.  ie. if only gfp is used,
        gfp.h, if slab is used, slab.h.
      
      * When the script inserts a new include, it looks at the include
        blocks and try to put the new include such that its order conforms
        to its surrounding.  It's put in the include block which contains
        core kernel includes, in the same order that the rest are ordered -
        alphabetical, Christmas tree, rev-Xmas-tree or at the end if there
        doesn't seem to be any matching order.
      
      * If the script can't find a place to put a new include (mostly
        because the file doesn't have fitting include block), it prints out
        an error message indicating which .h file needs to be added to the
        file.
      
      The conversion was done in the following steps.
      
      1. The initial automatic conversion of all .c files updated slightly
         over 4000 files, deleting around 700 includes and adding ~480 gfp.h
         and ~3000 slab.h inclusions.  The script emitted errors for ~400
         files.
      
      2. Each error was manually checked.  Some didn't need the inclusion,
         some needed manual addition while adding it to implementation .h or
         embedding .c file was more appropriate for others.  This step added
         inclusions to around 150 files.
      
      3. The script was run again and the output was compared to the edits
         from #2 to make sure no file was left behind.
      
      4. Several build tests were done and a couple of problems were fixed.
         e.g. lib/decompress_*.c used malloc/free() wrappers around slab
         APIs requiring slab.h to be added manually.
      
      5. The script was run on all .h files but without automatically
         editing them as sprinkling gfp.h and slab.h inclusions around .h
         files could easily lead to inclusion dependency hell.  Most gfp.h
         inclusion directives were ignored as stuff from gfp.h was usually
         wildly available and often used in preprocessor macros.  Each
         slab.h inclusion directive was examined and added manually as
         necessary.
      
      6. percpu.h was updated not to include slab.h.
      
      7. Build test were done on the following configurations and failures
         were fixed.  CONFIG_GCOV_KERNEL was turned off for all tests (as my
         distributed build env didn't work with gcov compiles) and a few
         more options had to be turned off depending on archs to make things
         build (like ipr on powerpc/64 which failed due to missing writeq).
      
         * x86 and x86_64 UP and SMP allmodconfig and a custom test config.
         * powerpc and powerpc64 SMP allmodconfig
         * sparc and sparc64 SMP allmodconfig
         * ia64 SMP allmodconfig
         * s390 SMP allmodconfig
         * alpha SMP allmodconfig
         * um on x86_64 SMP allmodconfig
      
      8. percpu.h modifications were reverted so that it could be applied as
         a separate patch and serve as bisection point.
      
      Given the fact that I had only a couple of failures from tests on step
      6, I'm fairly confident about the coverage of this conversion patch.
      If there is a breakage, it's likely to be something in one of the arch
      headers which should be easily discoverable easily on most builds of
      the specific arch.
      Signed-off-by: default avatarTejun Heo <tj@kernel.org>
      Guess-its-ok-by: default avatarChristoph Lameter <cl@linux-foundation.org>
      Cc: Ingo Molnar <mingo@redhat.com>
      Cc: Lee Schermerhorn <Lee.Schermerhorn@hp.com>
      5a0e3ad6
  31. 15 Sep, 2009 1 commit
    • Kay Sievers's avatar
      Driver Core: devtmpfs - kernel-maintained tmpfs-based /dev · 2b2af54a
      Kay Sievers authored
      Devtmpfs lets the kernel create a tmpfs instance called devtmpfs
      very early at kernel initialization, before any driver-core device
      is registered. Every device with a major/minor will provide a
      device node in devtmpfs.
      
      Devtmpfs can be changed and altered by userspace at any time,
      and in any way needed - just like today's udev-mounted tmpfs.
      Unmodified udev versions will run just fine on top of it, and will
      recognize an already existing kernel-created device node and use it.
      The default node permissions are root:root 0600. Proper permissions
      and user/group ownership, meaningful symlinks, all other policy still
      needs to be applied by userspace.
      
      If a node is created by devtmps, devtmpfs will remove the device node
      when the device goes away. If the device node was created by
      userspace, or the devtmpfs created node was replaced by userspace, it
      will no longer be removed by devtmpfs.
      
      If it is requested to auto-mount it, it makes init=/bin/sh work
      without any further userspace support. /dev will be fully populated
      and dynamic, and always reflect the current device state of the kernel.
      With the commonly used dynamic device numbers, it solves the problem
      where static devices nodes may point to the wrong devices.
      
      It is intended to make the initial bootup logic simpler and more robust,
      by de-coupling the creation of the inital environment, to reliably run
      userspace processes, from a complex userspace bootstrap logic to provide
      a working /dev.
      Signed-off-by: default avatarKay Sievers <kay.sievers@vrfy.org>
      Signed-off-by: default avatarJan Blunck <jblunck@suse.de>
      Tested-By: default avatarHarald Hoyer <harald@redhat.com>
      Tested-By: default avatarScott James Remnant <scott@ubuntu.com>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@suse.de>
      2b2af54a
  32. 15 Jun, 2009 1 commit
  33. 01 Apr, 2009 1 commit