14 Jan, 2012
1 commit
-
I don't know how I missed this obvious mistake when I
reviewed Als' patches, sorry.[ Quoting Al:
Grr... Note to self: do git status *and* git stash show -p
before git push. Nothing like "WTF? I'd fixed that braino"
feeling ;-/Al sent the same patch - it got broken in commit d668dc56631d:
"autofs4: deal with autofs4_write/autofs4_write races". ]Reported-and-tested-by: Dave Airlie
Signed-off-by: Ian Kent
Signed-off-by: Al Viro
Signed-off-by: Linus Torvalds
11 Jan, 2012
3 commits
-
Just serialize the actual writing of packets into pipe on
a new mutex, independent from everything else in the locking
hierarchy. As soon as something has started feeding a piece
of packet into the pipe to daemon, we *want* everything else
about to try the same to wait until we are done.Acked-by: Ian Kent
Signed-off-by: Al Viro -
we need to hold ->wq_mutex while we are forming the packet to send,
lest we have autofs4_catatonic_mode() setting wq->name.name to NULL
just as autofs4_notify_daemon() decides to memcpy() from it...We do have check for catatonic mode immediately after that (under
->wq_mutex, as it ought to be) and packet won't be actually sent,
but it'll be too late for us if we oops on that memcpy() from NULL...Fix is obvious - just extend the area covered by ->wq_mutex over
that switch and check whether it's catatonic *before* doing anything
else.Acked-by: Ian Kent
Signed-off-by: Al Viro -
We need to recheck ->catatonic after autofs4_wait() got ->wq_mutex
for good, or we might end up with wq inserted into queue after
autofs4_catatonic_mode() had done its thing. It will stick there
forever, since there won't be anything to clear its ->name.name.A bit of a complication: validate_request() drops and regains ->wq_mutex.
It actually ends up the most convenient place to stick the check into...Acked-by: Ian Kent
Signed-off-by: Al Viro
07 Jan, 2012
2 commits
-
Signed-off-by: Al Viro
-
Signed-off-by: Al Viro
04 Jan, 2012
2 commits
-
Signed-off-by: Al Viro
-
vfs_mkdir() gets int, but immediately drops everything that might not
fit into umode_t and that's the only caller of ->mkdir()...Signed-off-by: Al Viro
02 Nov, 2011
1 commit
-
Replace remaining direct i_nlink updates with a new set_nlink()
updater function.Signed-off-by: Miklos Szeredi
Tested-by: Toshiyuki Okajima
Signed-off-by: Christoph Hellwig
09 Aug, 2011
2 commits
-
The previous comit made the autofs4 debug printouts check types against
the printout format, and uncovered this bug:fs/autofs4/waitq.c:106:2: warning: format ‘%08lx’ expects type ‘long unsigned int’, but argument 4 has type ‘autofs_wqt_t’
which is due to the insane type for wait_queue_token. That thing should
be some fixed well-defined size (preferably just 'unsigned int' or
'u32') but for unexplained reasons it is randomly either 'unsigned long'
or 'unsigned int' depending on the architecture.For now, cast it to 'unsigned long' for printing, the way we do
elsewhere. Somebody else can try to explain the typedef mess.(There's a reason we don't support excessive use of typedefs in the
kernel: it's usually just a good way of confusing yourself).Signed-off-by: Linus Torvalds
-
Use 'pr_debug()' for DPRINTK, which will do the proper type checking on
the arguments (without generating code) even when DEBUG isn't #defined.Also, use the standard __VA_ARGS__ for the macros, and stop the
pointless abuse of 'do { xyz } while (0)' when the macro is already a
perfectly well-formed single statement.Reported-by: David Howells
Suggested-by: Joe Perches
Cc: Ian Kent
Signed-off-by: Linus Torvalds
30 May, 2011
1 commit
-
Signed-off-by: Al Viro
26 May, 2011
1 commit
-
Only a few file systems need this. Start by pushing it down into each
fs rmdir method (except gfs2 and xfs) so it can be dealt with on a per-fs
basis.This does not change behavior for any in-tree file systems.
Acked-by: Christoph Hellwig
Signed-off-by: Sage Weil
Signed-off-by: Al Viro
31 Mar, 2011
1 commit
-
Fixes generated by 'codespell' and manually reviewed.
Signed-off-by: Lucas De Marchi
25 Mar, 2011
6 commits
-
…s_dev_ioctl_setpipefd()
In fs/autofs4/dev-ioctl.c::autofs_dev_ioctl_setpipefd() we call fget(),
which may return NULL, but we do not explicitly test for that NULL return
so we may end up dereferencing a NULL pointer - bad.When I originally submitted this patch I had chosen EBUSY as the return
value to use if this happens. Ian Kent was kind enough to explain why that
would most likely be wrong and why EBADF should most likely be used
instead. This version of the patch uses EBADF.Signed-off-by: Jesper Juhl <jj@chaosbits.net>
Signed-off-by: Ian Kent <raven@themaw.net>
Signed-off-by: Al Viro <viro@zeniv.linux.org.uk> -
The autofs4_lock introduced by the rcu-walk changes has unnecessarily
broad scope. The locking is better handled by the per-autofs super
block lookup_lock.Signed-off-by: Ian Kent
Acked-by: David Howells
Signed-off-by: Al Viro -
The daemon never needs to block and, in the rcu-walk case an error
return isn't used, so always return zero.Signed-off-by: Ian Kent
Signed-off-by: Al Viro -
The vfs-scale changes changed the traversal used in
autofs4_expire_indirect() from a list to a depth first tree traversal
which isn't right.Signed-off-by: Ian Kent
Signed-off-by: Al Viro -
There is a missing dput() when returning from autofs4_expire_direct()
when we see that the dentry is already a pending mount.Signed-off-by: Ian Kent
Acked-by: David Howells
Signed-off-by: Al Viro -
When direct (and offset) mounts were introduced the the last used
timeout could no longer be updated in ->d_revalidate(). This is
because covered direct mounts would be followed over without calling
the autofs file system. As a result the definition of the busyness
check for all entries was changed to be "actually busy" being an open
file or working directory within the automount. But now we have a call
back in the follow so the last used update on any access can be
re-instated. This requires DCACHE_MANAGE_TRANSIT to always be set.Signed-off-by: Ian Kent
Signed-off-by: Al Viro
18 Mar, 2011
1 commit
-
it's always false...
Signed-off-by: Al Viro
18 Jan, 2011
10 commits
-
The latter is called only when both ino and dentry are about to
be freed, so cleaning ->d_fsdata and ->dentry is pointless.Acked-by: Ian Kent
Signed-off-by: Al Viro -
split init_ino into new_ino and clean_ino; the former is
what used to be init_ino(NULL, sbi), the latter is for cases
where we passed non-NULL ino. Lose unused arguments.Acked-by: Ian Kent
Signed-off-by: Al Viro -
... so ->d_fsdata will have been set up before we get there
Acked-by: Ian Kent
Signed-off-by: Al Viro -
Acked-by: Ian Kent
Signed-off-by: Al Viro -
It's used only to pass the length of symlink body to
autofs4_get_inode() in autofs4_dir_symlink(). We can
bloody well set inode->i_size in autofs4_dir_symlink()
directly and be done with that.Acked-by: Ian Kent
Signed-off-by: Al Viro -
In all cases we'd set inf->mode to know value just before
passing it to autofs4_get_inode(). That kills the need
to store it in autofs_info and pass it to autofs_init_ino()Acked-by: Ian Kent
Signed-off-by: Al Viro -
Kill it. Mind you, it's been an obfuscated call of autofs4_init_ino()
ever since 2.3.99pre6-4...Acked-by: Ian Kent
Signed-off-by: Al Viro -
gets rid of all ->free()/->u.symlink machinery in autofs; we simply
keep symlink bodies in inode->i_private and free them in ->evict_inode().Acked-by: Ian Kent
Signed-off-by: Al Viro -
oz_mode isn't defined any more, use autofs4_oz_mode(sbi) instead.
Signed-off-by: Ian Kent
Signed-off-by: Al Viro -
The initialization condition in fs/autofs4/expire.c:get_next_positive_dentry()
appears to be incorrect. If prev == NULL I believe that root should be
returned.Further down, at the current dentry check for it being simple_positive()
it looks like the d_lock for dentry p should be dropped instead of dentry
ret, otherwise when p is assinged to ret we end up with no lock on p and
a lost lock on ret, which leads to a deadlock.Signed-off-by: Ian Kent
Signed-off-by: Al Viro
16 Jan, 2011
9 commits
-
Merge the remaining autofs4 dentry ops tables. It doesn't matter if
d_automount and d_manage are present on something that's not mountable or
holdable as these ops are only used if the appropriate flags are set in
dentry->d_flags.[AV] switch to ->s_d_op, since now _everything_ on autofs4 is using the
same dentry_operations.Signed-off-by: David Howells
Signed-off-by: Al Viro -
Allow d_manage() to be called from pathwalk when it is in RCU-walk mode as well
as when it is in Ref-walk mode. This permits __follow_mount_rcu() to call
d_manage() directly. d_manage() needs a parameter to indicate that it is in
RCU-walk mode as it isn't allowed to sleep if in that mode (but should return
-ECHILD instead).autofs4_d_manage() can then be set to retain RCU-walk mode if the daemon
accesses it and otherwise request dropping back to ref-walk mode.Signed-off-by: David Howells
Signed-off-by: Al Viro -
Version 4 of autofs provides a pseudo direct mount implementation
that relies on directories at the leaves of a directory tree under
an indirect mount to trigger mounts.This patch adds support for that functionality.
Signed-off-by: Ian Kent
Signed-off-by: David Howells
Signed-off-by: Al Viro -
It is possible for the check in wait.c:validate_request() to return
an incorrect result if the dentry that was mounted upon has changed
during the callback.Signed-off-by: Ian Kent
Signed-off-by: David Howells
Signed-off-by: Al Viro -
When this function is called the local reference count does't need to
be updated since the dentry is going away and dput definitely must
not be called here.Also the autofs info struct field inode isn't used so remove it.
Signed-off-by: Ian Kent
Signed-off-by: David Howells
Signed-off-by: Al Viro -
There are now two distinct dentry operations uses. One for dentrys
that trigger mounts and one for dentrys that do not.Rationalize the use of these dentry operations and rename them to
reflect their function.Signed-off-by: Ian Kent
Signed-off-by: David Howells
Signed-off-by: Al Viro -
Since the use of ->follow_link() has been eliminated there is no
need to separate the indirect and direct inode operations.Signed-off-by: Ian Kent
Signed-off-by: David Howells
Signed-off-by: Al Viro -
Remove code that is not used due to the use of ->d_automount()
and ->d_manage().Signed-off-by: Ian Kent
Signed-off-by: David Howells
Signed-off-by: Al Viro -
This patch required a previous patch to add the ->d_automount()
dentry operation.Add a function to use the newly defined ->d_manage() dentry operation
for blocking during mount and expire.Whether the VFS calls the dentry operations d_automount() and d_manage()
is controled by the DMANAGED_AUTOMOUNT and DMANAGED_TRANSIT flags. autofs
uses the d_automount() operation to callback to user space to request
mount operations and the d_manage() operation to block walks into mounts
that are under construction or destruction.In order to prevent these functions from being called unnecessarily the
DMANAGED_* flags are cleared for cases which would cause this. In the
common case the DMANAGED_AUTOMOUNT and DMANAGED_TRANSIT flags are both
set for dentrys waiting to be mounted. The DMANAGED_TRANSIT flag is
cleared upon successful mount request completion and set during expire
runs, both during the dentry expire check, and if selected for expire,
is left set until a subsequent successful mount request completes.The exception to this is the so-called rootless multi-mount which has
no actual mount at its base. In this case the DMANAGED_AUTOMOUNT flag
is cleared upon successful mount request completion as well and set
again after a successful expire.Signed-off-by: Ian Kent
Signed-off-by: David Howells
Signed-off-by: Al Viro