cregit-Linux how code gets into the kernel

Release 4.11 fs/gfs2/dentry.c

Directory: fs/gfs2
/*
 * Copyright (C) Sistina Software, Inc.  1997-2003 All rights reserved.
 * Copyright (C) 2004-2006 Red Hat, Inc.  All rights reserved.
 *
 * This copyrighted material is made available to anyone wishing to use,
 * modify, copy, or redistribute it subject to the terms and conditions
 * of the GNU General Public License version 2.
 */

#include <linux/spinlock.h>
#include <linux/completion.h>
#include <linux/buffer_head.h>
#include <linux/gfs2_ondisk.h>
#include <linux/namei.h>
#include <linux/crc32.h>

#include "gfs2.h"
#include "incore.h"
#include "dir.h"
#include "glock.h"
#include "super.h"
#include "util.h"
#include "inode.h"

/**
 * gfs2_drevalidate - Check directory lookup consistency
 * @dentry: the mapping to check
 * @flags: lookup flags
 *
 * Check to make sure the lookup necessary to arrive at this inode from its
 * parent is still good.
 *
 * Returns: 1 if the dentry is ok, 0 if it isn't
 */


static int gfs2_drevalidate(struct dentry *dentry, unsigned int flags) { struct dentry *parent; struct gfs2_sbd *sdp; struct gfs2_inode *dip; struct inode *inode; struct gfs2_holder d_gh; struct gfs2_inode *ip = NULL; int error; int had_lock = 0; if (flags & LOOKUP_RCU) return -ECHILD; parent = dget_parent(dentry); sdp = GFS2_SB(d_inode(parent)); dip = GFS2_I(d_inode(parent)); inode = d_inode(dentry); if (inode) { if (is_bad_inode(inode)) goto invalid; ip = GFS2_I(inode); } if (sdp->sd_lockstruct.ls_ops->lm_mount == NULL) goto valid; had_lock = (gfs2_glock_is_locked_by_me(dip->i_gl) != NULL); if (!had_lock) { error = gfs2_glock_nq_init(dip->i_gl, LM_ST_SHARED, 0, &d_gh); if (error) goto fail; } error = gfs2_dir_check(d_inode(parent), &dentry->d_name, ip); switch (error) { case 0: if (!inode) goto invalid_gunlock; break; case -ENOENT: if (!inode) goto valid_gunlock; goto invalid_gunlock; default: goto fail_gunlock; } valid_gunlock: if (!had_lock) gfs2_glock_dq_uninit(&d_gh); valid: dput(parent); return 1; invalid_gunlock: if (!had_lock) gfs2_glock_dq_uninit(&d_gh); invalid: dput(parent); return 0; fail_gunlock: gfs2_glock_dq_uninit(&d_gh); fail: dput(parent); return 0; }

Contributors

PersonTokensPropCommitsCommitProp
David Teigland17558.92%111.11%
Steven Whitehouse4113.80%444.44%
Nicholas Piggin3511.78%111.11%
S. Wendy Cheng3110.44%111.11%
David Howells124.04%111.11%
Al Viro31.01%111.11%
Total297100.00%9100.00%


static int gfs2_dhash(const struct dentry *dentry, struct qstr *str) { str->hash = gfs2_disk_hash(str->name, str->len); return 0; }

Contributors

PersonTokensPropCommitsCommitProp
Steven Whitehouse3497.14%150.00%
Nicholas Piggin12.86%150.00%
Total35100.00%2100.00%


static int gfs2_dentry_delete(const struct dentry *dentry) { struct gfs2_inode *ginode; if (d_really_is_negative(dentry)) return 0; ginode = GFS2_I(d_inode(dentry)); if (!gfs2_holder_initialized(&ginode->i_iopen_gh)) return 0; if (test_bit(GLF_DEMOTE, &ginode->i_iopen_gh.gh_gl->gl_flags)) return 1; return 0; }

Contributors

PersonTokensPropCommitsCommitProp
Wengang Wang6284.93%125.00%
David Howells68.22%125.00%
Andreas Gruenbacher45.48%125.00%
Nicholas Piggin11.37%125.00%
Total73100.00%4100.00%

const struct dentry_operations gfs2_dops = { .d_revalidate = gfs2_drevalidate, .d_hash = gfs2_dhash, .d_delete = gfs2_dentry_delete, };

Overall Contributors

PersonTokensPropCommitsCommitProp
David Teigland20343.38%15.26%
Steven Whitehouse9921.15%842.11%
Wengang Wang6714.32%15.26%
Nicholas Piggin408.55%315.79%
S. Wendy Cheng316.62%15.26%
David Howells183.85%15.26%
Al Viro51.07%210.53%
Andreas Gruenbacher40.85%15.26%
Fabio Massimo Di Nitto10.21%15.26%
Total468100.00%19100.00%
Directory: fs/gfs2
Information contained on this website is for historical information purposes only and does not indicate or represent copyright ownership.
Created with cregit.