HomeFreeBSD

MFC r238980:

Description

MFC r238980:

Just like the other file systems found in /sys/fs, g_vfs_open()

should be paried with g_vfs_close(). Though g_vfs_close() is a wrapper
around g_wither_geom_close(), r206130 added the following test in
g_vfs_open():

if (bo->bo_private != vp)

		return (EBUSY);

  Which will cause a 'Device busy' error inside reiserfs_mountfs() if

the same file system is re-mounted again after umount or mounting failure:

(case 1, /dev/ad4s3 is not a valid REISERFS partition)

  1. mount -t reiserfs -o ro /dev/ad4s3 /mnt

mount: /dev/ad4s3: Invalid argument

  1. mount -t msdosfs -o ro /dev/ad4s3 /mnt

mount: /dev/ad4s3: Device busy

(case 2, /dev/ad4s3 is a valid REISERFS partition)

  1. mount -t reiserfs -o ro /dev/ad4s3 /mnt
  2. umount /mnt
  3. mount -t reiserfs -o ro /dev/ad4s3 /mnt

mount: /dev/ad4s3: Device busy

On the other hand, g_vfs_close() 'fixed' the above cases by doing an

extra step to keep 'sc->sc_bo->bo_private' and 'cp->private' pointers
synchronised.

Reviewed by: kib

Details

Provenance
avatarAuthored on
Reviewer
kib
Parents
rS289888: - Plugging a memory leak when malloc() failed during initialisation;
Branches
Unknown
Tags
Unknown