diff options
author | Jeff Layton <jlayton@redhat.com> | 2010-09-29 19:51:11 -0400 |
---|---|---|
committer | Steve French <sfrench@us.ibm.com> | 2010-10-06 12:12:44 -0400 |
commit | 7ffec372458d163492e56e663a1b3a2d7be0a0a2 (patch) | |
tree | e404e3d1000ff41e9b27d0ecb4d6a47187e110d7 /fs/cifs/cifsacl.c | |
parent | f3983c2133e9bea9c8b4f690737d15e3e9b02491 (diff) |
cifs: add refcounted and timestamped container for holding tcons
Eventually, we'll need to track the use of tcons on a per-sb basis, so that
we know when it's ok to tear them down. Begin this conversion by adding a
new "tcon_link" struct and accessors that get it. For now, the core data
structures are untouched -- cifs_sb still just points to a single tcon and
the pointers are just cast to deal with the accessor functions. A later
patch will flesh this out.
Signed-off-by: Jeff Layton <jlayton@redhat.com>
Signed-off-by: Steve French <sfrench@us.ibm.com>
Diffstat (limited to 'fs/cifs/cifsacl.c')
-rw-r--r-- | fs/cifs/cifsacl.c | 42 |
1 files changed, 33 insertions, 9 deletions
diff --git a/fs/cifs/cifsacl.c b/fs/cifs/cifsacl.c index 32f244909a0d..2647ea410c4c 100644 --- a/fs/cifs/cifsacl.c +++ b/fs/cifs/cifsacl.c | |||
@@ -557,11 +557,16 @@ static struct cifs_ntsd *get_cifs_acl_by_fid(struct cifs_sb_info *cifs_sb, | |||
557 | { | 557 | { |
558 | struct cifs_ntsd *pntsd = NULL; | 558 | struct cifs_ntsd *pntsd = NULL; |
559 | int xid, rc; | 559 | int xid, rc; |
560 | struct tcon_link *tlink = cifs_sb_tlink(cifs_sb); | ||
561 | |||
562 | if (IS_ERR(tlink)) | ||
563 | return NULL; | ||
560 | 564 | ||
561 | xid = GetXid(); | 565 | xid = GetXid(); |
562 | rc = CIFSSMBGetCIFSACL(xid, cifs_sb_tcon(cifs_sb), fid, &pntsd, pacllen); | 566 | rc = CIFSSMBGetCIFSACL(xid, tlink_tcon(tlink), fid, &pntsd, pacllen); |
563 | FreeXid(xid); | 567 | FreeXid(xid); |
564 | 568 | ||
569 | cifs_put_tlink(tlink); | ||
565 | 570 | ||
566 | cFYI(1, "GetCIFSACL rc = %d ACL len %d", rc, *pacllen); | 571 | cFYI(1, "GetCIFSACL rc = %d ACL len %d", rc, *pacllen); |
567 | return pntsd; | 572 | return pntsd; |
@@ -574,10 +579,16 @@ static struct cifs_ntsd *get_cifs_acl_by_path(struct cifs_sb_info *cifs_sb, | |||
574 | int oplock = 0; | 579 | int oplock = 0; |
575 | int xid, rc; | 580 | int xid, rc; |
576 | __u16 fid; | 581 | __u16 fid; |
582 | struct cifsTconInfo *tcon; | ||
583 | struct tcon_link *tlink = cifs_sb_tlink(cifs_sb); | ||
584 | |||
585 | if (IS_ERR(tlink)) | ||
586 | return NULL; | ||
577 | 587 | ||
588 | tcon = tlink_tcon(tlink); | ||
578 | xid = GetXid(); | 589 | xid = GetXid(); |
579 | 590 | ||
580 | rc = CIFSSMBOpen(xid, cifs_sb_tcon(cifs_sb), path, FILE_OPEN, READ_CONTROL, 0, | 591 | rc = CIFSSMBOpen(xid, tcon, path, FILE_OPEN, READ_CONTROL, 0, |
581 | &fid, &oplock, NULL, cifs_sb->local_nls, | 592 | &fid, &oplock, NULL, cifs_sb->local_nls, |
582 | cifs_sb->mnt_cifs_flags & CIFS_MOUNT_MAP_SPECIAL_CHR); | 593 | cifs_sb->mnt_cifs_flags & CIFS_MOUNT_MAP_SPECIAL_CHR); |
583 | if (rc) { | 594 | if (rc) { |
@@ -585,11 +596,12 @@ static struct cifs_ntsd *get_cifs_acl_by_path(struct cifs_sb_info *cifs_sb, | |||
585 | goto out; | 596 | goto out; |
586 | } | 597 | } |
587 | 598 | ||
588 | rc = CIFSSMBGetCIFSACL(xid, cifs_sb_tcon(cifs_sb), fid, &pntsd, pacllen); | 599 | rc = CIFSSMBGetCIFSACL(xid, tcon, fid, &pntsd, pacllen); |
589 | cFYI(1, "GetCIFSACL rc = %d ACL len %d", rc, *pacllen); | 600 | cFYI(1, "GetCIFSACL rc = %d ACL len %d", rc, *pacllen); |
590 | 601 | ||
591 | CIFSSMBClose(xid, cifs_sb_tcon(cifs_sb), fid); | 602 | CIFSSMBClose(xid, tcon, fid); |
592 | out: | 603 | out: |
604 | cifs_put_tlink(tlink); | ||
593 | FreeXid(xid); | 605 | FreeXid(xid); |
594 | return pntsd; | 606 | return pntsd; |
595 | } | 607 | } |
@@ -616,10 +628,15 @@ static int set_cifs_acl_by_fid(struct cifs_sb_info *cifs_sb, __u16 fid, | |||
616 | struct cifs_ntsd *pnntsd, u32 acllen) | 628 | struct cifs_ntsd *pnntsd, u32 acllen) |
617 | { | 629 | { |
618 | int xid, rc; | 630 | int xid, rc; |
631 | struct tcon_link *tlink = cifs_sb_tlink(cifs_sb); | ||
632 | |||
633 | if (IS_ERR(tlink)) | ||
634 | return PTR_ERR(tlink); | ||
619 | 635 | ||
620 | xid = GetXid(); | 636 | xid = GetXid(); |
621 | rc = CIFSSMBSetCIFSACL(xid, cifs_sb_tcon(cifs_sb), fid, pnntsd, acllen); | 637 | rc = CIFSSMBSetCIFSACL(xid, tlink_tcon(tlink), fid, pnntsd, acllen); |
622 | FreeXid(xid); | 638 | FreeXid(xid); |
639 | cifs_put_tlink(tlink); | ||
623 | 640 | ||
624 | cFYI(DBG2, "SetCIFSACL rc = %d", rc); | 641 | cFYI(DBG2, "SetCIFSACL rc = %d", rc); |
625 | return rc; | 642 | return rc; |
@@ -631,10 +648,16 @@ static int set_cifs_acl_by_path(struct cifs_sb_info *cifs_sb, const char *path, | |||
631 | int oplock = 0; | 648 | int oplock = 0; |
632 | int xid, rc; | 649 | int xid, rc; |
633 | __u16 fid; | 650 | __u16 fid; |
651 | struct cifsTconInfo *tcon; | ||
652 | struct tcon_link *tlink = cifs_sb_tlink(cifs_sb); | ||
634 | 653 | ||
654 | if (IS_ERR(tlink)) | ||
655 | return PTR_ERR(tlink); | ||
656 | |||
657 | tcon = tlink_tcon(tlink); | ||
635 | xid = GetXid(); | 658 | xid = GetXid(); |
636 | 659 | ||
637 | rc = CIFSSMBOpen(xid, cifs_sb_tcon(cifs_sb), path, FILE_OPEN, WRITE_DAC, 0, | 660 | rc = CIFSSMBOpen(xid, tcon, path, FILE_OPEN, WRITE_DAC, 0, |
638 | &fid, &oplock, NULL, cifs_sb->local_nls, | 661 | &fid, &oplock, NULL, cifs_sb->local_nls, |
639 | cifs_sb->mnt_cifs_flags & CIFS_MOUNT_MAP_SPECIAL_CHR); | 662 | cifs_sb->mnt_cifs_flags & CIFS_MOUNT_MAP_SPECIAL_CHR); |
640 | if (rc) { | 663 | if (rc) { |
@@ -642,12 +665,13 @@ static int set_cifs_acl_by_path(struct cifs_sb_info *cifs_sb, const char *path, | |||
642 | goto out; | 665 | goto out; |
643 | } | 666 | } |
644 | 667 | ||
645 | rc = CIFSSMBSetCIFSACL(xid, cifs_sb_tcon(cifs_sb), fid, pnntsd, acllen); | 668 | rc = CIFSSMBSetCIFSACL(xid, tcon, fid, pnntsd, acllen); |
646 | cFYI(DBG2, "SetCIFSACL rc = %d", rc); | 669 | cFYI(DBG2, "SetCIFSACL rc = %d", rc); |
647 | 670 | ||
648 | CIFSSMBClose(xid, cifs_sb_tcon(cifs_sb), fid); | 671 | CIFSSMBClose(xid, tcon, fid); |
649 | out: | 672 | out: |
650 | FreeXid(xid); | 673 | FreeXid(xid); |
674 | cifs_put_tlink(tlink); | ||
651 | return rc; | 675 | return rc; |
652 | } | 676 | } |
653 | 677 | ||