quota.c (020abf03cd659388f94cb328e1e1df0656e0d7ff) quota.c (815d405ceff0d6964683f033e18b9b23a88fba87)
1/*
2 * Quota code necessary even when VFS quota support is not compiled
3 * into the kernel. The interesting stuff is over in dquot.c, here
4 * we have symbols for initial quotactl(2) handling, the sysctl(2)
5 * variables, etc - things needed even when quota support disabled.
6 */
7
8#include <linux/fs.h>

--- 341 unchanged lines hidden (view full) ---

350 }
351
352 /*
353 * Path for quotaon has to be resolved before grabbing superblock
354 * because that gets s_umount sem which is also possibly needed by path
355 * resolution (think about autofs) and thus deadlocks could arise.
356 */
357 if (cmds == Q_QUOTAON) {
1/*
2 * Quota code necessary even when VFS quota support is not compiled
3 * into the kernel. The interesting stuff is over in dquot.c, here
4 * we have symbols for initial quotactl(2) handling, the sysctl(2)
5 * variables, etc - things needed even when quota support disabled.
6 */
7
8#include <linux/fs.h>

--- 341 unchanged lines hidden (view full) ---

350 }
351
352 /*
353 * Path for quotaon has to be resolved before grabbing superblock
354 * because that gets s_umount sem which is also possibly needed by path
355 * resolution (think about autofs) and thus deadlocks could arise.
356 */
357 if (cmds == Q_QUOTAON) {
358 ret = user_path_at(AT_FDCWD, addr, LOOKUP_FOLLOW, &path);
358 ret = user_path_at(AT_FDCWD, addr, LOOKUP_FOLLOW|LOOKUP_AUTOMOUNT, &path);
359 if (ret)
360 pathp = ERR_PTR(ret);
361 else
362 pathp = &path;
363 }
364
365 sb = quotactl_block(special);
366 if (IS_ERR(sb))
367 return PTR_ERR(sb);
368
369 ret = do_quotactl(sb, type, cmds, id, addr, pathp);
370
371 drop_super(sb);
372 if (pathp && !IS_ERR(pathp))
373 path_put(pathp);
374 return ret;
375}
359 if (ret)
360 pathp = ERR_PTR(ret);
361 else
362 pathp = &path;
363 }
364
365 sb = quotactl_block(special);
366 if (IS_ERR(sb))
367 return PTR_ERR(sb);
368
369 ret = do_quotactl(sb, type, cmds, id, addr, pathp);
370
371 drop_super(sb);
372 if (pathp && !IS_ERR(pathp))
373 path_put(pathp);
374 return ret;
375}