From: "Eric W. Biederman" <ebiederm@xmission.com>
To: <linux-fsdevel@vger.kernel.org>
Cc: Linux Containers <containers@lists.linux-foundation.org>,
<linux-kernel@vger.kernel.org>,
"Serge E. Hallyn" <serge@hallyn.com>,
"Eric W. Biederman" <ebiederm@xmission.com>,
Steven Whitehouse <swhiteho@redhat.com>
Subject: [PATCH review 34/85] gfs2: Store qd_id in struct gfs2_quota_data as a struct kqid
Date: Wed, 13 Feb 2013 09:51:23 -0800 [thread overview]
Message-ID: <1360777934-5663-34-git-send-email-ebiederm@xmission.com> (raw)
In-Reply-To: <1360777934-5663-1-git-send-email-ebiederm@xmission.com>
From: "Eric W. Biederman" <ebiederm@xmission.com>
- Change qd_id in struct gfs2_qutoa_data to struct kqid.
- Remove the now unnecessary QDF_USER bit field in qd_flags.
- Propopoage this change through the code generally making
things simpler along the way.
Cc: Steven Whitehouse <swhiteho@redhat.com>
Signed-off-by: "Eric W. Biederman" <ebiederm@xmission.com>
---
fs/gfs2/incore.h | 3 +-
fs/gfs2/quota.c | 69 +++++++++++++++++++----------------------------------
2 files changed, 26 insertions(+), 46 deletions(-)
diff --git a/fs/gfs2/incore.h b/fs/gfs2/incore.h
index c373a24..5b298bd 100644
--- a/fs/gfs2/incore.h
+++ b/fs/gfs2/incore.h
@@ -391,7 +391,6 @@ struct gfs2_revoke_replay {
};
enum {
- QDF_USER = 0,
QDF_CHANGE = 1,
QDF_LOCKED = 2,
QDF_REFRESH = 3,
@@ -403,7 +402,7 @@ struct gfs2_quota_data {
atomic_t qd_count;
- u32 qd_id;
+ struct kqid qd_id;
unsigned long qd_flags; /* QDF_... */
s64 qd_change;
diff --git a/fs/gfs2/quota.c b/fs/gfs2/quota.c
index 47315c0..8cb4d10 100644
--- a/fs/gfs2/quota.c
+++ b/fs/gfs2/quota.c
@@ -122,8 +122,9 @@ out:
static u64 qd2index(struct gfs2_quota_data *qd)
{
- return (2 * (u64)qd->qd_id) +
- test_bit(QDF_USER, &qd->qd_flags) ? 0 : 1;
+ struct kqid qid = qd->qd_id;
+ return (2 * (u64)from_kqid(&init_user_ns, qid)) +
+ (qid.type == USRQUOTA) ? 0 : 1;
}
static u64 qd2offset(struct gfs2_quota_data *qd)
@@ -136,7 +137,7 @@ static u64 qd2offset(struct gfs2_quota_data *qd)
return offset;
}
-static int qd_alloc(struct gfs2_sbd *sdp, int user, u32 id,
+static int qd_alloc(struct gfs2_sbd *sdp, struct kqid qid,
struct gfs2_quota_data **qdp)
{
struct gfs2_quota_data *qd;
@@ -147,9 +148,7 @@ static int qd_alloc(struct gfs2_sbd *sdp, int user, u32 id,
return -ENOMEM;
atomic_set(&qd->qd_count, 1);
- qd->qd_id = id;
- if (user)
- set_bit(QDF_USER, &qd->qd_flags);
+ qd->qd_id = qid;
qd->qd_slot = -1;
INIT_LIST_HEAD(&qd->qd_reclaim);
@@ -167,7 +166,7 @@ fail:
return error;
}
-static int qd_get(struct gfs2_sbd *sdp, int user, u32 id,
+static int qd_get(struct gfs2_sbd *sdp, struct kqid qid,
struct gfs2_quota_data **qdp)
{
struct gfs2_quota_data *qd = NULL, *new_qd = NULL;
@@ -179,8 +178,7 @@ static int qd_get(struct gfs2_sbd *sdp, int user, u32 id,
found = 0;
spin_lock(&qd_lru_lock);
list_for_each_entry(qd, &sdp->sd_quota_list, qd_list) {
- if (qd->qd_id == id &&
- !test_bit(QDF_USER, &qd->qd_flags) == !user) {
+ if (qid_eq(qd->qd_id, qid)) {
if (!atomic_read(&qd->qd_count) &&
!list_empty(&qd->qd_reclaim)) {
/* Remove it from reclaim list */
@@ -214,7 +212,7 @@ static int qd_get(struct gfs2_sbd *sdp, int user, u32 id,
return 0;
}
- error = qd_alloc(sdp, user, id, &new_qd);
+ error = qd_alloc(sdp, qid, &new_qd);
if (error)
return error;
}
@@ -469,8 +467,7 @@ static int qdsb_get(struct gfs2_sbd *sdp, struct kqid qid,
{
int error;
- error = qd_get(sdp, qid.type == USRQUOTA ? QUOTA_USER : QUOTA_GROUP,
- from_kqid(&init_user_ns, qid), qdp);
+ error = qd_get(sdp, qid, qdp);
if (error)
return error;
@@ -574,18 +571,10 @@ static int sort_qd(const void *a, const void *b)
const struct gfs2_quota_data *qd_a = *(const struct gfs2_quota_data **)a;
const struct gfs2_quota_data *qd_b = *(const struct gfs2_quota_data **)b;
- if (!test_bit(QDF_USER, &qd_a->qd_flags) !=
- !test_bit(QDF_USER, &qd_b->qd_flags)) {
- if (test_bit(QDF_USER, &qd_a->qd_flags))
- return -1;
- else
- return 1;
- }
- if (qd_a->qd_id < qd_b->qd_id)
+ if (qid_lt(qd_a->qd_id, qd_b->qd_id))
return -1;
- if (qd_a->qd_id > qd_b->qd_id)
+ if (qid_lt(qd_b->qd_id, qd_a->qd_id))
return 1;
-
return 0;
}
@@ -602,9 +591,9 @@ static void do_qc(struct gfs2_quota_data *qd, s64 change)
if (!test_bit(QDF_CHANGE, &qd->qd_flags)) {
qc->qc_change = 0;
qc->qc_flags = 0;
- if (test_bit(QDF_USER, &qd->qd_flags))
+ if (qd->qd_id.type == USRQUOTA)
qc->qc_flags = cpu_to_be32(GFS2_QCF_USER);
- qc->qc_id = cpu_to_be32(qd->qd_id);
+ qc->qc_id = cpu_to_be32(from_kqid(&init_user_ns, qd->qd_id));
}
x = be64_to_cpu(qc->qc_change) + change;
@@ -1047,8 +1036,8 @@ static int print_message(struct gfs2_quota_data *qd, char *type)
printk(KERN_INFO "GFS2: fsid=%s: quota %s for %s %u\n",
sdp->sd_fsname, type,
- (test_bit(QDF_USER, &qd->qd_flags)) ? "user" : "group",
- qd->qd_id);
+ (qd->qd_id.type == USRQUOTA) ? "user" : "group",
+ from_kqid(&init_user_ns, qd->qd_id));
return 0;
}
@@ -1070,8 +1059,8 @@ int gfs2_quota_check(struct gfs2_inode *ip, u32 uid, u32 gid)
for (x = 0; x < ip->i_res->rs_qa_qd_num; x++) {
qd = ip->i_res->rs_qa_qd[x];
- if (!((qd->qd_id == uid && test_bit(QDF_USER, &qd->qd_flags)) ||
- (qd->qd_id == gid && !test_bit(QDF_USER, &qd->qd_flags))))
+ if (!(qid_eq(qd->qd_id, make_kqid_uid(uid)) ||
+ qid_eq(qd->qd_id, make_kqid_gid(gid))))
continue;
value = (s64)be64_to_cpu(qd->qd_qb.qb_value);
@@ -1081,10 +1070,7 @@ int gfs2_quota_check(struct gfs2_inode *ip, u32 uid, u32 gid)
if (be64_to_cpu(qd->qd_qb.qb_limit) && (s64)be64_to_cpu(qd->qd_qb.qb_limit) < value) {
print_message(qd, "exceeded");
- quota_send_warning(make_kqid(&init_user_ns,
- test_bit(QDF_USER, &qd->qd_flags) ?
- USRQUOTA : GRPQUOTA,
- qd->qd_id),
+ quota_send_warning(qd->qd_id,
sdp->sd_vfs->s_dev, QUOTA_NL_BHARDWARN);
error = -EDQUOT;
@@ -1094,10 +1080,7 @@ int gfs2_quota_check(struct gfs2_inode *ip, u32 uid, u32 gid)
time_after_eq(jiffies, qd->qd_last_warn +
gfs2_tune_get(sdp,
gt_quota_warn_period) * HZ)) {
- quota_send_warning(make_kqid(&init_user_ns,
- test_bit(QDF_USER, &qd->qd_flags) ?
- USRQUOTA : GRPQUOTA,
- qd->qd_id),
+ quota_send_warning(qd->qd_id,
sdp->sd_vfs->s_dev, QUOTA_NL_BSOFTWARN);
error = print_message(qd, "warning");
qd->qd_last_warn = jiffies;
@@ -1121,8 +1104,8 @@ void gfs2_quota_change(struct gfs2_inode *ip, s64 change,
for (x = 0; x < ip->i_res->rs_qa_qd_num; x++) {
qd = ip->i_res->rs_qa_qd[x];
- if ((qd->qd_id == uid && test_bit(QDF_USER, &qd->qd_flags)) ||
- (qd->qd_id == gid && !test_bit(QDF_USER, &qd->qd_flags))) {
+ if (qid_eq(qd->qd_id, make_kqid_uid(uid)) ||
+ qid_eq(qd->qd_id, make_kqid_gid(gid))) {
do_qc(qd, change);
}
}
@@ -1183,8 +1166,7 @@ int gfs2_quota_refresh(struct gfs2_sbd *sdp, struct kqid qid)
struct gfs2_holder q_gh;
int error;
- error = qd_get(sdp, qid.type == USRQUOTA ? QUOTA_USER : QUOTA_GROUP,
- from_kqid(&init_user_ns, qid), &qd);
+ error = qd_get(sdp, qid, &qd);
if (error)
return error;
@@ -1267,8 +1249,7 @@ int gfs2_quota_init(struct gfs2_sbd *sdp)
if (!qc.qc_change)
continue;
- error = qd_alloc(sdp, (qc.qc_flags & GFS2_QCF_USER),
- from_kqid(&init_user_ns, qc.qc_id), &qd);
+ error = qd_alloc(sdp, qc.qc_id, &qd);
if (error) {
brelse(bh);
goto fail;
@@ -1509,7 +1490,7 @@ static int gfs2_get_dqblk(struct super_block *sb, struct kqid qid,
else
return -EINVAL;
- error = qd_get(sdp, type, from_kqid(&init_user_ns, qid), &qd);
+ error = qd_get(sdp, qid, &qd);
if (error)
return error;
error = do_glock(qd, FORCE, &q_gh);
@@ -1564,7 +1545,7 @@ static int gfs2_set_dqblk(struct super_block *sb, struct kqid qid,
if (fdq->d_fieldmask & ~GFS2_FIELDMASK)
return -EINVAL;
- error = qd_get(sdp, type, from_kqid(&init_user_ns, qid), &qd);
+ error = qd_get(sdp, qid, &qd);
if (error)
return error;
--
1.7.5.4
next prev parent reply other threads:[~2013-02-13 17:59 UTC|newest]
Thread overview: 109+ messages / expand[flat|nested] mbox.gz Atom feed top
[not found] <87621w14vs.fsf@xmission.com>
2013-02-13 17:50 ` [PATCH review 01/85] ceph: Only allow mounts in the initial network namespace Eric W. Biederman
2013-02-13 17:50 ` [PATCH review 02/85] ceph: Translate between uid and gids in cap messages and kuids and kgids Eric W. Biederman
2013-02-13 17:50 ` [PATCH review 03/85] ceph: Translate inode uid and gid attributes to/from " Eric W. Biederman
2013-02-13 17:50 ` [PATCH review 04/85] ceph: Convert struct ceph_mds_request to use kuid_t and kgid_t Eric W. Biederman
2013-02-13 17:50 ` [PATCH review 05/85] ceph: Convert kuids and kgids before printing them Eric W. Biederman
2013-02-13 17:50 ` [PATCH review 06/85] ceph: Enable building when user namespaces are enabled Eric W. Biederman
2013-02-13 17:50 ` [PATCH review 07/85] 9p: Add 'u' and 'g' format specifies for kuids and kgids Eric W. Biederman
2013-02-13 17:50 ` [PATCH review 08/85] 9p: Transmit kuid and kgid values Eric W. Biederman
2013-02-13 17:50 ` [PATCH review 09/85] 9p: Modify the stat structures to use kuid_t and kgid_t Eric W. Biederman
2013-02-13 17:50 ` [PATCH review 10/85] 9p: Modify struct 9p_fid to use a kuid_t not a uid_t Eric W. Biederman
2013-02-13 17:51 ` [PATCH review 11/85] 9p: Modify struct v9fs_session_info to use a kuids and kgids Eric W. Biederman
2013-02-13 17:51 ` [PATCH review 12/85] 9p: Modify v9fs_get_fsgid_for_create to return a kgid Eric W. Biederman
2013-02-13 17:51 ` [PATCH review 13/85] 9p: Allow building 9p with user namespaces enabled Eric W. Biederman
2013-02-13 17:51 ` [PATCH review 14/85] afs: Remove unused structure afs_store_status Eric W. Biederman
2013-02-13 17:51 ` [PATCH review 15/85] afs: Only allow mounting afs in the intial network namespace Eric W. Biederman
2013-02-13 17:51 ` [PATCH review 16/85] afs: Support interacting with multiple user namespaces Eric W. Biederman
2013-02-13 17:51 ` [PATCH review 17/85] coda: Restrict coda messages to the initial pid namespace Eric W. Biederman
2013-02-13 17:51 ` [PATCH review 18/85] coda: Restrict coda messages to the initial user namespace Eric W. Biederman
2013-02-13 18:14 ` Jan Harkes
2013-02-13 18:44 ` Eric W. Biederman
2013-02-13 17:51 ` [PATCH review 19/85] coda: Cache permisions in struct coda_inode_info in a kuid_t Eric W. Biederman
2013-02-13 17:51 ` [PATCH review 20/85] coda: Allow coda to be built when user namespace support is enabled Eric W. Biederman
2013-02-13 17:51 ` [PATCH review 21/85] ocfs2: Handle kuids and kgids in acl/xattr conversions Eric W. Biederman
2013-02-13 17:51 ` [PATCH review 22/85] ocfs2: convert between kuids and kgids and DLM locks Eric W. Biederman
2013-02-14 8:34 ` Joel Becker
2013-02-13 17:51 ` [PATCH review 23/85] ocfs2: Convert uid and gids between in core and on disk inodes Eric W. Biederman
2013-02-14 8:35 ` Joel Becker
2013-02-14 9:10 ` Eric W. Biederman
2013-02-13 17:51 ` [PATCH review 24/85] ocfs2: For tracing report the uid and gid values in the initial user namespace Eric W. Biederman
2013-02-13 17:51 ` [PATCH review 25/85] ocfs2: Compare kuids and kgids using uid_eq and gid_eq Eric W. Biederman
2013-02-14 8:37 ` Joel Becker
2013-02-13 17:51 ` [PATCH review 26/85] ocfs2: Enable building with user namespaces enabled Eric W. Biederman
2013-02-14 8:38 ` Joel Becker
2013-02-13 17:51 ` [PATCH review 27/85] gfs2: Remove improper checks in gfs2_set_dqblk Eric W. Biederman
2013-02-13 17:51 ` [PATCH review 28/85] gfs2: Split NO_QUOTA_CHANGE inot NO_UID_QUTOA_CHANGE and NO_GID_QUTOA_CHANGE Eric W. Biederman
2013-02-13 17:51 ` [PATCH review 29/85] gfs2: Report quotas in the caller's user namespace Eric W. Biederman
2013-02-13 17:51 ` [PATCH review 30/85] gfs2: Introduce qd2index Eric W. Biederman
2013-02-13 17:51 ` [PATCH review 31/85] gfs2: Modify struct gfs2_quota_change_host to use struct kqid Eric W. Biederman
2013-02-13 17:51 ` [PATCH review 32/85] gfs2: Modify qdsb_get to take a " Eric W. Biederman
2013-02-13 17:51 ` [PATCH review 33/85] gfs2: Convert gfs2_quota_refresh to take a kqid Eric W. Biederman
2013-02-13 17:51 ` Eric W. Biederman [this message]
2013-02-13 17:51 ` [PATCH review 35/85] gfs2: Remove the QUOTA_USER and QUOTA_GROUP defines Eric W. Biederman
2013-02-13 17:51 ` [PATCH review 36/85] gfs2: Use kuid_t and kgid_t types where appropriate Eric W. Biederman
2013-02-13 17:51 ` [PATCH review 37/85] gfs2: Use uid_eq and gid_eq " Eric W. Biederman
2013-02-13 17:51 ` [PATCH review 38/85] gfs2: Convert uids and gids between dinodes and vfs inodes Eric W. Biederman
2013-02-13 17:51 ` [PATCH review 39/85] gfs2: Enable building with user namespaces enabled Eric W. Biederman
2013-02-13 17:51 ` [PATCH review 40/85] ncpfs: Support interacting with multiple user namespaces Eric W. Biederman
2013-02-13 17:51 ` [PATCH review 41/85] nfs_common: Update the translation between nfsv3 acls linux posix acls Eric W. Biederman
2013-02-13 17:51 ` [PATCH review 42/85] sunrpc: Use userns friendly constants Eric W. Biederman
2013-02-13 17:51 ` [PATCH review 43/85] sunrpc: Use kuid_t and kgid_t where appropriate Eric W. Biederman
2013-02-13 17:51 ` [PATCH review 44/85] sunrpc: Use uid_eq and gid_eq " Eric W. Biederman
2013-02-13 17:51 ` [PATCH review 45/85] sunrpc: Simplify auth_unix now that everything is a kgid_t Eric W. Biederman
2013-02-13 17:51 ` [PATCH review 46/85] sunrpc: Convert kuids and kgids to uids and gids for printing Eric W. Biederman
2013-02-13 17:51 ` [PATCH review 47/85] sunrpc: Use gid_valid to test for gid != INVALID_GID Eric W. Biederman
2013-02-13 17:51 ` [PATCH review 48/85] sunrpc: Update gss uid to security context mapping Eric W. Biederman
2013-02-13 20:35 ` J. Bruce Fields
2013-02-13 21:17 ` Eric W. Biederman
2013-02-13 21:24 ` J. Bruce Fields
2013-02-13 17:51 ` [PATCH review 49/85] sunrpc: Update svcgss xdr handle to rpsec_contect cache Eric W. Biederman
2013-03-04 14:12 ` J. Bruce Fields
2013-03-04 17:11 ` Eric W. Biederman
2013-03-05 23:10 ` J. Bruce Fields
2013-03-05 23:43 ` Eric W. Biederman
2013-02-13 17:51 ` [PATCH review 50/85] sunrpc: Hash uids by first computing their value in the initial userns Eric W. Biederman
2013-02-13 17:51 ` [PATCH review 51/85] sunrpc: Properly encode kuids and kgids in RPC_AUTH_UNIX credentials Eric W. Biederman
2013-02-13 17:51 ` [PATCH review 52/85] sunrpc: Properly encode kuids and kgids in auth.unix.gid rpc pipe upcalls Eric W. Biederman
2013-02-13 21:05 ` J. Bruce Fields
2013-02-13 21:29 ` Eric W. Biederman
2013-02-13 21:50 ` J. Bruce Fields
2013-02-13 22:32 ` Eric W. Biederman
2013-02-13 22:58 ` J. Bruce Fields
2013-02-13 23:22 ` Eric W. Biederman
2013-02-14 7:12 ` Stanislav Kinsbursky
2013-02-14 8:42 ` Eric W. Biederman
2013-02-15 17:00 ` J. Bruce Fields
2013-02-15 18:47 ` Eric W. Biederman
2013-02-13 17:51 ` [PATCH review 53/85] sunrpc: Properly decode kuids and kgids in RPC_AUTH_UNIX credentials Eric W. Biederman
2013-02-13 17:51 ` [PATCH review 54/85] nfs: Pass GLOBAL_ROOT_UID and GLOBAL_ROOT_GID to keyring alloc Eric W. Biederman
2013-02-13 17:51 ` [PATCH review 55/85] nfs: Convert struct nfs_fattr to Use kuid_t and kgid_t Eric W. Biederman
2013-02-13 17:51 ` [PATCH review 56/85] nfs: Convert idmap to use kuids and kgids Eric W. Biederman
2013-02-13 17:51 ` [PATCH review 57/85] nfs: Convert nfs2xdr " Eric W. Biederman
2013-02-13 17:51 ` [PATCH review 58/85] nfs: Convert nfs3xdr " Eric W. Biederman
2013-02-13 17:51 ` [PATCH review 59/85] nfs: Convert nfs4xdr " Eric W. Biederman
2013-02-13 17:51 ` [PATCH review 60/85] nfs: kuid and kgid conversions for nfs/inode.c Eric W. Biederman
2013-02-13 17:51 ` [PATCH review 61/85] nfs: Enable building with user namespaces enabled Eric W. Biederman
2013-02-13 17:51 ` [PATCH review 62/85] nfsd: Remove declaration of nonexistent nfs4_acl_permisison Eric W. Biederman
2013-02-13 17:51 ` [PATCH review 63/85] nfsd: idmap use u32 not uid_t as the intermediate type Eric W. Biederman
2013-02-13 17:51 ` [PATCH review 64/85] nfsd: Convert idmap to use kuids and kgids Eric W. Biederman
2013-02-13 17:51 ` [PATCH review 65/85] nfsd: Remove nfsd_luid, nfsd_lgid, nfsd_ruid and nfsd_rgid Eric W. Biederman
2013-02-13 17:51 ` [PATCH review 66/85] nfsd: Convert nfs3xdr to use kuids and kgids Eric W. Biederman
2013-02-13 17:51 ` [PATCH review 67/85] nfsd: Convert nfsxdr " Eric W. Biederman
2013-02-13 17:51 ` [PATCH review 68/85] nfsd: Handle kuids and kgids in the nfs4acl to posix_acl conversion Eric W. Biederman
2013-02-13 17:51 ` [PATCH review 69/85] nfsd: Modify nfsd4_cb_sec to use kuids and kgids Eric W. Biederman
2013-02-13 17:51 ` [PATCH review 70/85] nfsd: Store ex_anon_uid and ex_anon_gid as " Eric W. Biederman
2013-02-13 17:52 ` [PATCH review 71/85] nfsd: Properly compare and initialize " Eric W. Biederman
2013-02-13 17:52 ` [PATCH review 72/85] nfsd: Enable building with user namespaces enabled Eric W. Biederman
2013-02-13 17:52 ` [PATCH review 73/85] cifs: Override unmappable incoming uids and gids Eric W. Biederman
2013-02-13 17:52 ` [PATCH review 74/85] cifs: Use BUILD_BUG_ON to validate uids and gids are the same size Eric W. Biederman
2013-02-13 17:52 ` [PATCH review 75/85] cifs: Pass GLOBAL_ROOT_UID and GLOBAL_ROOT_GID to keyring_alloc Eric W. Biederman
2013-02-13 17:52 ` [PATCH review 76/85] cifs: Use kuids and kgids SID to uid/gid mapping Eric W. Biederman
2013-02-13 17:52 ` [PATCH review 77/85] cifs: Convert from a kuid before printing current_fsuid Eric W. Biederman
2013-02-13 17:52 ` [PATCH review 78/85] cifs: Modify struct cifs_unix_set_info_args to hold a kuid_t and a kgid_t Eric W. Biederman
2013-02-13 17:52 ` [PATCH review 79/85] cifs: Convert struct tcon_link to use a kuid Eric W. Biederman
2013-02-13 17:52 ` [PATCH review 80/85] cifs: Convert struct cifs_fattr to use kuid and kgids Eric W. Biederman
2013-02-13 17:52 ` [PATCH review 81/85] cifs: Convert struct cifsFileInfo to use a kuid Eric W. Biederman
2013-02-13 17:52 ` [PATCH review 82/85] cifs: Modify struct smb_vol to use kuids and kgids Eric W. Biederman
2013-02-13 17:52 ` [PATCH review 83/85] cifs: Convert struct cifs_sb_info " Eric W. Biederman
2013-02-13 17:52 ` [PATCH review 84/85] cifs: Convert struct cifs_ses to use a kuid_t and a kgid_t Eric W. Biederman
2013-02-13 17:52 ` [PATCH review 85/85] cifs: Enable building with user namespaces enabled Eric W. Biederman
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1360777934-5663-34-git-send-email-ebiederm@xmission.com \
--to=ebiederm@xmission.com \
--cc=containers@lists.linux-foundation.org \
--cc=linux-fsdevel@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=serge@hallyn.com \
--cc=swhiteho@redhat.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox
all inboxes | Powered by JetHome®